算法导论 5.1-3

来源:互联网 发布:淘宝大图轮播尺寸 编辑:程序博客网 时间:2024/06/13 23:45

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真值表

输出值01概率1-pp基于BIASE-RANDOM真值表,画出独立的两次BIASED-RANDOM过程的真值表输出值00011011概率(1-p)(1-p)p(1-p)p(1-p)pp可见输出01和10的概率是相同的,那么可以使用如下算法:依次调用两次BIASED-RANDOM,当输出不同时,返回第一次BIASED-RANDOM的值。下面证明此过程以等概率输出0和1。定义此算法为AVERAGE-RANDOM
  1. 事件A:AVERAGE-RANDOM有返回
  2. 事件B:AVERAGE-RANDOM返回0
  3. 事件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 伪代码

[plain] view plaincopyprint?
  1. AVERAGE-RANDOM()  
  2.     a = BIASED-RANDOM()  
  3.     if a != BIASED-RANDOM()  
  4.         then return a  
  5.     return AVERAGE-RANDOM()  
AVERAGE-RANDOM执行次数服从几何分布,且pgoematric =2p(1-p),所以执行次数的期望为1/2p(1-p),执行时间的期望T(n)=2p(1-p)*2TBIASED-RANDOM (n)
0 0