• 机器学习概率题总结(转载)


    面试概率题总结:

    重点:

           洗牌算法  蓄水池算法   求期望

    问题:

    1. 在半径为1的圆中随机选取一点。

    2. 一根木棒,截成三截,组成三角形的概率是多少?

    3. 抛一个六面的色子,连续抛直到抛到6为止,问期望的抛的次数是多少。

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

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

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

    7. 已知有个randM()的函数,返回1到M随机自然数,怎样利用这个randM()构造randN(),随机1~N。

    8. 已知一随机发生器,产生0的概率是p,产生1的概率是1-p,现在要你构造一个发生器,使得它产生0和1的概率均为1/2。.

    9. 已知一随机发生器,产生的数字的分布不清楚,现在要你构造一个发生器,使得它产生0和1的概率均为1/2。

    10. 已知一随机发生器,产生0的概率是p,产生1的概率是1-p,构造一个发生器,使得它构造1、2、3的概率均为1/3;…。更一般地,构造一个发生器,使得它构造1、2、3、…n的概率均为1/n。。

    11. 给出从n个数中随机选择m个数的方法。n很大,可以认为是亿级别。m可以很小,如接近1;也可以很大,如接近n。

    12. 给出从n个数中随机选择1个的方法。注意,n非常大,并且一开始不知道其具体值。数字是一个一个给你的,当给完之后,你必须立刻给出随机的结果。
    这里n的值非常大,而且要求立即给出答案,所以不能把所有的数字先保存起来,然后再慢慢考虑要随机哪个。

    13. 给出从n个数中随机选择m个的方法。注意,n非常大,并且一开始不知道其具体值。数字是一个一个给你的,当给完之后,你必须立刻给出随机的结果。

    14 一个桶里面有白球、黑球各100个,现在按下述规则取球: 
          - i 、每次从桶里面拿出来两个球; 
          - ii、如果取出的是两个同色的求,就再放入一个黑球; 
          - iii、如果取出的是两个异色的求,就再放入一个白球。 
          问:最后桶里面只剩下一个黑球的概率是多少?

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

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

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

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

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

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

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

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

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

    24 : 54张扑克牌均分成3堆,则大小王在一堆的概率?

    25:  Quant面试概率题问找对象的概率? 男女两组,各自收入均匀随机分布,样本总数、平均值都一样,现随机抽取男女配对,配对成功的条件是男的收入大于女
            配对不成功的男女再继续配对,反复n次问最后会有多少比例男的始终无法配对成功?
    26:一个篮子里装着20个红球和20个蓝球,每次从中取出2球,如果取出的2球颜色是一样的,那么放回红球,取出蓝球;如果取出的2球的颜色是一样的,则都不放回,将2球都取出;不断重复以上步骤。问题:求最后一次取球恰好只取到一个红球的概率。
    27:给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。

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

      28  史密斯夫妇邀请另外四对夫妇就餐,已知他们每个人都不和自己握手、不和自己的配偶握手、且不和同一个人握手一次以¬上。在大家见面握手寒暄后,史密斯问大家握手了几次,每个人的答案都不一样。问:史密斯太太握手几次

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

      31 甲乙两个人答对一道题的概率分别为90%和80%,对于一道判断题,他们都选择了“正确”,问这道题正确的概率。请问这题怎么做,谢谢

      32 飞机上有100个座位,按顺序从1到100编号。有100个乘客,他们分别拿到了从1号到100号的座位,他们按号码顺序登机并应当对号入座,如果他们发现对应号座位被别人坐了,他会在剩下空的座位随便挑  一个坐。现在假如1号乘客疯了 -_-! (其他人没疯),他会在100个座位中随机坐一个座位。那么第100人正确坐自己座位的概率是多少?

      33 两个信封,一封里装的钱是另一封里的两倍,你选了一个打开一看,里面是十块钱,这个时候你可以选择换成另一个,问你该不该换?

      34  已知一随机发生器A,产生0的概率是p,产生1的概率是1-p,现在要你构造一个发生器B, 使得它构造0和1的概率均为1/2。

      35 如果有该随机发生器A,输入一个指定的N,如何以以1/N的概率随机产生1-N?

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

       37  如何随机选取1000个关键字

       38 一个口袋内有10个红球,20个蓝球,30个绿球,随机地把球一个一个取出来,请问红球最先被取完的概率?

       39  三人陪审团,其中两人每人做出正确决定的概率是P。另一人总是靠扔硬币来决定支持谁。最后由多数票决定结果。另一个审判由一人决定,这个人做出正确决定的概率也是P。问三人陪审团与一人审判     谁有更大概率做出正确决定?

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

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

        42  如题,本人碰到了一个有趣的面试题,假如草地上有一群兔子,数量无穷多,但是体重不相同。我们从中选出10只兔子,记其中的最重的兔子的重量为A, 然后再从剩余的兔子中选注20只,记其中的最   重的兔子的重量为B, 问A大于B的概率是多少?面试官提示说,可以想象成一次抓了1只和两只兔子,并且考虑抽出最重的兔子的概率是多少?


    解答:

    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个数字。

    要保证m个数中每个数字被选取的概率都为m/n

       第2个数被选取的概率为:  (m/n)((m-1)/(n-1)) + ((1-m/n)*(m/(n-1)))  = m/n
    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个数中每个被选中的概率都是相等

    14 一个桶里面有白球、黑球各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]

    15 10个人出去玩,集合时间有10分钟,每个人都在该时间内到达,概率均匀分布,彼此独立,那么最后一个人最有可能到达的时间是?
    答: 遇到这种想不明白,最好的方法就是枚举。 
    若最后一个人在10分钟到达(概率1/10),其他人也都已经到达了(概率是1),总概率是 19 * (1/10) 
    若最后一个人在9分钟到达(概率1/10),其他人到达的概率是(9/10)9,总概率是 (9/10)9 * (1/10) 
    依此类推。可见概率最大的是第10分钟。 
    原文引自此处
    16 已知随机数生成函数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,如果出现其他两种情况则舍掉重新调用。 
    原文引自此处
    17 给定rand5(),实现一个方法rand7()。也即,给定一个产生0到4(含)随机数方法,编写一个产生0到6(含)随机数的方法。
    答: 
    随机数函数的关键是确保产生每一个数的的概率相等。我们可用通过5 * rand5() + rand5()产生[0:24],舍弃[21:24],最后除以7取余数,则可得到概率相等的[0:6]的数值。 
    原文引自此处
    18 100个人排队,每个人只能看到自己之前的人的帽子的颜色(假设只有黑白两色),每个人都得猜自己帽子的颜色,只能说一次,说错就死掉,别人可以听到之前的人的答案以及是否死掉。请问用什么策略说死掉的人最少。
    答: 假设只有3个人,假设ture = 白,false = 黑,用这个公式x3 = (x1 == x2),用人话就是1和2的帽子颜色一样的话就说白,不一样的话就说黑。这个策略第一个人死的概率是1/2,剩下的两个都不会死。 
    推广到4个人,也就是x4 = (x3 == (x1 == x2)),照理可以推广到100人。但问题就是人很难判断,只能靠计算机来算。 
    另一个解题方法:“最后一个人看一下前面黑帽子的个数是奇数还是偶数,比如约定奇数说黑,偶数说白。这样前面的人都可以推断出来正确的结果。”
    19 54张牌,平均分成三堆,大小王在同一堆的概率?
    答: 
    C1652∗C1836∗C1818/A22C1854∗C1836∗C1818/A33=17/53 
    或者可以这么想。先平均分三堆,大王在第一堆的概率是1/3, 小王在剩下的53张牌中,有17/53的概率和大王同一堆。依此类推,大王还可能在2,3堆,因此 
    1/3∗17/53∗3=17/53
    20 买饮料,三个瓶盖可以换一瓶,请问要买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。
    21 有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中等概率随机取得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,就是这么酷。
    此外还有扩展版,以不同权重被选中,参考此文
    22
    在一条高速公路上,在30分钟内看到一辆汽车的可能性是0.95,那么在10分钟内看到一辆车的概率是多少?(假设过车的概率是恒定的)
    答: 
    记10分钟内看到车的概率为p. 那么30分钟都没看到车的概率是(1−p)3=1−0.95=0.05 
    所以p=1−0.051/3
    23
    你和朋友去参加一个晚会,带你和朋友在内,共有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. 看过来对方那个数更大,所以不能赌。

    24 : 54张扑克牌均分成3堆,则大小王在一堆的概率?

    解法1:先平均分三堆,大王在第一堆的概率是1/3, 小王在剩下的53张牌中,有17/53的概率和大王同一堆。依此类推,大王还可能在2,3堆,因此
    1/3∗17/53∗3=17/53

    解法2: 样本空间数 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

    25:  Quant面试概率题问找对象的概率? 男女两组,各自收入均匀随机分布,样本总数、平均值都一样,现随机抽取男女配对,配对成功的条件是男的收入大于女
            配对不成功的男女再继续配对,反复n次问最后会有多少比例男的始终无法配对成功?
    26:一个篮子里装着20个红球和20个蓝球,每次从中取出2球,如果取出的2球颜色是一样的,那么放回红球,取出蓝球;如果取出的2球的颜色是一样的,则都不放回,将2球都取出;不断重复以上步骤。问题:求最后一次取球恰好只取到一个红球的概率。

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

    史密斯夫妇握手问题

     28  史密斯夫妇邀请另外四对夫妇就餐,已知他们每个人都不和自己握手、不和自己的配偶握手、且不和同一个人握手一次以¬上。在大家见面握手寒暄后,史密斯问大家握手了几次,每个人的答案都不一样。问:史密斯太太握手几次

    解答:
    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次手,与每对夫妇中的某一位各握了一次

      29 一对夫妇,邀请N-1对夫妇参加晚会。夫妇之间,丈夫肯定认识妻子。每个人和自己不认识的人都要握手一次。握手完了之后,男主人站出来问了其他所有人的握手情况。发现,任何一个人的握手情况都和别人不相同。问你,女主人握了几次手(答案是N-1次)

      
      30 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个萝卜。

      31 甲乙两个人答对一道题的概率分别为90%和80%,对于一道判断题,他们都选择了“正确”,问这道题正确的概率。请问这题怎么做,谢谢

    题目为真且甲乙都选则正确的概率 / 甲乙都选择正确的概率
    题目为真且甲乙都选真/(题目真甲乙都选真+题目假甲乙都选真)
    (0.5*0.9*0.8)/{(0.5*0.9*0.8+0.5*0.1*0.2)}
    =72/74

      32 飞机上有100个座位,按顺序从1到100编号。有100个乘客,他们分别拿到了从1号到100号的座位,他们按号码顺序登机并应当对号入座,如果他们发现对应号座位被别人坐了,他会在剩下空的座位随便挑  一个坐。现在假如1号乘客疯了 -_-! (其他人没疯),他会在100个座位中随机坐一个座位。那么第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%

      33 两个信封,一封里装的钱是另一封里的两倍,你选了一个打开一看,里面是十块钱,这个时候你可以选择换成另一个,问你该不该换?

    第一印象肯定是换不换无所谓,因为貌似二者不相关

    但是随后又会想到,另一个信封有一半可能是五块,一半可能是二十块,期望值会是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)也就是已知手里的信封

      34  已知一随机发生器A,产生0的概率是p,产生1的概率是1-p,现在要你构造一个发生器B, 使得它构造0和1的概率均为1/2。

    原始的随机数生成器,生成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;
    }

      35 如果有该随机发生器A,输入一个指定的N,如何以以1/N的概率随机产生1-N?

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

    如果能够得到一组等概率的数,不管是什么数,只要等概率而且个数大于10,那么问题就可以解决了。
    发现 (rand7() - 1) * 7 + rand7(),可以等概率的生成1到49。
    呵呵,这不就得了,只要把11-49砍掉就可以了。不过这样的效率比较低。可以砍掉41-49,然后在把1-40映射到1-10,那么问题也就解决了。

       37  如何随机选取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 就是我们这次生成的随机数。

       38 一个口袋内有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
    中间有些道理省略了,大家凑合看吧。

       39  三人陪审团,其中两人每人做出正确决定的概率是P。另一人总是靠扔硬币来决定支持谁。最后由多数票决定结果。另一个审判由一人决定,这个人做出正确决定的概率也是P。问三人陪审团与一人审判     谁有更大概率做出正确决定?

    一样大,概率都是p
    因为三人陪审团的话,正确的概率是
    p*(1-p)*0.5+p*(1-p)*0.5+p*p*0.5+p*p*0.5=p

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

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

        42  如题,本人碰到了一个有趣的面试题,假如草地上有一群兔子,数量无穷多,但是体重不相同。我们从中选出10只兔子,记其中的最重的兔子的重量为A, 然后再从剩余的兔子中选注20只,记其中的最   重的兔子的重量为B, 问A大于B的概率是多少?面试官提示说,可以想象成一次抓了1只和两只兔子,并且考虑抽出最重的兔子的概率是多少?

    参考文献:https://blog.csdn.net/BertDai/article/details/78070092

  • 相关阅读:
    标准差,绝对中位差
    批处理计时
    四元数压缩
    float类型的存储方式
    通俗易懂理解——浮点与定点的计算机表示及互转
    max MultiRes修改器
    Topogun拓补工具
    3dmax高模到低模烘法线
    在线曲线绘制
    景深
  • 原文地址:https://www.cnblogs.com/xianbin7/p/10690064.html
Copyright © 2020-2023  润新知