您的位置:首页 > 职场人生

概率题 面试 笔试

2015-07-12 16:26 621 查看

概率题 组合题 面试 笔试

本文总结了面试或笔试中可能考到的概率和组合题。

第1题

一个桶里面有白球、黑球各100个,现在按下述规则取球:

- i 、每次从桶里面拿出来两个球;

- ii、如果取出的是两个同色的求,就再放入一个黑球;

- iii、如果取出的是两个异色的求,就再放入一个白球。

问:最后桶里面只剩下一个黑球的概率是多少?

答:

动态规划,令f[i,j]表示有i个白球,j个黑球的概率。

已知f[100,100] = 1, 求f[0,1]。

拿到两个白球: f[i-2,j+1] = i/(i+j) * (i-1)/(i+j-1) * f[i,j]

拿到两个黑球: f[i, j-1] = j/(i+j) * (j-1)/(i+j-1) * f[i,j]

拿到一黑一白: f[i, j-1] =2 * i/(i+j) * j/(i+j-1) * f[i,j]

第2题

10个人出去玩,集合时间有10分钟,每个人都在该时间内到达,概率均匀分布,彼此独立,那么最后一个人最有可能到达的时间是?

答:

遇到这种想不明白,最好的方法就是枚举。

若最后一个人在10分钟到达(概率1/10),其他人也都已经到达了(概率是1),总概率是 191^{9} * (1/10)

若最后一个人在9分钟到达(概率1/10),其他人到达的概率是(9/10)9(9/10)^{9},总概率是 (9/10)9(9/10)^{9} * (1/10)

依此类推。可见概率最大的是第10分钟。

原文引自此处

第3题

已知随机数生成函数f(),返回0的概率是60%,返回1的概率是40%。根据f()求随机数函数g(),使返回0和1的概率是50%,不能用已有的随机生成库函数。

答:

调用f()两次即可,会出现4种结果(0,0), (0,1), (1,0), (1,1),其中出现(0,1), (1,0)的概率是一样的,可以构造出等概率事件,比如出现(0,1)可返回0,出现(1,0)可返回1,如果出现其他两种情况则舍掉重新调用。

原文引自此处

第4题

给定rand5(),实现一个方法rand7()。也即,给定一个产生0到4(含)随机数方法,编写一个产生0到6(含)随机数的方法。

答:

随机数函数的关键是确保产生每一个数的的概率相等。我们可用通过5 * rand5() + rand5()产生[0:24],舍弃[21:24],最后除以7取余数,则可得到概率相等的[0:6]的数值。

原文引自此处

第5题

100个人排队,每个人只能看到自己之前的人的帽子的颜色(假设只有黑白两色),每个人都得猜自己帽子的颜色,只能说一次,说错就死掉,别人可以听到之前的人的答案以及是否死掉。请问用什么策略说死掉的人最少。

答:

假设只有3个人,假设ture = 白,false = 黑,用这个公式x3 = (x1 == x2),用人话就是1和2的帽子颜色一样的话就说白,不一样的话就说黑。这个策略第一个人死的概率是1/2,剩下的两个都不会死。

推广到4个人,也就是x4 = (x3 == (x1 == x2)),照理可以推广到100人。但问题就是人很难判断,只能靠计算机来算。

另一个解题方法:“最后一个人看一下前面黑帽子的个数是奇数还是偶数,比如约定奇数说黑,偶数说白。这样前面的人都可以推断出来正确的结果。”

第6题

54张牌,平均分成三堆,大小王在同一堆的概率?

答:

C1652∗C1836∗C1818/A22C1854∗C1836∗C1818/A33=17/53\frac{C_{52}^{16} * C_{36}^{18} * C_{18}^{18} / A_{2}^{2}}{
C_{54}^{18} * C_{36}^{18} * C_{18}^{18} / A_{3}^{3}} = 17/53

或者可以这么想。先平均分三堆,大王在第一堆的概率是1/3, 小王在剩下的53张牌中,有17/53的概率和大王同一堆。依此类推,大王还可能在2,3堆,因此

1/3∗17/53∗3=17/531/3 * 17/53 * 3 = 17/53

第7题

买饮料,三个瓶盖可以换一瓶,请问要买100瓶饮料,最少需要买多少瓶?

答:

设要买x瓶。

x+x/3>=100x + x/3 >= 100

对么?小心!x/3瓶如果满3瓶还可以再换的,想象某人堵在小卖部门口狂开瓶。因此应该是

x+x/3+x/9+...+x/3n>=100x + x/3 + x/9 + ... + x/3^{n} >= 100

n=log3xn=log_{3}x

x(1−1/3n)/(1−1/3)>=100x (1 - 1/3^{n})/(1 - 1/3) >= 100

x(1−1/x)>=200/3x(1-1/x) >= 200/3

x=68x=68

不过我返回去算了下, 发现x=68x=68只能买99瓶…毕竟算的时候当xx是实数了,因此还是再返回来推一下的靠谱,x=69x=69。

第8题

有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中等概率随机取得m个记录。

答:

如果可以输入两次,那就可以统计出总数N, 再随机0到N-1数,判个重。但是这里只能输入一次,这里给出两种方法。

第一种。在输入的过程中,给每个记录一个[0,1]的随机数,最后取随机数最大的前m个记录。可以用m大的小根堆来维护。

第二种,蓄水池抽样 或 reservoir sample。假设输入到第n个记录了,以m/n的概率取该数,如果取中则随机替换掉原来取中的m个记录中的一个。初始时,选中前m个记录。乍一看好像不靠谱,一证明就服了。证明也很简单。

假设n-1时成立,即前n-1个记录,均以m/(n-1)的概率来判断是否选中。我们要证明,输入第n个记录后,前n个记录均以m/n的概率来判断是否选中。

对于第n个记录,以m/n的概率选择它,ok,满足要求。现在来看剩下的前n-1个记录。对于在前n-1记录中被选中的第i个记录,当前保持被选中的可能,要么是第n个记录没有被选中 (1-m/n) * (m/(n-1)),要么是第n个记录选中了但是i没有被替换掉 m/n * (m-1)/m * m/(n-1),两者相加正好等于m/n,就是这么酷。

此外还有扩展版,以不同权重被选中,参考此文

第9题

在一条高速公路上,在30分钟内看到一辆汽车的可能性是0.95,那么在10分钟内看到一辆车的概率是多少?(假设过车的概率是恒定的)

答:

记10分钟内看到车的概率为pp. 那么30分钟都没看到车的概率是(1−p)3=1−0.95=0.05(1-p)^3 = 1 - 0.95 = 0.05

所以p=1−0.051/3p = 1 - 0.05^{1/3}

第10题

你和朋友去参加一个晚会,带你和朋友在内,共有10人。你的朋友和你打赌,你找到一位和你同一天生日的,你就得到1美元,他找到的任何一个和你生日不同的人,他得到2美元。你会打这个赌吗?

答:

题目描述有些微妙,这里姑且这么理解,你找到一个相同生日的就得1美元,找到两个2美元,依次类推。他找到一个和你生日不同的得2美元,找到多少人都是2美元。

假设一年365天,大家都是同一年出生(同龄人嘛)。他拿到钱的期望是2∗(1−(1/365)10)2 * (1 - (1/365)^{10}). 你拿到1美元的概率是 C1101/365(364/365)9C_{10}^11/365(364/365)^9, 2美元的概率是 C210(1/365)2(364/365)7C_{10}^2(1/365)^2(364/365)^7…这是二项分布嘛,期望是np=10∗1/365=10/365np = 10 * 1/365 = 10/365. 看过来对方那个数更大,所以不能赌。

其他

对,我就是懒的写了。见

/article/9765111.html

http://www.acmerblog.com/interviews-about-probability-5359.html

注:答案不确定,欢迎纠错。

先写到这吧,就是想试试markdown的酷炫排版,感觉这个编辑器比markdownpad好用,还支持离线编辑 (~ ̄▽ ̄)~*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: