1 题目
假设你希望以各1/2的概率输出0和1。你可以自由使用一个输出0或1的过程BIASED-RANDOM。它以概率p输出1,以概率1-p输出0,其中0<p<1,但是你并不知道p的值。给出一个利用BIASED-RANDOM作为子程序的算法,返回一个无偏向的结果,即以概率1/2返回0,以概率1/2返回1。作为p的函数,你的算法的期望运行时间是多少?
2 分析与解答
画出BIASED-RANDOM真值表
输出值 | 0 | 1 |
---|---|---|
概率 | 1-p | p |
输出值 | 00 | 01 | 10 | 11 |
---|---|---|---|---|
概率 | (1-p)(1-p) | p(1-p) | p(1-p) | pp |
- 事件A:AVERAGE-RANDOM有返回
- 事件B:AVERAGE-RANDOM返回0
- 事件C:AVERAGE-RANDOM返回1
根据条件概率公式:P(B|A)=P(AB)/P(A)=P(两次独立BIASED-RANDOM返回01)/P(两次独立BIASE-RANDOM返回01+两次独立BIASE-RANDOM返回10)=p(1-p)/[p(1-p)+p(1-p)]=1/2;
同理,P(C|A)=P(AC)/P(A)=1/2
2.1 伪代码
AVERAGE-RANDOM()
a = BIASED-RANDOM()
if a != BIASED-RANDOM()
then return a
return AVERAGE-RANDOM()
AVERAGE-RANDOM执行次数服从几何分布,且p
goematric =2p(1-p),所以执行次数的期望为1/2p(1-p),执行时间的期望T(n)=(1/2p(1-p))*2T
BIASED-RANDOM (n)