标签:bsp 语言 排列 假设 选择 span 个数 概念 c语言
首先rand()取得的随机数是在一定的范围内的,一般是0x7fff,即32767
那么要利用此函数取比此大的随机数该怎么办,我觉得只有一个办法,就是拼接
通常我们会犯这样的错误:即rand()*rand()这样感觉是不是取到了一个更大的随机数,因为随机乘以随机还是随机嘛,但实际上是错误的
你可以把rand()函数当做一个重复的全排列,假设现在有6个数字(取得的概率是相同的)
rand1() :1 2 3 4 5 6
rand2() :1 2 3 4 5 6
那么现在看看结果与其取得的概率(仅举两例)
rand1()*rand2() P
2=1*2,2*1 1/6 * 1/6+1/6 * 1/6=2/36
12=3*4,4*3,2*6,6*2 1/6 * 1/6+1/6 * 1/6+1/6 * 1/6+1/6 * 1/6=4/36
可以由此看出这样取是不可取的,因为获取的数字概率是不相同的,这肯定就不满足随机的概念(即每个数字被选取到的概率应该相同)。
但是拼接是可取的
比如2和12
我们可以想象成两个空位(分别代表rand1与rand2)
___ ___
每个空位有如下选择
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
那么 2就是0 2 所以P(x=2)=1/10*1/10=1/100
那么12就是1 2 所以P(x=12)=1/10*1/10=1/100
毫无疑问,拼接是没有任何问题的
标签:bsp 语言 排列 假设 选择 span 个数 概念 c语言
原文地址:https://www.cnblogs.com/gambler/p/9124540.html