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

第一次出现连续结果面试问题

2017-04-23 18:13 267 查看
问题:机器人抛硬币,不规则硬币,连续抛,出现A面的概率2/3,出现B面的概率1/3,问第一次连续两次出现A面,期望抛的次数为多少?

思路1:做一个捆绑,连续两次出现A,即考察两次抛硬币结果AA,AB,BB.记抛硬币的次数为随机变量N,则分类考虑N的奇偶性。如果N为偶数,则N/2次前N/2-1都是从AB,BB中选,最后一次选AA;如果N为奇数,则倒数第三次必定是B,即前N-3/2次都是从AB,BB中选,倒数第三次选B,最后一次选AA

计算过程:

result = 0.0

for i in range(1,10):
result = result + (8*i+1)/15.0*4.0*(5**i)/(9**i)
print(result)

print(result)

结果:6.18,但是答案错了,为什么错了,还需要分析

思路2:分叉树递归方程法


将LTT记为后续期望出现连续两个T的节点,其值即为所求。LT记为下一次投掷结果期望出现T的节点。

第一级(树根)第二级第三级
LTT掷T -> LT掷T -> 结束
..掷H -> LTT
.掷H -> LTT.
根据树状结构和其中的递归关系列方程如下:

LTT = pT*(LT+1) + pH*(LTT+1)

LT = pT*1 + pH*(LTT+1)

其中pT和pH分别是掷出字和花的概率,即为2/3,1/3
结果:3.75
验证计算:

# coding=utf-8
import random
nIter = 2000000;
nTotalTime = 0;

for iter in range(0, nIter):
times = 0
last = 0
while True:
fa = random.uniform(0,3)
times = times + 1
nLocate = 0
if fa < 2:
nLocate = 1 #正面
else:
nLocate = 2 #反面

if not(nLocate==1 and last==1): 
last = nLocate
else: #连续两次为正面,记录抛掷次数
nTotalTime = nTotalTime + times
break
print(nTotalTime, nIter, nTotalTime/nIter)


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐