rand4和rand6
rand4需要自己定义,大致就是从[0,1,2,3,4]里面随机抽取一个数
rand6也就是[0,1,2,3,4,5,6]中随机抽取
怎么实现呢
可以转换成
| 0 | 1 | 2 | 3 | 4 | |
|---|---|---|---|---|---|
| 0 | 00 | 01 | 02 | 03 | 04 |
| 1 | 10 | 11 | 12 | 13 | 14 |
| 2 | 20 | 21 | 22 | 23 | 24 |
| 3 | 30 | 31 | 32 | 33 | 34 |
| 4 | 40 | 41 | 42 | 43 | 44 |
其实可以发现这些数字是5进制的数,比如44表示的是4*5+4=24,总共有0-24有25个数字
rand6里面有0-6七个数字,所以我们可以
**rand6 = rand4*5+4 <=20?x/3:loop **
当然你也可以rand6 = rand4 * 5+4 <=13?x/2:loop,但是这样的话会经常搜索到大于13的数,从而进入再次搜索,效率没那么高
不均匀的硬币实现均匀概率
本来硬币朝上朝下的概率可以认为是55开,但是现在我们这个硬币朝上和朝下的概率分别是0.4和0.6,那么要怎么通过抛硬币实现均匀概率呢?
其实只需要算排列组合的概率即可:
依次抛两枚硬币,两次都是正面朝上:0.4^2=0.16
第一枚朝上,第二枚朝下:0.4*0.6=0.24
第一枚朝下,第二枚朝上:0.6*0.4=0.24
两枚都朝下:0.6^2=0.36
所以我们只需要比较一次丢两枚硬币出现朝上朝下和朝下朝上的概率即可,其余结果则重新抛
本文介绍了如何通过rand4函数生成rand6,并探讨了利用不均匀硬币来实现均匀概率的方法。通过将rand4转换为5进制,可以将rand4映射到rand6的范围。同时,对于不均匀硬币,通过计算不同结果的组合概率,可以达到期望的均匀概率效果。
7959

被折叠的 条评论
为什么被折叠?



