一道概率题

来源:互联网 发布:印第安老斑鸠 知乎 编辑:程序博客网 时间:2024/05/18 21:10

描述RANDOM(a, b)过程的一种实现,它只调用RANDOM(0, 1)。作为a和b的函数, 你的程序的希望运行时间是多少?

 

分析:我试了试几种方法,都不可以直接使用RANDOM(0,1)生成出空间元素数非2的N次幂的标准随即实现。我想可能只有一种方法,就是先将解空间扩展到2的N次幂,然后根据结果决定是否得到了希望中的解。

举例来说,如果我们要生成(1,5)的随机数生成器,首先将解空间扩展到2的3次幂,即8。也就是我们求(1,8)的随机数生成器。RANDOM(0,1) = 0, 即继续在(1,4)中求解,RANDOM(0,1) = 1,即继续在(5,8)中求解。依次递归下去。如果最后生成的解属于(1,5),即求解结束,否则本次求解失败,重新开始求解。

 

证明解的正确性:对于(a,b),解空间中一共有n = b-a+1个元素。如果n是2的幂,可以很容易得到每个元素被选择的概率是1/n。如果n不是2的幂,架设n+k是大于n的最小的2的幂。对于每一个属于(a,b)的数最终成为解的概率都是1/(n+k),所以如果找到解,则该解是一个随机数。

 

下面计算算法的复杂度:对于(a,b),设m是大于或者等于n = (b-a+1)的最小的2的幂。对于一次成功求解,复杂度为O(lgm)。那么取得成功解的概率为(n/m)。则我们得到解的复杂度函数

           --    O(log (m)) (n/m)

f(n) =

         --      f(n) ((m-n) / m)

也就是

f(n) = (n/m) * log(m) + [(m-n)/m] * f(n), 有f(n) = log(m)

这个计算是错误的。设X=O(log(m)), p = n/m, 结果的复杂度应该一个多项式:f = x*p*(1 + (1-p) + (1-p)(1-p) + (1-p)(1-p)(1-p) + ...)
原创粉丝点击