期望的计算,1.按定义去做,算出所有可能值和概率。2.找递推规律(优先考虑)。
1.假设现有一枚均匀硬币,现要投掷硬币,直到其两次出现正面,求投掷的期望次数
2. 假设在一次抽奖活动中,你需要集齐5种卡片,每次抽中任意类型卡片的概率是相等的,即1/5. 那么要集齐所有类型,平均要抽多少次?
3. 给一条长度为1的线段,在线段上选取两个点将其分成3段,求这三段能拼成三角形的概率?
根据三角形两边之和大于第三边,假设其中一段距离左端点的距离为x,另一段为y,令y>x,那么三段的长度分别为x, y-x, 1-y
根据两边之和大于第三边有:y > 1/2 , y-x < 1/2 , x < 1/2, y-x > 0,这几个条件可以确定一个三角形,面积是1/8,这代表x和y能构成三角形的取值范围。
对于线段的切割,有 0<x<y<1, 也就是0<x<1, 0<y<1, x<y组成三角形的面积是1/2,那么1/8/(1/2)=1/4即为能组成三角形的概率
4.蓄水池抽样问题
给定一个数据流,数据流长度N很大,且N直到处理完所有数据之前都不可知,请问如何在只遍历一遍数据(O(N))的情况下,能够随机选取出k个不重复的数据。
问题1. 构造一个随机数生成器,使得如果其生成数范围在1~n则每个数被选中的概率都是1/n,比如范围是1~2那么得到1和2的概率都是1/2,范围是1~3则得到1,2,3点概率都是1/3。
构造方法是:首先令num=1,然后用1/2的概率去决定是否用2替换num,也就是令num=2,然后再用1/3的概率决定是否用3替换2,依此类推,对于第n个数n用1/n的概率决定是否用n去替换num。这样下来,n个数替换结束后,num=1~n中任意数字的概率都是1/n。
证明: 开始只有1,那么1被选中的概率P(1)=1,之后添加了2,2被选中的概率是P(2)=1/2,此时1还能被选中的概率P(1最终保留下来)=P(1被选中)*P(2没被选中的概率)=1*(1-1/2)=1/2,之后又添加了3,那么如果已经用2替换了1,此时2不被替换掉概率是P(2最终保留下来)=P(2被选中)*P(3没被选中的概率)=1/2*(1-1/3)=1/3,也就是说范围1~3内,最终生成了2的概率是1/3,再来看1,如果1一直没被替换掉,也就是P(1最终保留下来)=P(1被选中)*P(2没被选中)*P(3没被选中)=1*(1-1/2)*(1-1/3)=1*1/2*2/3=1/3,也就是说在1~3的范围内,最终生成了1点概率也是1/3。
那么对于n个数最终生成第m个数的情况,有:
P(m最终保留下来)=P(m被选中)*P(m+1没被选中)*P(m+2没被选中)*...*P(n没被选中)
=1/m*(1-1/(m+1))*(1-1/(m+2))*...*(1-1/n)
=1/m*m/(m+1)*(m+1)/(m+2)*...*(n-1)/n
=1/n
也就是说n个数中,每个数都是等概率被选中的,得证。
问题2. 在1~n的范围内选出k个数,保证1~n每个数被选中的概率相等。
构造方法是:先保留1~k,然后增加一个数k+1,拿他替换1~k中的数字的概率是k/k+1,替换必须是等概率的1/k,对于第n个数,拿他替换1~k中的数字的概率是k/n,这样可以保证范围在1~n的所有数中每个数被选到这k个数中的概率都是k/n。相当于把上个问题的1变成了k。
证明:首先只有k个数的时候它们被选中的概率是1,那么第k+1个数选进来,这k个数中的某一个ki不被替换的概率是
P(ki保留下来)=P(ki被选中)*[P(k+1被选中)*P(k+1没有替换ki)+P(k+1没被选中)]=1*[k/(k+1)*(k-1)/k+1/(k+1)]=k/(k+1)
对于m保留到最后的概率为
P(m保留到最后)=P(m被选中)*[P(m+1被选中)*P(m+1没替换m)+P(m+1没被选中)]*[P(m+2被选中)*P(m+2没替换m)+P(m+2没被选中)]*...*[P(n被选中)*P(n没替换m)+P(n没被选中)]
=k/m*[k/(m+1)*(k-1)/k+(m+1-k)/(m+1)]*[k/(m+2)*(k-1)/k+(m+2-k)/(m+2)]*...*[k/n*(k-1)/k+(n-k)/n]
=k/m*m/(m+1)*(m+1)/(m+2)*...*(n-1)/n
=k/n
也就是说n中的任意一个数被选到k个数里的概率都是k/n,得证。
5.掷骰子,正面朝上的数字有多大就给多少钱,问最多愿意花多少钱去玩这个游戏?如果能掷两次,第二次可以选择掷或者不掷,并且如果第二次掷了,那么受益只能按照第二次的给,问愿意花多少钱去玩?
计算收益的数学期望,骰子六个面,每个面朝上的概率是1/6,那么受益的期望是 1*1/6+2*1/6+3*1/6+4*1/6+5*1/6+6*1/6=3.5 所以最多花3.5元去玩。
已知掷一次期望收益是3.5元,也就是说第二次期望受益是3.5元,所以如果第一次掷出了4 5 6的话,第二次肯定不掷了,否则还是要掷一发试试的,第一次掷出4 5 6的概率是1/2,所以选择掷第二次的概率也是1/2,第一次如果掷出了1 2 3的话,受益应该按照第二次的算,也就是3.5,第一次如果掷出了4 5 6的话,收益按照第一次算也就是4*1/3+5*1/3+6*1/3=5,那么最终期望受益是5*1/2+3.5*1/2=4.25
6.一把宝剑,目前是1级,每往上升一级需要一个宝石,升级成功率是50%,等级小于等于5的时候,失败不会降级,等级大于5的时候,失败会降一级,问将宝剑升到9级至少需要宝石的期望数量。
设E[i]表示从等级i-1升到i的期望宝石数量,那么对于i<=5,有 E[i]=1/2*1+1/2*(1+E[i]),有E[i]=2,对于i>5的情况有 E[i]=1/2*1+1/2*(1+E[i-1]+E[i]),表示如果成功花费一块宝石,如果失败,首先需要花费一块宝石,然后降一级到i-2所以需要先升到i-1花费E[i-1]块宝石,然后再升到i需要E[i]块宝石,得到E[i]=E[i-1]+2,那么有E[2]=E[3]=E[4]=E[5]=2,
E[6]=4, E[7]=6, E[8]=8, E[9]=10,从1级升到9级需要E[2]+E[3]+...E[9]=36块
7. 平均要取多少次(0,1)之内的随机数才能让其和超过1?
e次。
令x=1,可得结果。
8.两个人在一个圆桌上放硬币,直到摆不下就算输,问先手的必胜策略?
先手将硬币放桌子中间,然后后手放在哪个位置,先手就放在其对称的位置。
9. 25匹马,速度都不同,一共5个赛道,不能计时,一次只能知道五匹马的速度快慢,问至少需要多少场比赛才能分出前三名?
把这25匹马分成5组,赛五场,然后每场最快的马拿出来再赛一场,就知道最快的马了,根据最后这场的前三名,找出它们之前所在的组,因为第四第五名的马所在的组肯定不会有哪匹马能成为2、3名,对于最后一轮前三名所在的组,第一名所在的组中速度第2、3快的有可能成为所有马中2、3快的,第二名所在的组中速度第1、2快的有可能成为所有马中第2、3快的,然后第三名中速度最快的有可能成为所有马中第3快的。这样一来这五匹马再赛一轮,取前两名就是所有马中第2、3快的。总共需要比7次。
10.有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药。任何喝下毒药的生命都会在一星期之后死亡。现在你只有10只小白鼠和1个星期的时间,如何检验出哪个瓶子有毒药?
首先一共有1000瓶,2的10次方是1024,刚好大于1000,也就是说,1000瓶药品可以使用10位二进制数就可以表示。从第一个开始:
第一瓶 : 00 0000 0001
第二瓶: 00 0000 0010
第三瓶: 00 0000 0011
……
第999瓶: 11 1111 0010
第1000瓶: 11 1111 0011
需要十只老鼠,如果按顺序编号,ABCDEFGHIJ分别代表从低位到高位每一个位。 每只老鼠对应一个二进制位,如果该位上的数字为1,则给老鼠喝瓶里的药。
观察,若死亡的老鼠编号为:ACFGJ,一共死去五只老鼠,则对应的编号为 10 0110 0101,则有毒的药品为该编号的药品,转为十进制数为:613号。
11.十组砝码每组十个,每个砝码都是10g重,但是现在其中有一组砝码每个都只有9g重,现有一个能显示克数的秤,最少称几次能找到轻的那组。
将砝码分组1~10,第一组拿一个,第二组拿两个以此类推。。第十组拿十个放到秤上称出克数x,则y = 550 - x,第y组就是轻的那组
12.一百个犯人站成一纵列,每人头上随机带上黑色或白色的帽子,各人不知道自己帽子的颜色,但是能看见自己前面所有人帽子的颜色.
然后从最后一个犯人开始,每人只能用同一种声调和音量说一个字:”黑”或”白”,
如果说中了自己帽子的颜色,就存活,说错了就拉出去斩了,
说的答案所有犯人都能听见,
是否说对,其他犯人不知道,
在这之前,所有犯人可以聚在一起商量策略,
问如果犯人都足够聪明而且反应足够快,100个人最大存活率是多少
答案:这是一道经典推理题
1、最后一个人如果看到奇数顶黑帽子报“黑”否则报“白”,他可能死
2、其他人记住这个值(实际是黑帽奇偶数),在此之后当再听到黑时,黑帽数量减一
3、从倒数第二人开始,就有两个信息:记住的值与看到的值,相同报“白”,不同报“黑”
99人能100%存活,1人50%能活
除此以外,此题还有变种:每个犯人只能看见前面一个人帽子颜色又能最多存活多少人?
答案:在上题基础上,限制了条件,这时上次的方法就不管用了,此时只能约定偶数位犯人说他前一个人的帽子颜色,奇数犯人获取信息100%存活,偶数犯人50几率存活。
13.一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了),它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。(提示:他可以把香蕉放下往返的走,但是必须保证它每走一米都能有香蕉吃。也可以走到n米时,放下一些香蕉,拿着n根香蕉走回去重新搬50根。)
答案:这种试题通常有一个迷惑点,让人看不懂题目的意图。此题迷惑点在于:走一米吃一根香蕉,一共走50米,那不是把50根香蕉吃完了吗?如果要回去搬另外50根香蕉,则往回走的时候也要吃香蕉,这样每走一米需要吃掉三根香蕉,走50米岂不是需要150根香蕉?
其实不然,本题关键点在于:猴子搬箱子的过程其实分为两个阶段,第一阶段:来回搬,当香蕉数目大于50根时,猴子每搬一米需要吃掉三根香蕉。第二阶段:香蕉数《=50,直接搬回去。每走一米吃掉1根。
我们分析第一阶段:假如把100根香蕉分为两箱。一箱50根。
第一步,把A箱搬一米,吃一根。
第二步,往回走一米,吃一根。
第三步,把B箱搬一米,吃一根。
这样,把所有香蕉搬走一米需要吃掉三根香蕉。
这样走到第几米的时候,香蕉数刚好小于50呢?
100-(n*3)<50 && 100-(n-1*3)>50
走到16米的时候,吃掉48根香蕉,剩52根香蕉。这步很有意思,它可以直接搬50往前走,也可以再来回搬一次,但结果都是一样的。到17米的时候,猴子还有49根香蕉。这时猴子就轻松啦。直接背着走就行。
第二阶段:
走一米吃一根。
把剩下的50-17=33米走完。还剩49-33=16根香蕉。
14.