码迷,mamicode.com
首页 > 编程语言 > 详细

算法导论5.3-3

时间:2015-10-23 22:47:40      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

转自风清云淡的博客,他给出的解法非常的妙。

问题:

描述RANDOM(a,b)的过程的一种实现,它只调用RANDOM(0,1)。作为a和b的函数,你的程序的期望运行时间是多少?
注:RANDOM(0,1)以等概率输出0或者1,
      要求RANDOM(a,b)以等概率输出[a,b]之间的数(整数)

 

解决方案:

         1,取 n=b-a+1,取最小的正整数m,使得 2^m >= n
         2,调用RANDOM(0,1),输出m-bit位整数N   (  N >= 0 and N <= 2^m-1)
         3,  if   N >=0  and N <= b-a
                      then return a+N     
                else 重新执行步骤 2
 
[a,b]之间每个数都是以 1/2^m 的概率输出的  

渐进运行时间分析:

我觉得渐进时间分析应该用概率分析的方法,我觉得是服从几何分布
     假设进行一系列伯努利试验,每次成功的概率是p,失败的概率是q=1-p,在取得一次成功前一共要进行多少次试验?令随机变量X为取得一次成功所要进行的试验次数,则X的取值范围{1,2,......}。对k>=1,因为在一次成功前有k-1次失败,从而有
                                               Pr[X=k]= q^(k-1)p
满足上式的分布称为几何分布     [见算法导论 P686]
在算法中 p=(b-a+1)/2^m   
期望运行次数(算法中生成m位序列的调用次数)为:  E[X]=sum(k*q^(k-1)p) [k=1......+无穷]=1/p=2^m/(b-a+1)
用T表示调用一次RANDOM(0,1)所需要的时间,每次运行时间为输出m位bit的时间:O(log(b-a) × T)
期望运行时间:O(T × log(b-a) × 2^m/(b-a+1) )=(约等于)O(T × log(b-a))  (因为m=(约等于)log(b-a+1))

算法导论5.3-3

标签:

原文地址:http://www.cnblogs.com/NightRain/p/4905871.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!