IT 概率面试题整理

若干面试概率题
概率论是计算机科学非常重要的基础学科之一,概率题也是在程序员求职过程中经常遇到的问题。
以下总结若干经典的概率题,作为练习。
1. 在半径为1的圆中随机选取一点。
方法1:在x轴[-1,1],y轴[-1,1]的正方形随机选取一点,如果此点在圆内,则即为所求的点。如果不在圆内,则重新随机直到选到了为止。
方法2:从[0, 2*pi)随机选取一个角度,再在这个方向的半径上随机选取一个点。但半径上的点不能均匀选取,选取的概率要和离圆心的距离成正比,这样才能保证随机点在圆内是均匀分布的。
2. 一根木棒,截成三截,组成三角形的概率是多少?
设第一段截x,第二段截y,第三段1-x-y。
考虑所有可能的截法。可能的截法中必须保证三条边都是正数且小于原来边长,则有0<x<1,0<y<1,0<1-x-y<1,画图可知,(x,y)必须在单位正方形的左下角的半个直角三角形里,面积为1/2。
然后考虑能形成三角形的截法。首先要满足刚才的三个条件0<x<1,0<y<1,0<1-x-y<1,然后必须符合三角形的边的要求,即两边之和大于第三边,x+y>1-x-y,x+1-x-y>y,y+1-x-y>x,化简即得
0<x<1/2,0<y<1/2,1/2<x+y<1
画图可知,此时(x,y)必须在边长为1/2的三角形的右上角的半个直角三角形里,面积为1/8。
于是最终概率为 (1/8)/(1/2) = 1/4。
3. 抛一个六面的色子,连续抛直到抛到6为止,问期望的抛的次数是多少。
因为每次抛到6的概率相等,都是1/6,于是期望的次数就是1/(1/6)=6次。
下面用一种不一样的方法解答,假设期望的次数为E。考虑第一次抛,如果已经抛到6了(概率为1/6),那么就不用再抛了。如果没抛到6(概率为5/6),那么还需要继续抛,可是还要抛多少次呢?显然,现在开始知道抛到6的次数仍然是E,但是刚刚已经抛了一次了于是可以得到这个等式
E = 1 * 1/6 + (1 + E) * 5/6,
解得 E = 6。即期望的次数为6次。
4. 一个木桶里面有M个白球,每分钟从桶中随机取出一个球涂成红色(无论白或红都涂红)再放回,问将桶中球全部涂红的期望时间是多少?
令桶中有i个红球后再把全部球涂红的期望时间为a[i],此时再取出一个球,如果是红色的(概率为i/M),则直接放回,且剩余的期望时间仍是a[i]。如果是白色的(概率为1-i/M),则涂红后放回,剩余的期望时间为a[i+1],则
a[i] = (1 + a[i]) * i/M + (1 + a[i+1]) * (1 – i/M)
即   a[i] = a[i+1] + M/(M-i)
显然,有a[M] = 0
可以解得 a[0] = M/M + M/(M-1) + … + M/1 + 0
5. 你有一把宝剑。每使用一个宝石,有50%的概率会成功让宝剑升一级,50%的概率会失败。如果宝剑的级数大于等于5的话,那么失败会使得宝剑降1级。如果宝剑的级数小于5的话,失败没有效果。问题是:期望用多少个宝石可以让一把1级的宝剑升到9级?
问题比较简单,用a[i]表示从第i-1级升到第i级期望使用的宝石数量。
当i<=5时,因为不会降级,则期望的数量均为2,即a[2] = a[3] = a[4] = a[5] = 2
当i>5时,因为会降级,成功时一个宝石就够了,不成功时需要倒退一级,需要先使用a[i-1]个宝石先回到i-1级,再使用a[i]个宝石升到第i级,即
a[i] = 1 * 1/2 + (1 + a[i-1] + a[i]) * 1/2
即 a[i] = a[i-1] + 2
可知,a[6]= 4, a[7] = 6, a[8] = 8, a[9] = 10
则1级到9级需要的宝石数为 a[2]+…+a[9] = 36。
6. 已知有个rand7()的函数,返回1到7随机自然数,怎样利用这个rand7()构造rand10(),随机1~10。
产生随机数的主要原则是每个数出现的概率是相等的,如果可以得到一组等概率出现的数字,那么就可以从中找到映射为1~10的方法。
rand7()返回1~7的自然数,构造新的函数 (rand7()-1)*7 + rand7(),这个函数会随机产生1~49的自然数。原因是1~49中的每个数只有唯一的第一个rand7()的值和第二个rand7()的值表示,于是它们出现的概率是相等。
但是这里的数字太多,可以丢弃41~49的数字,把1~40的数字分成10组,每组映射成1~10中的一个,于是可以得到随机的结果。
具体方法是,利用(rand7()-1)*7 + rand7()产生随机数x,如果大于40则继续随机直到小于等于40为止,如果小于等于40,则产生的随机数为(x-1)/4+1。
7. 已知有个randM()的函数,返回1到M随机自然数,怎样利用这个randM()构造randN(),随机1~N。
上题的扩展。
当N<=M时可以直接得到。
当N>M时,类似构造(randM()-1)*M + randM(),可以产生1~M^2(即randM^2),可以在M^2中选出N个构造1~N的映射。
如果M^2还是没有N大,则可以对于randM^2继续构造,直到成功为止。
8. 已知一随机发生器,产生0的概率是p,产生1的概率是1-p,现在要你构造一个发生器,使得它产生0和1的概率均为1/2。
考虑连续产生两个随机数,结果只有四种可能:00、01、10、11,其中产生01和产生10的概率是相等的,均为p*(1-p),于是可以利用这个概率相等的特性等概率地产生01随机数。
比如把01映射为0,10映射为1。于是整个方案就是:
产生两个随机数,如果结果是00或11就丢弃重来,如果结果是01则产生0,结果是10则产生1。
9. 已知一随机发生器,产生的数字的分布不清楚,现在要你构造一个发生器,使得它产生0和1的概率均为1/2。
思路类似,考虑连续产生两个随机数a、b,结果有三种情况a==b,a>b,a<b,其中由于a和b的对称性,a>b和a<b出现的概率是相等的,于是可以利用这个概率相等的特性等概率地产生01随机数。方法类似。
或者可以找到另一种概率相等的事件,比如选择一个阈值th,把随机数的结果分为小于阈值和大于等于阈值两种情况,于是连续产生两个随机数,他们一个小于阈值,另一个大于等于阈值的概率是相等。然后类似产生随机数。
10. 已知一随机发生器,产生0的概率是p,产生1的概率是1-p,构造一个发生器,使得它构造1、2、3的概率均为1/3;…。更一般地,构造一个发生器,使得它构造1、2、3、…n的概率均为1/n。
此时我们已经知道,要从n个数中等概率地产生一个随机数,关键是要找到n个或更多个出现概率相等的事件,然后我们重复随机地产生事件,如果是跟这n个事件不同的事件直接忽略,直到产生这n个事件中的一个,然后就产生跟这个事件匹配的随机数。由于n个事件发生的概率相等,于是产生的随机数的概率也是相等的。
考虑连续产生x个随机数,结果应该是x个0跟1的组合,为了使某些结果出现的概率相等,我们应该要让这个结果中0和1出现的次数相等,即各占一半。于是x的长度必须是偶数的,为了方便,考虑连续产生2x个随机数。每个0跟1各出现一半的结果可以赋予1到n的某个数,为了能够表示这n个数,需要0跟1各出现一半的总结果数大于等于n,即
C(2*x, x) >= n
解出最小的x即为效率最高的x。
然后把前n个0和1个出现一半的结果分别赋予1到n的值。随机时连续产生2*x个数,如果不是这n个结果中的一个则重新随机,如果是的话则产生对应的值作为随机结果。
11. 给出从n个数中随机选择m个数的方法。n很大,可以认为是亿级别。m可以很小,如接近1;也可以很大,如接近n。
一个直接的思路是一直重复地随机,直到随机到m个数为止。这个方法有两个弊端:
1. 难以直到后面随机到的一个数是否在前面已经随机过了,因为数据量很大,无法保存在内存中,如果保存到外存中则时间花费太大。
2. 如果m很大,甚至接近于n,则后面随机到的数字基本上都是前面随机过的,因而需要尝试的随机次数太多。
一个思路是每个数被选中的概率是m/n,则可以遍历一遍原数据,在遍历每个数字的同时以m/n的概率决定是否要选择当前数字,则当遍历完毕的时候,选择到的数字在平均意义就是m个。这个会随着n的增大而更好地趋近于m,但不能很精确地保证随机到的数字一定是m个。
以上思路虽然不能满足要求,但我们可以进行改进。刚才我们在遍历每个数字的时候都是以同样的概率m/n决定是否要选择该数字,实际上,在当前遍历数字的前面的数字的结果我们是已经知道了,我们可以根据前面的随机结果动态地调整当前的随机策略,使得最终能够保证随机到的数字一定是m个。
具体的做法是,遍历第1个数字时有m/n的概率进行选择,如果选择了第1个数字,则第2个数字被选择的概率调整为(m-1)/(n-1),如果没选择第1个数字,则第2个数字被选择的概率为m/(n-1)。即遍历到第i个数字的时候,如果此时已经选择了k个,则以(m-k)/(n-i+1)的概率决定是否要选择当前的第i个数字。
这样可以保证每次都能够保证在剩下的数字中能选择适当的数使得总体选择的数字是m个。比如,如果前面已经随机了m个,则后面随机的概率就变为0。如果前面一直都没随机到数字,则后面随机到的概率就会接近1。最终得到的结果始终精确地是m个数字。
12. 给出从n个数中随机选择1个的方法。注意,n非常大,并且一开始不知道其具体值。数字是一个一个给你的,当给完之后,你必须立刻给出随机的结果。
这里n的值非常大,而且要求立即给出答案,所以不能把所有的数字先保存起来,然后再慢慢考虑要随机哪个。
这题跟上面一题比较类似,因为我们不知道数字到底有多少个,所以必须在得到每一个数字的时候就有一个当前的结果,这样在数字给完的时候可以给出答案。
于是第1个数字是必须要拿的。问题是当第2个数字来的时候,究竟要保留手上的数字,还是拿当前的第2个数字呢?更一般地,当第i(i>1)个数字来的时候,究竟是保留手上的数字,还是选择当前的第i个数字呢?
答案是要保证每个数字被选取的概率是相等,当第i个数来的时候,如果我们已经保证了前i-1个数每个数被选取的概率都是相等的,那么只要第i个数字被选取的概率是1/i,我们就可以知道所有i个数被选取的概率都是1/i了。所以只需要以1/i的概率决定是否要选取当前的第i个数字即可。
于是可以保证对于任意的n,当给完n个数字时,选择每个数字的概率都是相等的,为1/n。
13. 给出从n个数中随机选择m个的方法。注意,n非常大,并且一开始不知道其具体值。数字是一个一个给你的,当给完之后,你必须立刻给出随机的结果。
这题是上一题的推广,于是可以仿照着进行。
首先前m个数字是必须拿的。问题是当第i(i>m)个数字来的时候,究竟是要丢弃这个数,还是保留这个数?如果要保留这个数的话,则必须得丢弃手中已有的m个数,那是怎么确定丢弃哪个呢?
下面是就具体的做法。第i个数到来的时候,以m/i的概率决定是否要选择这个数字。如果选择了这个数字,则随机地替换掉手上m个数字中的一个。
如果前i-1个数字的时候保证了每个数字被选取的概率相等,则这样做之后可以保证每个数字被选取的概率也相等,为m/i。
1. 第i个数选择的概率是m/i,因为算法就是这样决定的。
2. 考虑前i-1个数字中的任意一个,它在第i个数之前被选择的概率是m/(i-1)。在第i个数字的时候,这个数字要被选择的话又两种可能,一是第i个数没有被选中(概率是1-m/i),二是第i个数倍选中了(概率是m/i)但是替换掉的数字不是它(概率是1-1/m),于是这个数在第i个数时仍然被选择的概率是m/(i-1) * ((1-m/i) + (m/i * (1-1/m))) = m / (i-1) * ((i-1) / i) = m/i。
由数学归纳法原理知,对于任意的n,当给完n个数的时候,选择的结果可以保证这n个数中每个被选中的概率都是相等


概率题 组合题 面试 笔试
本文总结了面试或笔试中可能考到的概率和组合题。
________________________________________
第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),总概率是 19 * (1/10) 
若最后一个人在9分钟到达(概率1/10),其他人到达的概率是(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 
或者可以这么想。先平均分三堆,大王在第一堆的概率是1/3, 小王在剩下的53张牌中,有17/53的概率和大王同一堆。依此类推,大王还可能在2,3堆,因此 
1/3∗17/53∗3=17/53
第7题
买饮料,三个瓶盖可以换一瓶,请问要买100瓶饮料,最少需要买多少瓶?
答: 
设要买x瓶。 
x+x/3>=100 
对么?小心!x/3瓶如果满3瓶还可以再换的,想象某人堵在小卖部门口狂开瓶。因此应该是 
x+x/3+x/9+...+x/3n>=100 
n=log3x 
x(1−1/3n)/(1−1/3)>=100 
x(1−1/x)>=200/3 
x=68 
不过我返回去算了下, 发现x=68只能买99瓶…毕竟算的时候当x是实数了,因此还是再返回来推一下的靠谱,x=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分钟内看到车的概率为p. 那么30分钟都没看到车的概率是(1−p)3=1−0.95=0.05 
所以p=1−0.051/3
第10题
你和朋友去参加一个晚会,带你和朋友在内,共有10人。你的朋友和你打赌,你找到一位和你同一天生日的,你就得到1美元,他找到的任何一个和你生日不同的人,他得到2美元。你会打这个赌吗?
答: 
题目描述有些微妙,这里姑且这么理解,你找到一个相同生日的就得1美元,找到两个2美元,依次类推。他找到一个和你生日不同的得2美元,找到多少人都是2美元。 
假设一年365天,大家都是同一年出生(同龄人嘛)。他拿到钱的期望是2∗(1−(1/365)10). 你拿到1美元的概率是 C1101/365(364/365)9, 2美元的概率是 C210(1/365)2(364/365)7…这是二项分布嘛,期望是np=10∗1/365=10/365. 看过来对方那个数更大,所以不能赌。


Quant面试烧脑题概率题求各位解答?
如题,本人碰到了一个有趣的面试题,假如草地上有一群兔子,数量无穷多,但是体重不相同。


我们从中选出10只兔子,记其中的最重的兔子的重量为A, 然后再从剩余的兔子中选注20只,记其中的最重的兔子的重量为B, 问A大于B的概率是多少?


面试官提示说,可以想象成一次抓了1只和两只兔子,并且考虑抽出最重的兔子的概率是多少? 
 
昨天看到一道某公司三面的概率题,本质是排列组合,于是乎打算回顾下排列组合:
用C(n,m)表示从n个不同的物品选择m个的选法,n>=m  combination
用P(n,m)表示从n个不同的物品选择m个进行排列的选法,n>=m permutation
昨天看到一道面试题,说是概率,其实本质就是求样本空间数的排列组合,和事件数排列组合,然后比一下,本质还是排列组合,当然如果你比较敏锐,直接用概率来算,也是可以的,而且更快
54张扑克牌均分成3堆,则大小王在一堆的概率?
样本空间数 C(54,18)*C(36,18)*C(18,18)/P(3,3)
上面显而易见,为何要除以P(3,3) 我总是习惯A(3,3)= =还是受以前的习惯?
因为三堆大小相同,你第一次选择的时候,不知道是哪一堆,或者更通俗的例子,1-6 均分3堆,12,34,56和34,12,56其实是一种,但在分子的数种算了两次,由于三个可以排列,即P(3,3),所以除以它。
如果不一样呢? 1-7分3,2,2三堆,C(7,3)C(4,2)C(2,2)/P(2,2),因为三个数和其他不同的,后面要除以P(2,2),例如123,45,67 123,67,45是一个,但是在里面算了两次,
因此我们来看大小王在一堆事件数。
C(2,2)C(52,16)C(36,18)C(18,18)/P(2,2), 类比前面,从52个选16个陪在大小王边上,之间是没有重复的,不管三堆怎么换(而之前的6个分三堆不一样,第一次选12,后面34,56和第一次34,后面12,56是一种,然而在公式里算重了) 而后面
是两堆一样的,可能重,故除以P(2,2)
算概率了~~~
P(X=大小王在一堆)= C(2,2)C(52,16)C(36,18)C(18,18)/P(2,2)  /  C(54,18)*C(36,18)*C(18,18)/P(3,3)  =17/53
我看到某博客上答案好像不对啊~~~~
经过和sumnous_t大神的交涉,博客上答案改正过来啦~~~答案不重要,最重要的是思维,思路开阔,我喜欢这种探讨~~~~
顺带提几个重要的组合公式,有了新的对应事件的解释:
C(n,m)=C(n-1,m-1)+C(n-1,m-1) 我每次要完全回忆都会稍借助比较小的数据, C(4,2)=C(3,2)+C(3,1)
将组合数朝着小的方向分解,类似分治,且后一项都为m-1
看到百度百科有一个新的解释,从n个选m个,对于其中一个,可以选或不选,根据这个feature(我理解成ML的特征)只有两种,且之间不重复,并起来等于原问题,
选的话C(n-1,m-1) 不选的话C(n-1,m)
因此C(n,m)=C(1,1)C(n-1,m-1)+C(1,0)C(n-1,m)
从这里我又得到启发,推新的公式,对于其中两个,可以选0,1,2个,
C(n,m)=C(2,0)C(n-2,m)+C(2,1)C(n-2,m-1)+C(2,2)C(n-2,m-2) //用小的case检验正确
还有一个更逆天的公式。。
notation:
Sum(K=1,N)f(K)表示求和
也是从N个选M个,不排列,那么对N-M个数从1编号,另外M个数
选1,剩下选m-1 C(n-1,m-1),选1只有一种
不选1,选2,剩下选m-1 C(n-2,m-1),不选1 选2 在1,2的四种组合中是一种
...
不选1...N-M-1, 选N-M, 剩下选m-1,C(m,m-1)
不选1,...N-M, 剩下选M C(m,m)=C(m-1,m-1)
这N-M+1个情况,之间没有交集,因为给定编号的N-M个数完全不同(case1与case2...n-m+1不同,关于选不选1,不同是互相的,所以case2只要与case3...n-m+1比较就可以了,case2与case3...casen-m+1不同,一直下去,所有的互不相同,没交集),并且并起来,包含了全部N个选M个的情况(有点难理解,选了1或者不选1,不选1又包含了选2 和不选2 ,然后一直下去)
因此得
Sum(k=m,n)C(k-1,m-1)=C(n,m) (n>=m)
因此两个组合重要公式:
1. C(n,m)=C(1,1)C(n-1,m-1)+C(1,0)C(n-1,m)
鄙人又扩充了一个C(n,m)=C(2,0)C(n-2,m)+C(2,1)C(n-2,m-1)+C(2,2)C(n-2,m-2)
2.Sum(k=m,n)C(k-1,m-1)=C(n,m) (n>=m)
另外关于是否要除于排列数对于简单的情况有了一个总结
Quant面试概率题问找对象的概率?
男女两组,各自收入均匀随机分布,样本总数、平均值都一样
现随机抽取男女配对,配对成功的条件是男的收入大于女
配对不成功的男女再继续配对,反复n次


问最后会有多少比例男的始终无法配对成功?
 
 
 
概率题:一个篮子里装着20个红球和20个蓝球,每次从中取出2球,如果取出的2球颜色是一样的,那么放回红球,取出蓝球;如果取出的2球的颜色是一样的,则都不放回,将2球都取出;不断重复以上步骤。问题:求最后一次取球恰好只取到一个红球的概率。


算法题:给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。


一个三角形, 三个端点上有三只蚂蚁,蚂蚁可以绕任意边走,问蚂蚁不相撞的概率是多少?
乍一看有点蒙...
其实很简单...
1.每个蚂蚁在方向的选择上有且只有2种可能,共有3只蚂蚁,所以共有2的3次方种可能
2.不相撞有有2种可能,即全为顺时针方向或全为逆时针方向。
不相撞概率=不相撞/全部=2/8


史密斯夫妇握手问题
题目:


史密斯夫妇邀请另外四对夫妇就餐,已知他们每个人都不和自己握手、不和自己的配偶握手、且不和同一个人握手一次以¬上。在大家见面握手寒暄后,史密斯问大家握手了几次,每个人的答案都不一样。问:史密斯太太握手几次
解答:
1. 总共10个人,每个人不与自己握手,不与配偶握手,不与同一个人握超过一次手,所以每个人最多握8次手,最少0次; 
2. Mr.Smith问其它9个人握了几次手,各人回答不一样,所以每个人的握手次数刚好为0-8次,每种不同次数有1个人; 
3. 有且只有一个人握了8次手,称之为A,即A与其配偶以外的所有人都握了手; 
4. 记A的配偶为a,除了A夫妇以外,所有人都至少握了1次手(和A),所以握手0次的肯定是a; 
5. 从10个人中去掉A夫妇,因为A与其余每个人握了1次手,而a没有与别人握手,所以去掉A夫妇后,其它人的握手次数为1-7(不算Mr.Smith),再去掉他¬们各自与A握的那次手不算,则各人的握手次数为0-6,还是每种不同次数刚好有1个人; 
6. 重复第3-5步4次,直到去掉4对夫妇,最终剩下Mr.&Mrs.Smith,这时Mrs.Smith的握手次数为0,加上4次循环中去掉的4次握手,她总共握¬了4次手,与每对夫妇中的某一位各握了一次。


一对夫妇,邀请N-1对夫妇参加晚会。夫妇之间,丈夫肯定认识妻子。每个人和自己不认识的人都要握手一次。握手完了之后,男主人站出来问了其他所有人的握手情况。发现,任何一个人的握手情况都和别人不相同。问你,女主人握了几次手(答案是N-1次)
A城一个商人有一头驴子和3000根胡萝卜.要将萝卜拉到1000公里外的B城去卖,只能用驴子驮。已知驴子一次性可驮1000根胡萝卜,但每走一公里要吃掉一根胡萝卜.问商人共可卖出多少胡萝卜?


这题的问题出在给的条件不充分,可能有两种情况,一种是非理想状态的拉运萝卜,这种情况的话,一个也不能卖出去;第二种为理想状态下的,就是能在每走一公里的时候能够卸货下来,并且还没有其他的外在因素使得萝卜丢失,这样的理想状态下能够运送到B城833个萝卜。计算过程如下:1、因为有3000萝卜,所以消耗掉前面的1000个萝卜的时候,每前进一公里要来回3次消耗3个萝卜,因此第一次前进了X公里,X=1000/3=333余数为1;2、剩下的2001个萝卜在第334公里的时候需要来回3次才能运送完,我们就将这一公里路算在2000个萝卜在第一次运送的时候算在一起,那么第二次运送萝卜只需要来回2次消耗2个萝卜,因此第二次消耗1000个萝卜前进了Y公里,Y=1000/2=500;现在前进了500+333=833公里,剩下167公里后,萝卜也只剩下了1000个,所以就这1000个直接中途不卸货的一次到达B城,消耗167个萝卜,所以最后剩下1000-167=833个萝卜。
八皇后问题
算法介绍八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当 n = 1 或 n ≥ 4 时问题有解。


甲乙两个人答对一道题的概率分别为90%和80%,对于一道判断题,他们都选择了“正确”,问这道题正确的概率。请问这题怎么做,谢谢
有人有以下解法,以下是否正确?
题目为真且甲乙都选则正确的概率 / 甲乙都选择正确的概率
题目为真且甲乙都选真/(题目真甲乙都选真+题目假甲乙都选真)
(0.5*0.9*0.8)/{(0.5*0.9*0.8+0.5*0.1*0.2)}
=72/74
飞机上有100个座位,按顺序从1到100编号。有100个乘客,他们分别拿到了从1号到100号的座位,他们按号码顺序登机并应当对号入座,如果他们发现对应号座位被别人坐了,他会在剩下空的座位随便挑一个坐。现在假如1号乘客疯了 -_-! (其他人没疯),他会在100个座位中随机坐一个座位。那么第100人正确坐自己座位的概率是多少?
注意登机是从1到100按顺序的。
解答:
可以看到,因为除了1号之外,所有的乘客都会对号入座,所以将对号入座的都去除,最后剩下1号,x号和100号。x号为1号所占位置。
1号还有可能占的是自己的位置或者100号的位置,此时就没有x什么事情,x还是坐x号位置。但是这个情况在上面也是涵盖的。
所以最终对1,x,100进行全排列,得到
1     x   100
100   x   1
x     1   100
100   1   x
1    100  x
x    100  1
但是,对于最后两个组合,如果1号坐了自己的位置,那么x肯定坐自己的位置,100也肯定坐自己的位置。所以1  100  x不会发生。
1号如果坐100号的位置,那x肯定坐自己的位置,100坐1号的位置,所以x  100  1也不会发生。
所以最后的概率为2/4=50%


两个信封,一封里装的钱是另一封里的两倍,你选了一个打开一看,里面是十块钱,这个时候你可以选择换成另一个,问你该不该换?
第一印象肯定是换不换无所谓,因为貌似二者不相关。
但是随后又会想到,另一个信封有一半可能是五块,一半可能是二十块,期望值会是1/2(5+20) = 12.5,当然应该换。
更加学术一点,定义A事件为:手里的信封装的是大数,B事件为:信封里装的是十块
那么这是个条件概率问题,也就是问P(A|B)比P(A)大还是小。
根据贝叶斯公式:P(A|B) = P(A)*P(B|A)/P(B),这个问题等同于问P(B|A)/P(B)的比值,大于1的话意味着:当已知信封里装的是十块时,信封里装的是大数的概率大于手里的信封装的是大数的概率本身。这种情况下手里拿着大数的可能性大,就不该换。
这个问题很显然取决于分布,光说一个数是另一个数的两倍并没有定义一个分布。但是我们可以认为钱数只能取有限的离散的一些数,如果同意钱数不可能无限分割也不可能无限多,那么这是一个合理的假设。假设可能的钱数为{1,2,3,。。。10,12,14,16,18,20} 那么P(A) = 1/15,因为一共有15个数,取到每个数的概率一样。而P(B|A)也就是已知手里的信封
题目:已知一随机发生器A,产生0的概率是p,产生1的概率是1-p,现在要你构造一个发生器B, 使得它构造0和1的概率均为1/2。
 
初看确实有点头晕,也没什么思路。但是仔细想想为什么生成0和1的概率均为1/2,我们可以看成是生成0和1的概率是均等的。这样想之后,似乎就没那么不好理解了。
原始的随机数生成器,生成0 的概率为p,生成1的概率为1-p,那么怎么构造才能使得生成0和1的概率相等呢。或者说有两个独立的事件的概率是相等呢?
这样来做一下,让该随机数生成器生成两个数,那么序列是00,01,10,11概率分别为 p*p,p(1-p),(1-p)p,(1-p)*(1-p)
很明显,这四种情况中存在两个独立的事件概率是相等。也就是01和10,那么我把01看成是0,10看成是1,那么他们输出的概率均为p(1-p),其他的情况舍弃。这样就得到了0和1均等生成的随机器了。
上述思想的伪代码实现如下:
F(X):
P(F(X)=1)=1-P;
P(F(X)=0)=P;
G(X):
P(G(X)=0)=P(F(X)>0)=1-P;   //G(x)以概率 1-p 生成0
P(G(X)=1)=P(F(X)<=0)=P;
P(G(X)=0&& F(X)=0)=(1-P) * P;
P(G(X)=1&& F(X)=1)=P * (1-P);
P(G(X)=1&& F(X)=0)=P* P;
P(G(X)=0&& F(X)=1)=(1-P) * (1-P);
Z(X)
{
    X=G(X)+F(X);       
    IF(X==0)          //X为0的概率为G(X)生成0的概率乘以F(X)生成0的概率,即为(1-p)*p
        RETURN 0;
    ELSE IF(X==2)
        RETURN 1;
    ELSE
        RETURN Z(X);
}
 
题目再变形一下,如果有该随机发生器A,输入一个指定的N,如何以以1/N的概率随机产生1-N?
 
借助于上面生成0、1的思想,有如下生成代码:
 
Y(X)
{
    int k=log2(N)+1;               //bit位数,即k位二进制位就足够表示N个数
    int res=0;
    for(int i=0;i<k;++i)            //对于每一位二进制位
        IF(Z(X)==1)                 //调用上面的随机发生器B,以同等概率生成0与1
            res = res | 1<<i;      //将res对于的第 i 位置为1
    IF(res>N)                        //如果生成的数超过N,则再随一次。比如N为10,则k为4,res在此可能为11、12、13、14、15其中的一个!
        RETURN Y(X);
    else                               
        RETURN res;
}


已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。
利用的方法和上个问题类似,如何能够得到一个等概率的独立事件。这个问题和上个问题不同的是,这里产生的序列,要变成和的形式或者其他的形式,那么概率就会发生变化了。
如果能够得到一组等概率的数,不管是什么数,只要等概率而且个数大于10,那么问题就可以解决了。
发现 (rand7() - 1) * 7 + rand7(),可以等概率的生成1到49。
呵呵,这不就得了,只要把11-49砍掉就可以了。不过这样的效率比较低。可以砍掉41-49,然后在把1-40映射到1-10,那么问题也就解决了。
1。如何随机选取1000个关键字
给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字)。如何才能从这个无穷尽的流中随机的选取1000个关键字?
1。给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
 
答案:此题的关键是让生成的 1 到 7 的数出现概率相同。
(用7下随机生成的1到5的数去决定下一个1到7的数)


只要我们可以从 n 个数中随机选出 1 到 n 个数,反复进行这种运算,直到剩下最后一个数即可。
我们可以调用 n 次给定函数,生成 n 个 1 到 5 之间的随机数,选取最大数所在位置即可满足以上要求。


例如
初始的 7 个数 [1,2,3,4,5,6,7].
7 个 1 到 5 的随机数 [5, 3,1,4,2,5,5]
那么我们保留下[1,6,7],
3 个1 到 5 的随机数[2,4,1]
那么我们保留下[6]
6 就是我们这次生成的随机数。


比如:一个口袋内有10个红球,20个蓝球,30个绿球,随机地把球一个一个取出来,请
问红球最先被取完的概率?
概率空间是60!个排列。任意一个排列,若其最后一个红球之后还有蓝球和绿球,则属
于“红球先被取完”这个事件. 为简单,算“红球不是先被取完”,那么尾巴只有两种情
况:
1,最后一个红球之后全蓝
2,最后一个红球之后全绿
这两种情况是独立的,第一种情况的数量是:
 P(10,1)*59! //最后一个是红球
+P(20,1)*P(10,1)*58! //最后是 红蓝
+P(20,2)*P(10,1)*57! //最后是 红蓝蓝
+...
+P(20,20)*P(10,1)*39! //最后是 红+(所有蓝球)
概率是 10*ΣC(20,k)k!(59-k)!/60! = 1/4


同样的第二种情况概率是 1/3


另外最有一个是红球的情况在上面重复计算了,概率是 10*59!/60! = 1/6.


结果就是 1-1/3-1/4+1/6=7/12


其中 10*ΣC(20,k)k!(59-k)!/60! 的计算过程:
 10*ΣC(20,k)k!(59-k)!/60!
=10*Σ20!/(20-k)!(59-k)!/60!
=10*20!/60!*Σ(59-k)!/(20-k)!
=10*20!/60!*Σ(39-k)!/k!
=10*20!/P(60,21)*Σ(39-k)!/(k!39!)
=10*20!/P(60,21)*C(60,40)
=10/40=1/4
定义几个事件:
Lr表示最后一个球是红球,概率为1/6
Lb表示最后一个球是篮球,概率为1/3
Lg表示最后一个球是绿球,概率为1/2
然后Lrb表示最后一个红球比最后篮球先取出,概率为2/3,
      同样P(Lbr)=1/3
            P(Lrg)=3/4
            P(Lgr)=1/4
            Lbg=3/5
            Lgb=2/5
Fr表示红球最先取出,它的概率
P(Fr) = P(Lb)*P(Lrg|Lb) + P(Lg)*P(Lrb|Lg) = 1/3 * 3/4 + 1/2*2/3 = 1/4 + 1/3 = 7/12
中间有些道理省略了,大家凑合看吧。


三人陪审团,其中两人每人做出正确决定的概率是P。另一人总是靠扔硬币来决定支持谁。最后由多数票决定结果。另一个审判由一人决定,这个人做出正确决定的概率也是P。问三人陪审团与一人审判谁有更大概率做出正确决定?
一样大,概率都是p
因为三人陪审团的话,正确的概率是
p*(1-p)*0.5+p*(1-p)*0.5+p*p*0.5+p*p*0.5=p


你有一把宝剑。每使用一个宝石,有50%的概率会成功让宝剑升一级,50%的概率会失败。如果宝剑的级数大于等于5的话,那么失败会使得宝剑降1级。如果宝剑的级数小于5的话,失败没有效果。问题是:期望用多少个宝石可以让一把1级的宝剑升到9级?


一个概率题:54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少?


转载;http://blog.csdn.net/rudyalwayhere/article/details/7349957

当前面试中各大名企经常出现各种各样的概率类面试题。究其原因,我觉得是概率型面试题可以综合考查面试者的思维能力、应变能力、数学能力。在这里对各种类型的概率型题目进行了收集和总结,希望在自我总结的同时对大家有所帮助。


1、给你一个数组,设计一个既高效又公平的方法随机打乱这个数组(此题和洗牌算法的思想一致)

方法比较简单,基本思想是每次随机取一个数,然后把它交换到最后的位置。然后对前(n-1)个数使用递归的算法

递归实现:

[cpp]  view plain  copy
  1. void suffle_dfs(int ar[], int n)  
  2. {  
  3.     if(n<=1)return;  
  4.     swap(ar[n-1], ar[rand()%n]);  
  5.     shuffle_dfs(ar,n-1);  
  6. }  
非递归实现:
[html]  view plain  copy
  1. void suffle(int ar[], int n)  
  2. {  
  3.     while(n>1){  
  4.         swap(ar[n-1], ar[rand()%n]);  
  5.         n--;  
  6.     }  
  7. }  

注:此处假设rand()的返回结果远远大于n。

2、有一苹果,两个人抛硬币来决定谁吃这个苹果,先抛到正面者吃。问先抛这吃到苹果的概率是多少?

这种题目一看似乎答案就是1/2,但其实认真细想并没有那么简单。

给所有的抛硬币操作从1开始编号,显然先手者只可能在奇数(1,3,5,7…)次抛硬币得到苹果,而后手只可能在偶数次(2,4,6,8…)抛硬币得到苹果。设先手者得到苹果的概率为p,第1次抛硬币得到苹果的概率为1/2,在第3次(3,5,7…)以后得到苹果的概率为p/4(这是因为这种只有在第1次和第2次抛硬币都没有抛到正面(概率为1/4=1/2*1/2)的时候才有可能发生,而且此时先手者在此面临和开始相同的局面)。所以可以列出等式p=1/2+p/4,p=2/3。

现在答案已经很明确了,所以大家平时要注意不要这样被人骗了,当然也不能去骗别人,哈哈~

3、一条长度为l的线段,随机在其上选2个点,将线段分为3段,问这3个子段能组成一个三角形的概率是多少?设随机选取的两个数为x,y,并令y>x,则把长度为1的线段截得的三段长度为x, y-x ,1-y,根据三角形两边和大于第三边以及两边之差小于第三边的定理,可以列出方程组
y>1-y; x<1-x; x+(1-y)>y-x;
即x<1/2; y>1/2; y>x+1/2;
画图可以算得概率为1/8;(线性规划的思想)



4、一个面试题:快速生成10亿个不重复的18位随机数的算法(从n个数中生成m个不重复的随机数)

//假设从-n这n个数中生成m个不重复的数,且n小于int的表示范围

//总体思想是一开始每个数被选中的概率是m/n,于是随机一个数模n如果余数小于m则输出该数,同时m减

//否则继续扫描,以后的每个数被选中的概率都是m/(n-i)

[cpp]  view plain  copy
  1. void random_generate(int n, int m)  
  2. {  
  3.     int i=1,t,remain;  
  4.     while(n-i>m)  
  5.     {  
  6.         t = rand()%(n-i);  
  7.         if(t<m){  
  8.             printf("%d ",i);  
  9.             m--;  
  10.         }  
  11.         i++;  
  12.     }  
  13.     while(++i<=n)printf("%d ",i);  
  14. }  

(wiki关于随机数的介绍http://en.wikipedia.org/wiki/Mersenne_twister)

5你有两个罐子以及50个红色弹球和50个蓝色弹球,随机选出一个罐子然后从里面随机选出一个弹球,怎么给出红色弹球最大的选中机会?在你的计划里,得到红球的几率是多少题目意思是两个罐子里面放了50红色和50蓝色弹球,然后我任选一个罐子,从中选中一个红球的最大概率,是设计一个两个罐子里怎么放这100球的计划。一个罐子:1个红球另一个罐子:49个红球,50个篮球几率=1/2+(49/99)*(1/2)=74.7%

6、一副扑克牌54张,现分成3等份每份18张,问大小王出现在同一份中的概率是多少?(大意如此)

解答1:

54张牌分成3等份,共有M=(C54取18)*(C36取18)*(C18取18)种分法。

其中大小王在同一份的分法有N=(C3取1)*(C52取16)*(C36取18)*(C18取18)种。

因此所求概率为P=N /M=17/53。

解答2:

不妨记三份为A、B、C份。大小王之一肯定在某一份中,不妨假定在A份中,概率为1/3。然后A份只有17张牌中可能含有另一张王,而B份、C份则各有18张牌可能含有另一张王,因此A份中含有另一张王的概率是17/(17+18+18)=17/53。

也因此可知,A份中同时含有大小王的概率为1/3 * 17/53。

题目问的是出现在同一份中的概率,因此所求概率为3*(1/3 * 17/53)=17/53。

7、A和B2人投硬币,正面A得1元,反面B得一元.起始时A有1元,B有100元.
游戏持续进行,直到其中1人破产才终止.

问:

1.如果硬币正反概率相同,游戏的期待长度(expected duration)是几次投掷?

2.如果硬币是不公正的,正面概率为P,反面概率为Q.(P+Q=1), 那么游戏的期待长度(expectedduration)是几次投掷?

答案还没整理

8完美2011.10.16笔试题:2D平面上有一个三角形ABC,如何从这个三角形内部随机取一个点,且使得在三角形内部任何点被选取的概率相同。

在二维坐标系中可以用坐标(x,y)来表示图形中的一个点。如下图只要能够在各个带双向箭头的图之间的点能够建立一一映射即可。如把一个长方形(如正方形)的点映射到另一个长方形的点只要把坐标做相应的放大缩小即可。如把长方形的点映射到一个直角三角形,只要将长方形右上部份的三角形的点映射到对称的左下角的三角形的点即可。而直角三角形映射到一边平行于x轴的三角形的映射只要做x轴相应的偏移即可。而任意三角形可以分割成两个其中有一边平行于x轴的三角形。说的不是很清楚,具体的映射方法可以认真思考并写出公式。


9、平均要取多少个(0,1)中的随机数才能让和超过1。答案: e 次, 其中e是自然对数的底


10、编程之美:金刚坐飞机问题

大家都在排队上飞机,然后金刚来了,他也有票,但是插队第一个上了飞机,随便找了个座位坐下了,其余人的策略是:

如果自己票上写的座位没被占就按照座位坐,被占了就变身成金刚,随便找地儿坐。问第i个人坐在自己座位的概率是多少?

1..n一共n个座位,为了方便计算起见,我们做一个变换

变换1:金刚的票上的座位是最后一个,也就是第n个,其余人的票和座位再按照原先的顺序排列成1..n-1。

这样并不影响最终的概率,因为如果

1)金刚坐在自己的位置上,那么大家同样都是肯定坐在自己的位置上。

2)如果金刚坐在第i个位置(非他票上的座位)上,那么前i-1个人会坐在自己的位置上,与变换前相同,而第i个人肯定不会坐在自己的位置上,他会在变换前的金刚的座位再加上i+1..n的集合中随机挑一个座位,这也有变换前相同,他挑的座位对于后面人的影响也是与变换前相同的。

设F(i,n)为新的n个座位的排列中第i个人坐到自己位置上的概率,那么旧排列中第i个人坐到自己位置的概率就是

F(i,n) i<j;

F(i-1,n) i>j;

j为金刚票上的座位

那么我们现在来计算F(i,n),后面的讨论全部基于变换后的排列。

对于乘客i,金刚的选择会造成3种情况,假设金刚选择的是j,分别为i<j,i=j,i>j,概率分别为(n-i)/n,1/n,(i-1)/n。

如果i<j,即金刚选择的座位在i的后面(我们做变换1的目的就在于此,如果不做那么还要考虑金刚坐到自己的位置的情况,而他自己的位置却是不确定的),那么乘客i必然会坐到自己的位置,概率为1,(n-i)/n*1

如果i=j,概率为0

如果i>j,那么前j-1个人肯定坐在自己的位置上,而第j个人就变身成了金刚,这样可以看做他就是金刚,他原来的座位就是n。

变换2:前j-1个人是打酱油的,跟后面的事件无关了,因为金刚在j上,所以第j个人变成了金刚2,他的票号是最后一个,j+1..n-1号乘客成了新的受害者,将j+1..n-1从1开始重新编号,座位数变成n-j

故第i个人坐在原来座位的概率为F(i-j,n-j)

所以概率为

综上

最后的结果是

F(i,n) i<j;

F(i-1,n) i>j;

j为金刚票上的座位


转载:http://blog.csdn.NET/beiyeqingteng

该问题包含两个子问题:

子问题1:给你一个骰子,你扔到几,机器将会给你相应的金钱。比如,你扔到6,机器会返回你6块钱,你扔到1,机器会返回你1块钱。请问,你愿意最多花多少钱玩一次?

子问题2:在子问题1里,你只能扔一次,现在呢,可以给你两次机会,但是你自己也可以选择只扔一次。但返回的钱以最后一次为准。比如,第一次你扔了6,你把第二次机会就放弃了,这样机器会返给你6块钱。但是,假设你第一次扔了3,你如果对这一次不满意,打算再扔一次,如果你第二次扔到了2,那么你最后只能得到2块钱,如果第二次扔到5,你最后会得到5块钱。请问,在这种条件下,你愿意最多花多少钱玩一次?

分析:

对于子问题1,非常简单,本质上是求数学期望。因为骰子每一面被扔到的概率是一样的,即 1/6. 所以,最后期望值是 1 * 1/6 + 2 * 1/6 + ... + 6 * 1/6 = 3.5. 也就是说,假设你玩无穷次,平均下来,机器会返回给你的钱是 3.5. 所以,如果你头脑清醒的话,你应该不会花超过3.5去玩一次。

对于子问题2,解答起来是有困难的。因为这题里面有一个选择的问题:你可以只扔一次,或者选择扔两次。所以不容易去获得每个值的概率(因为我们不知道到底扔不扔第二次)。但是,如果有了子问题1的答案,其实对于决定是否扔第二次还是有根据的,原因如下:

如果你第一次扔到了1,或者2,或者3,你一定会扔第二次。为什么(问题的关键)?因为我们在扔第二次的时候,它的期望收益是 3.5。同理,如果你第一次扔到了4,5,6,你不会选择扔第二次,因为你知道下一次的期望收益是 3.5,比你目前的收益会小。有了这样的分析,问题就可以迎刃而解了。

解答:

因为骰子总共6面。第一次扔到4, 5, 6 其中之一的概率是 1/2, 那么选择扔第二次的概率也是1/2。在第一次扔到4,5,6其中之一这个事件里,平均收益是4* 1/3 + 5 * 1/3 + 6* 1/3 = 5. 在第二次扔的时候,平均收益是 3.5(子问题1的答案)。所以最后总的收益是 5 * 1/2 + 3.5 * 1/2 = 4.25。 


在笔记题中概率相关的数学题,也有部分编程题,出现的还是挺多的。概率在生活中的应用较多,同时也可以综合考查面试者的思维能力、应变能力、数学能力。在这里整理了一些概率相关的笔试题和大家分享,此文不涉及编程题,都是一些和生活相关且很有趣的概率题。所有的分析都和背景颜色设置一样了,大家先思考,然后选中就可以看到分析了。

题目1

假设你参加了一个游戏节目,现在要从三个密封的箱子中选择一个。其中两个箱子是空的,另一个箱子里面有大奖(你偶像的签名^^)。你并不知道奖在哪一个箱子里,但主持人知道。游戏节目的主持人先要你选择一个箱子,接着他把你没有选的空箱子打开,以证明它是空的。最后主持人给你换箱子的机会,你可以把你所选择的箱子换成另一个没有打开的箱子。此时你该不该换箱子?

分析:

要相信直觉。你当然应该换箱子!我们把三个箱子编号A,B,C,并假设你选的是A箱。显然奖品在A里的概率是1/3,在B或C里的概率是2/3。B和C可能有一个是空的,也可能两个都是空的。因此,当你选择了A箱后,主持人很可能会打开B箱或C箱,以显示里面是空的。在这种情况下,主持人的举动并不会影响奖品在A箱里面的机会。我们假设主持人打开了B箱,以告诉你它是空的。现在A箱有奖品的概率还是1/3,B箱里面有奖品的概率是0,因此C箱里面有奖品的概率是2/3。在这种情况下,你应该换到C箱,因为它使你赢的机会提高了1倍!

题目2

有一苹果,两个人抛硬币来决定谁吃这个苹果,先抛到正面者吃。问先抛者吃到苹果的概率是多少?

分析:

我首先想到的就是把 第一次抛到正面的概率 + 第二次抛到的概率 + …..+无穷多次,当然后面的概率几乎为0了。    结果就是  P = 1/2 + 1/8 + 1/32+ ……  最后的结果就是 P = 2/3 . 这个计算也不难,其实就是等比数列,比为1/4.  简单的无穷级数 (1/2) / (1-1/4) = 2/3.    1/(1-x)^2=1+2x+3x^2+4x^3+5x^4+… (-1<x<1)

还有一个别人的分析:给所有的抛硬币操作从1开始编号,显然先手者只可能在奇数(1,3,5,7…)次抛硬币得到苹果,而后手只可能在偶数次(2,4,6,8…)抛硬币得到苹果。设先手者得到苹果的概率为p,第1次抛硬币得到苹果的概率为1/2,在第3次(3,5,7…)以后得到苹果的概率为p/4(这是因为这种只有在第1次和第2次抛硬币都没有抛到正面(概率为1/4=1/2*1/2)的时候才有可能发生,而且此时先手者在此面临和开始相同的局面)。所以可以列出等式p=1/2+p/4,p=2/3。

题目3

条长度为l的线段,随机在其上选2个点,将线段分为3段,问这3个子段能组成一个三角形的概率是多少?

分析:

设随机选取的两个数为x,y,并令y>x,则把长度为1的线段截得的三段长度为x, y-x ,1-y,根据三角形两边和大于第三边以及两边之差小于第三边的定理,可以列出方程组
y>1-y; x<1-x; x+(1-y)>y-x;
即x<1/2; y>1/2; y>x+1/2;
画图可以算得概率为1/8;(线性规划的思想)

gg

题目4

世界上每十万人中就有一人是艾滋病患者。艾滋病的检测目前已经很准确,但并非万无一失。它的检测准确率是99%,假设你刚去做完艾滋病检验,得到的了检测报告,结果….是阳性!你会绝望或昏倒吗?或者说,你会担心到什么程度?

分析:

你大可不必那么担心,因为你几乎可以确定没有得艾滋病。什么?检测是阳性还几乎可以确定没有艾滋病?!是的,为了说明这一点,假设有100万人和你做了同样的检验。在这100万人中,得病的会有10个,没有得病的有999990个。当这些人接受检验时,9~10个人患有艾滋病的人会呈现阳性反应,另外999990个没有得病的人则会有1%出现错误的阳性反应,换算成人数大概是1万人。也就是说,大约10000个阳性诊断中,实际只有10个左右是真正患者。因此,绝大多数所呈阳性的反应都是误诊。当你得到阳性的检测结果时,真正得艾滋病的机会大概只有千分之一。(当然,如果你在检测之前做了很可能感染艾滋病的事,那就另当别论了)

题目5

有一对夫妇,先后生了两个孩子,其中一个孩子是女孩,问另一个孩子是男孩的概率是多大?

答案是2/3.两个孩子的性别有以下四种可能:(男男)(男女)(女男)(女女),其中一个是女孩,就排除了(男男),还剩三种情况。其中另一个是男孩的占了两种,2/3. 之所以答案不是1/2是因为女孩到底是第一个生的还是第二个生的是不确定的。

题目6

一个国家人们只想要男孩,每个家庭都会一直要孩子,只到他们得到一个男孩。如果生的是女孩,他们就会再生一个。如果生了男孩,就不再生了。那么,这个国家里男女比例如何?

分析:

一开始想当然的以为男多女少,毕竟都想要男孩。但是注意这句话“如果生了男孩,就不再生了”,一个家庭可能有多个女孩,只有一个男孩。再仔细分析,我们来计算期望值,只用计算一个家庭就行了。设一个家庭男孩个数的期望值为S1,女孩为S2. 

根据题目条件,男孩的个数期望值S1=1这个是不用计算了。主要计算S2

一个家庭的孩子数量可以为:1,2,3,4,5…..  对应的的男女分布为: “男”,”女男”,”女女男”,”女女女男”,”女女女女男”…  

对应的概率分布为 1/2, 1/4, 1/8, 1/16, 1/32 。其中女孩的个数分别为 0,1,2,3,4……

因此 S2=0*1/2 + 1*1/4 + 2*1/8 + 3*1/16 + 4*1/32 + ………

可以按照题目2用级数求,也可以用错位相减法:S2=1/4+2/8+3/16+4/32+…  两边乘以2,得: 2*S2=1/2+2/4+3/8+4/16+5/32+..

两个式子相减得 S2=1/2+1/4+1/8+1/16+1/32+…=1. 所以期望值都为1,男女比例是一样的。

转载:http://blog.csdn.net/cmonkey_cfj/article/details/45581325

第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),总概率是  19  * (1/10) 
若最后一个人在9分钟到达(概率1/10),其他人到达的概率是 (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张牌,平均分成三堆,大小王在同一堆的概率?

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

第7题

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

答: 
设要买x瓶。 
x+x/3>=100  
对么?小心!x/3瓶如果满3瓶还可以再换的,想象某人堵在小卖部门口狂开瓶。因此应该是 
x+x/3+x/9+...+x/3n>=100  
n=log3x  
x(11/3n)/(11/3)>=100  
x(11/x)>=200/3  
x=68  
不过我返回去算了下, 发现 x=68 只能买99瓶…毕竟算的时候当 x 是实数了,因此还是再返回来推一下的靠谱, x=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分钟内看到车的概率为 p . 那么30分钟都没看到车的概率是 (1p)3=10.95=0.05  
所以 p=10.051/3

第10题

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

答: 
题目描述有些微妙,这里姑且这么理解,你找到一个相同生日的就得1美元,找到两个2美元,依次类推。他找到一个和你生日不同的得2美元,找到多少人都是2美元。 
假设一年365天,大家都是同一年出生(同龄人嘛)。他拿到钱的期望是 2(1(1/365)10) . 你拿到1美元的概率是  C1101/365(364/365)9 , 2美元的概率是  C210(1/365)2(364/365)7 …这是二项分布嘛,期望是 np=101/365=10/365 . 看过来对方那个数更大,所以不能赌。

百度的一个面试题目:

.已知一随机发生器,产生0的概率是p,产生1的概率是1-p,现在要你构造一个发生器, 
使得它构造0和1的概率均为1/2;构造一个发生器,使得它构造1、2、3的概率均为1/3;…, 
构造一个发生器,使得它构造1、2、3、…n的概率均为1/n,要求复杂度最低。

初看确实有点头晕,也没什么思路。但是仔细想想为什么生成0和1的概率均为1/2,我们可以看成是生成0和1的概率是均等的。这样想之后,似乎就没那么不好理解了。

原始的随机数生成器,生成0 的概率为p,生成1的概率为1-p,那么怎么构造才能使得生成0和1的概率相等呢。或者说有两个独立的事件的概率是相等呢?

这样来做一下,让该随机数生成器生成两个数,那么序列是00,01,10,11概率分别为 p*p,p(1-p),(1-p)p,(1-p)*(1-p)

很明显,这四种情况中存在两个独立的事件概率是相等。也就是01和10,那么我把01看成是0,10看成是1,那么他们输出的概率均为p(1-p),其他的情况舍弃。这样就得到了0和1均等生成的随机器了。

思维在扩展一下,生成1,2,…n的概率分别是1/n,也就是均等的。那么我们可以想怎么生成一个序列,里面有n个独立时间,概率是相等。而且我们能够猜测到这些概率的形式为 p^x*(1-p)^y,如果要相等,那么x必须等于y.这样就说明了序列中0和1的个数是相等的。而且这样的情况必须有多与n个才行。

数学表示就是 C(2x,x) >=n ,我们只需要知道x就能够知道序列要多长了。而且中间必定有超过n个概率为{p(1-p)}^x不相等序列。

问题就可以解决了。

其实卡我的问题是,丢掉那些多余的,只要n个等概率的序列,是否真的是等概率的(最终输出)。

腾讯面试题:

已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。

利用的方法和上个问题类似,如何能够得到一个等概率的独立事件。这个问题和上个问题不同的是,这里产生的序列,要变成和的形式或者其他的形式,那么概率就会发生变化了。

如果能够得到一组等概率的数,不管是什么数,只要等概率而且个数大于10,那么问题就可以解决了。

发现(rand7()-1)*7+rand7(),可以等概率的生成1到49。

呵呵,这不就得了,只要把11-49砍掉就可以了。不过这样的效率比较低。可以砍掉41-49,然后在把1-40映射到1-10,那么问题也就解决了。

腾讯面试题:

等概率采样数据流中的数字。

比如从数据流中等概率的采样k个数字。

怎么做呢?先拿到最开始的k个数字,然后以后的每个数字等概率的和这k个数字交换。那么就可以达到每个数字被抽取的概率是等概率的。

怎么证明呢?

采用归纳方法,假设前n个数字等概率的采样k个数字,那么每个数字被采样的概率为k/n,现在新来一个数字,变成了n+1个数字,那么每个数字被采样的概率变位k/(n+1),我们要证明这个

这个问题在计算机程序设计艺术书中提到,叫Reservoir Sampling(蓄水池采样),属于随机算法的一种。

现在假定存在了n个数字,来了第n+1个数字,那么第n+1个数字被选择的概率是k/(n+1),那么我们推算其他的数字被选择的概率也是k/(n+1)

P(其余数字) = p(其余数字|第n+1个选择)*p(第n+1个选择) + p(其余数字|第n+1个不选择)*p(第n+1个不选择)

                      =  k/n*(1-1/k)*k/(n+1) + k/n*(n+1-k)/(n+1)

                      = k*(k-1) / (n *(n+1) ) + k*(n+1-k) / (n*(n+1))

                      = k*n/(n *(n+1))

                      = k/(n+1)

得证。其余数字被选择的概率依然也是 k/(n+1)

面试题 抛骰子8次 和为多少的概率最大

一道笔试题,抛骰子8次,和为多少最大,对于笔试题可以这样考虑,两个骰子和为 7的概率最大,8次的话最大为28.

下面编程给出说明,result[i][j] 代表抛i次时,和为j 的次数。对于第i+1 次可使用前面的结果来计算,如计算 result[i+1][48] 可以 把result[i][48-1], result[i][48-2],result[i][48-3],result[i][48-4],result[i][48-5],result[i][48-6] 的值加起来,这样的话就可以自底向上的推出任意次抛骰子的和的结果。

算法如下:

 

Java代码   收藏代码
  1. public static void rollDice(int cnt){  
  2.         int result[][] = new int[cnt+1][cnt*6+1];  
  3.         result[1][1]=1;  
  4.         result[1][2]=1;  
  5.         result[1][3]=1;  
  6.         result[1][4]=1;  
  7.         result[1][5]=1;  
  8.         result[1][6]=1;  
  9.         for(int i=2; i <= cnt;i++){  
  10.           for(int j=i;j<=i*6;j++){  
  11.               for(int k=1;k<=6;k++){  
  12.                   if(k<j){  
  13.                       result[i][j] +=result[i-1][j-k];  
  14.                   }  
  15.               }  
  16.           }   
  17.         }  
  18.         for(int i=cnt;i<=cnt*6;i++){  
  19.             System.out.println("sum "+i+"\tcnt: "+result[cnt][i]);  
  20.         }  
  21.           
  22.     }  
  23.       
  24.     public static void main(String[] args) {  
  25.         rollDice(8);  
  26.     }  
  27.   
  28. //result  
  29. sum 8   cnt: 1  
  30. sum 9   cnt: 8  
  31. sum 10  cnt: 36  
  32. sum 11  cnt: 120  
  33. sum 12  cnt: 330  
  34. sum 13  cnt: 792  
  35. sum 14  cnt: 1708  
  36. sum 15  cnt: 3368  
  37. sum 16  cnt: 6147  
  38. sum 17  cnt: 10480  
  39. sum 18  cnt: 16808  
  40. sum 19  cnt: 25488  
  41. sum 20  cnt: 36688  
  42. sum 21  cnt: 50288  
  43. sum 22  cnt: 65808  
  44. sum 23  cnt: 82384  
  45. sum 24  cnt: 98813  
  46. sum 25  cnt: 113688  
  47. sum 26  cnt: 125588  
  48. sum 27  cnt: 133288  
  49. sum 28  cnt: 135954  
  50. sum 29  cnt: 133288  
  51. sum 30  cnt: 125588  
  52. sum 31  cnt: 113688  
  53. sum 32  cnt: 98813  
  54. sum 33  cnt: 82384  
  55. sum 34  cnt: 65808  
  56. sum 35  cnt: 50288  
  57. sum 36  cnt: 36688  
  58. sum 37  cnt: 25488  
  59. sum 38  cnt: 16808  
  60. sum 39  cnt: 10480  
  61. sum 40  cnt: 6147  
  62. sum 41  cnt: 3368  
  63. sum 42  cnt: 1708  
  64. sum 43  cnt: 792  
  65. sum 44  cnt: 330  
  66. sum 45  cnt: 120  
  67. sum 46  cnt: 36  
  68. sum 47  cnt: 8  
  69. sum 48  cnt: 1  


一副扑克牌54张,现分成3等份每份18张,问大小王出现在同一份中的概率是多少?(大意如此)

解答1:
54张牌分成3等份,共有M=(C54取18)*(C36取18)*(C18取18)种分法。
其中大小王在同一份的分法有N=(C3取1)*(C52取16)*(C36取18)*(C18取18)种。
因此所求概率为P=N / M=17/53。

解答2:
不妨记三份为A、B、C份。大小王之一肯定在某一份中,不妨假定在A份中,概率为1/3。然后A份只有17张牌中可能含有另一张王,而B份、C份则各有18张牌可能含有另一张王,因此A份中含有另一张王的概率是17/(17+18+18)=17/53。
也因此可知,A份中同时含有大小王的概率为1/3 * 17/53。
题目问的是出现在同一份中的概率,因此所求概率为3*(1/3 * 17/53)=17/53。

一道高盛面试题,概率相关的


已知:
1. 一个幼儿园有4名男童和若干名女童。
2. 往此幼儿园中放入一名儿童(性别未知)。
3. 而后从该幼儿园中随机的接出一名儿童,发现是男童。

问题:
那名在步骤2中放入的儿童是女童的概率有多大?


利用不均匀硬币产生等概率(分享)

问题描述:有一枚不均匀的硬币,已知抛出此硬币后,正面向上的概率为p(0 < p < 1)。请利用这枚硬币产生出概率相等的两个事件。

这个问题跟之前的利用等概率Rand5产生等概率Rand3非常像,但却简单的多。几个月前还为这个事情头疼了一下,现在想来真是不应该。

某一次抛出硬币,正面向上的概率是p,反面向上的概率是1 - p,当p不等于0.5时,这两个事件的概率就不一样了。怎么能凑出等概率呢?还是要利用概率的加法和乘法法则。这里用乘法,也就是连续的独立事件。

连续抛两次硬币,正反面的出现有四种情况,概率依次为:

  1. 两次均为正面:p * p
  2. 第一次正面,第二次反面:p * (1 - p)
  3. 第一次反面,第二次正面:(1 - p) * p
  4. 两次均为反面:(1 - p) * (1 - p)

这不,中间两种情况的概率是完全一样的。于是问题的解法就是连续抛两次硬币,如果两次得到的相同则重新抛两次;否则根据第一次(或第二次)的正面反面情况,就可以得到两个概率相等的事件。

用Python程序模拟一下这个过程,首先是一个叫做UnbalancedCoin的类,用来模拟这枚不均匀的硬币。Flip方法表示抛一次硬币,返回值True代表正面,False代表反面。根据要求,这个函数返回True和False的概率分别是p和1 - p。函数MakeEqualProb利用参数coin(这枚不均匀硬币)构造出两个事件(依旧用True和False表示),并且这两个事件的概率都是0.5。


2017
注意: 请简要写出每道题的解答过程或思路, 否则会扣分!
卷一(满分 85
1.假设有三枚硬币,两枚正常(一面风景,一面人像),一枚不正常(两面都是人像)。将
三枚硬币放入一个黑匣子,随机拿出一枚放在桌上,发现上面是人像。请问下面也是人像的
几率有多少? (
7 分)
2AB两人轮流掷硬币,由A开始,先掷出正面者胜。请问A获胜的概率是多少?(10
分)
3
1)你和我玩一个游戏。你需要付给我x元,然后可以掷一次筛子。掷出的点数就是我需要
付你的钱数。这个游戏中,
x 是多少时,对你我都是公平的? (3分)
2)假设我允许你掷两次筛子。第一次投掷之后,你可以选择是否投掷第二次。如果你选择
不投掷,就取第一次的结果;如果你选择投掷第二次,就必须接受第二次的结果。这个游戏
中,
x 是多少? (10分)
3)假设我允许你掷任意多次,x是多少? (3分)
4. 一段长度为1的线段,随机截成三段,请问这三段能够组成一个三角形的几率有多大?
10 分)
5. 某人向南走100公里,向东走100公里,再向北走100公里,最后回到了出发点。请问
这样的位置在地球上存在吗?唯一吗?具体是哪些位置? (
7分)
6.
1
xy都是[0,1]均匀分布的随机变量,请问x+y大于1的概率是多少? (5分)
2xyz都是[0,1]均匀分布的随机变量,请问x+y+z大于1的概率是多少?(10分)
7.你给我x元参与一个游戏:8张扑克牌,44黑。随机洗牌后开始翻牌。翻到红牌我给
1 元,翻到黑牌你给我1元。你有一个权力:在任意一次翻牌并结算后都可以终止游戏。
x 是多少时,对你我都是公平的?你的最优策略是什么? (20分)
卷二(满分 15
1. 给定一个整数数组A=[a0, a1, …, an-1], 数组中可能存在一个元素满足以下条件: 数组中该
元素的左边所有元素之和与该元素右边所有元素之和相等(如果该元素左边或者右边没有元
素,对应的和视为
0)。也就是说可能存在i0 ≤ i ≤ n-1) 满足a0+…+ai-1= ai+1+…+an-1
请编写一个函数,判断给出的数组中是否存在一个满足条件的元素。(
5 分)
例如对于数组
[1, 2, 3, 3]程序应返回truea0+a1=a3=3),对于数组[2, 4, 1]应返回 false
2. 已知整数序列A满足已下条件:
1) A0=0
2) A
i+1 – Ai= x或者y
其中 xy是两个整数。
给定序列长度
n xy的值,打印出A最后一个元素所有可能的值。(10分)
例如:对于
n = 3, x = 1, y = 2, 序列A的所有可能情况为:
10 12
20 13
30 23
40 24
打印结果应为: 2 3 4(按其他顺序打印也算正确)

问题描述:

有一个木桶,里面有M个白球,小明每分钟从桶中随机取出一个球涂成红色(无论白或红都涂红)再放回,问小明将桶中球全部涂红的期望时间是多少?

分析过程:

数学期望类的题目,主要是要理解什么是数学期望,数学期望是干什么用的,关于这些问题的解答,大家可以自己去理解,思考或者翻书,我要讲的内容是如何利用这些数学期望的特点。

数学期望的递归特性:

飞行棋大家都玩过吧,应该知道每次抛到6,就有一架飞机可以出门了,那么问你一架飞机可以出门的时候,抛筛子次数的数学期望是多少?

你估计会毫不犹豫的说是6(P=1/6,E=1/P=6),但是你思考过深一层次的原因吗?

好吧,我来告诉你,我们记抛6的期望次数是E,如果第一次抛的是6,那么就是1次,概率是1/6;如果第一次不是6呢,那么次数是1+E,概率为5/6;

那么 E = 1 * (1/6) + (1+E) * (5/6),你可以很容易的解出 E = 6

上面加粗的红色字体用的就是类似一个递归的概念,希望你能理解吧,不行的话,那只能自己去努力理解了,呵呵。

 

现在我们开始解答上面的问题:

令P[i]代表M个球中已经有i个球是红色后,还需要的时间期望,去将所有球都变成红色。

 

So,给出递归式:P[i]= (i/M) * P[i] + (1-i/M)* P[i+1] + 1

我相信大家都能理解这个公式的含义,不过还是解释一下,在P[i]的情况下,我们选一次球,如果是红球,那么概率是i/M,子问题还是P[i],如果是白球,那么概率是1-i/M,子问题是P[i+1],注意你当前的选球操作要计算在内,即一次

 

化简如上递归式得:P[i] = P[i+1] + M/(M-i),显然P[M] = 0;

所以:

P[M-1] = P[M] + M/1

P[M-2] = P[M-1] + M/2

P[0] = P[1] + M/M

综上:P[0] = 0 + M/1 + M/2 + … + M/M至此问题已经解决,不过我希望大家学到的不是这个答案,而是分析这个题目的过程

 

最终答案:

0 + M/1 + M/2 + M/3 + … + M/M


quant面试题?

主持人设计了一个游戏,有三个参赛者参加:主持人秘密地随机从0-100选择一个数N,三个人依次报一个数(三个人中每个人都能听到另外两个人报的数,他们报的数不能重复)。报完之后主持人公开他选择的那个数N,三名参赛者中报的数中与N最接近那个人能得到100万奖金,求问:你愿意当第几个报数的参赛者,你的策略是什么?
作者:丁鹏
链接:https://www.zhihu.com/question/53598048/answer/135730756
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

谢不邀~手机作答画图不易,容我先瞎扯一番~三个人都不知道主持人的数字,所以只要考虑得到最大的获胜区间长度就可以了。先考虑连续情况,设总区间长度为1,对于第三个人,前两个人会将总区间分割成abc三段,而选择a和c区间都能获得整个a或c的区间长度(贴着前两个人的数字往两端报数就可以了),而选择b则必须与其他两个人共享区间b,只能过得b/2,因此只有b大于0.5时,第三个人才会选择b区间内报数(并且随便报,并不影响自己获胜概率)。可以算出均衡时是abc的长度分别为0.25,0.5,0.25,此时第三个人随便怎么报数对他自己都是同等概率的,为0.25。
确定第三个人的策略后再考虑第一个人,如果第一个人报出的a>0.25且<=0.5(如果>0.5就从另一头算起),第二个人只需要在稍大于1-a处报数即可(保证自己到另一头的区间长度略小于a),此时第三个人会选择在a的左侧贴近a处取一点,获得整个a区间。此时第二个人的获胜长度为a+(1-2a)/2,第一个人为(1-2a)/2,第三个人为a,第一个人获胜概率小于0.25。
若第一个人选择a<=0.25。同理此时第二个人应选择略大于1-(1-a)/3处报数,此时第三人选择在b区报数,好困……懒得写了………总之第二个人的概率大。
总之结论是第一个人报略小于0.25处,第二个报略大于0.75处,逼迫第三个人报0.25-0.75之内,如果第三个人报中间,则一二人概率相等,第三人最小,仅有四分之一,所以怎么样都不选第三个报数,选第二个报数最好。
然后离散情况请自行分析……我困得眼睛张不开了………


  • 7
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值