算法导论 5.1-2
来源:互联网 发布:单片机电路图仿真 编辑:程序博客网 时间:2024/06/14 17:44
1 题目
描述RANDOM(a,b)过程的一种实现,它只调用RANDOM(0,1)。作为a和b的函数,你的程序的期望运行时间是多少?
2 分析与解答
RANDOM(0,1)以等概率生成0或1,将区间[a,b]中的整数以2进制表示就可以只用0和1来表示区间中的任意数,再设[a,b]中的整数有n位,那么使用RANDOM(0,1)就可以生成n位二进制整数的全集,而区间[a,b]中的整数是n位二进制整数的一个子集,所以RANDOM(0,1)可以生成[a,b]中所有的整数。并且由于每位生成0或1的概率是相同的,且每位生成0或1是相互独立的,所以生成的[a,b]之间的每个整数的概率是相等的,满足RANDOM(a,b)的要求。
综上,RANDOM(a,b)只调用RANDOM(0,1)的一种实现步骤是:
- 计算b的二进制表示的位数,表示为n
- 使用RANDOM(0,1)生成n位二进制数
- 若生成的数在[a,b]则返回,若不再区间则递归调用RANDOM(a,b)
2.1 伪代码
RANDOM(a,b) n = compute the bits of b c = 0 for i <- 1 to n do c = c + (RANDOM(0,1) << (i-1)) if a <= c and c <= b then return c return RANDOM(a,b)
2.2 python实现
import randomdef myrandom(a,b): n = 1 c = 0 tmp = b while tmp/2 > 0: tmp = tmp/2 n += 1 for i in range(0,n): c += (random.randint(0,1) << i) if a <= c and c <= b: return c return myrandom(a,b)
- 算法导论 5.1-2
- 算法导论 5.1-2
- 算法导论 5.1-2
- 算法导论5.1-2
- 算法导论exercise 5.1-2,5.1-3
- 随机数相关(算法导论5.1.2)
- 算法导论 5.1-3
- 算法导论 5.1-1
- 算法导论 5.1-3
- 算法导论 5.1-3
- 算法导论5.1-3
- 算法导论 2-2
- 算法导论学习2
- 算法导论 24-2
- 算法导论5.4-2
- 算法导论5.4-2
- 算法导论读书笔记2
- 算法导论22.4-2
- XP下使用aircrack注入式破解WEP(Commview支持网卡)
- 在linux中,如何增加、修改、删除、暂停和冻结用户名
- 在windows下使用Visual Leak Detector + Visual Studio 2008进行内存泄漏分析
- 进程的几个操作
- 二叉树 面试
- 算法导论 5.1-2
- Install ruby 1.9.3-p125 from source
- 关于大小端存储的问题
- iOS 299刀有线无线发布流程
- OCP-1Z0-052-V8.02-131题
- 验证url地址的有效性
- data;idata;xdata;code的区别
- ios url 编码和解码
- MySQL存储过程