一道概率题
来源:互联网 发布:印第安老斑鸠 知乎 编辑:程序博客网 时间: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) + ...)- 一道概率题
- 一道概率题
- 一道概率题
- 再来一道概率题
- 一道概率题
- 先记录一道概率题
- 一道有意思的概率题
- 一道概率题---网易面试
- 一道概率题(笔试)
- 一道概率题-51nod11B
- 一道取球概率题
- 一道关于诊断准确率的概率题
- 艾波寧捎信-一道有意思的概率题
- 扔骰子的一道概率题
- 关于一道概率题的思考
- 一道概率题——关于男女比例
- 摸球问题->一道概率题
- 一道概率题目
- C++学习总结(一)
- U盘安装系统教程 如何用U盘装系统
- 社区反作弊工作的一点体会
- 一起学Windows Phone7开发(十二.一 Tile Notification)
- 【整理】解决php输出文件下载时文件名含中文时出现乱码
- 一道概率题
- JSON
- 一起学Windows Phone7开发(十二.二 ShellTileSchedule)
- 【整理】解决php输出时出现多余的空格或者换行
- 一起学Windows Phone7(十三.控件)
- dom解析
- C语言中基本的输入和输出函数的用法第二讲(C语言学习随笔四)
- C++函数中的static变量初始化及析构顺序
- 【整理】取消eclipse for php 括号自动补全闭合,修改自动匹配,开启自动换行