算法导论 5.1-3

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 伪代码

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值