智力题2

来源:互联网 发布:禄宏微交易 知乎 编辑:程序博客网 时间:2024/05/21 18:39

假定函数rand_k会随机返回一个[1,k]之间的整数(k>=2),并且每个整数值出现的几率相等。已知目前有rand_7的实现,请问通过调用rand_7和四则运算函数,并适当增加逻辑判断和循环等控制逻辑,下列函数可以实现的有(ABCD)

A:rand_3 B:rand_21  C:rand_23  D:rand_47


对于rand_x(x<7)的直接截断,只要rand数大于x直接忽略,保证rand_x能够做到概率相等。而对于其他的则采用7×rand_7+rand_7,可以-7得到rand_49,然后截断成rand_42,统一除以2,则是rand_21,其他类似。

鉴于大家对这道题的解释看得不太清,我就在此展开解释一下:

首先分析:7×rand_7+rand_7

1.      首先它是由两个随机变量组成,亦即7X+Y,只不过X与Y是独立同分布的而已,所以上式子表示为Z=7X+Y

那么对于随机变量X,你可以理解为它是一个“量级”的概念,X取值为1~7

当X=1时,随机变量Z取值范围是1*7+(1~7),也就是8~14

当X=2时,随机变量Z取值范围是2*7+(1~7),也就是15~21

当X=3时,随机变量Z取值范围是3*7+(1~7),也就是22~28

以此类推。。。

可以产生8~56的随机数。

那么产生的8~56的随机数,概率都相等吗?

答案是必然的,因为X是量级的概念,达到每个量级的概率是1/7,在量级内,Y达到1~7每个数的概率依然是1/7,所以8~56的每个数的概率都是1/49

好了我们可以得到1/49等概率的8~56,直接在生产的时候-7,得到等概率1/49的1~49.。。。。

好,现在只需要记住,得到rand_49,1~49的每个数都是等概率的就可以了,因为我们要截断,也就是说,为了得到rand_23直接截断,判断输出如果>23,直接忽略,否则输出,大家可能有点别扭,因为有的随机数生成的时候可能时间上要比其他的长点。但是要记住,1~23每个数输出的概率都是相等的,只不过不能保证每次输出时间都分秒不差而已。时间长短是跟概率无关的概念。

转自:http://blog.csdn.net/zhlfox2006/article/details/11854799




原创粉丝点击