随机概率相关的面试题

本文探讨了面试中常见的随机概率题目,引用了Knuth的《计算机程序设计艺术》中的算法,该算法能保证在[a,b]范围内随机生成整数,且每个数被选中的概率相等。通过简单的概率验证,说明了算法的公正性。" 81567688,6905854,使用Mini XML库解析XML文件,"['XML解析', 'C编程', '文件操作', 'Linux开发', '数据解析']
摘要由CSDN通过智能技术生成
1. 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。
只调用一次rand7()肯定无法达到目的。我们调用两次rand7(),这样我们可以随机的得到1~49中的一个数,为什么呢?
我们将49分成7段,1~7,8~14,15~21,22~28,29~35,36~42,43~49,第一次rand7()随机选择其中一段,第二次rand7(),随机选择段内的一个数,这样我们得到的1~49中的数都是等概率的。
然后我们想办法将1~49映射到1~10,显然无法直接映射,我们只取1~40,对于41~49我们抛弃,这样并没有影响其随机特性,因为1~40中的每一个数都是等概率出现的。
然后(1~4)→1,(5~8)→2,……。这样就完成了rand10的功能。

int rand10()
{
	int x;
	do
	{
		x = (rand7()-1)*7+rand7();
	}while(x > 40)
	return (x-1)%4+1;
}
2. 有一个随机生成器randA(),以p的概率返回0,1-p的概率返回1,利用这个randA()构造randB(),使randB()等概率的返回0和1,即0.5的概率返回0,0.5的概率返回1。
只调用一次randA(),我们也无法实现randB(),所以也要调用两次。
调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值