标签:
薛定谔玫瑰把妹随机数 |
分类: 萎科学 |
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://dineal.blogbus.com/logs/57318752.html
看了一个新闻,光棍们“把妹”也分方法?科学做基础马到功成。
里面介绍的是薛定谔把妹法及一些延伸。
去年在看TBBT的时候,写过一篇日记,叫薛定谔的猫与股市开盘。
薛定谔的猫存在着不确定性的因素,随机数也同样是存在着不确定性,它本生就是随机生成的。
薛定谔把妹法送的是早餐,MM能不能吃上早餐,取决于那枚硬币的正反面。
鉴于不让MM饿肚子,俺又研究出来一个随机数送菊花,每次送的菊花的数量都是随机不同的,同样她也就无从得知菊花的数量的含义。
你还是那个迷一样的男子。
恩, 天蝎座的人就是这么神秘。
随机数的生成方法有很多,下面的方法-线性同余算法,便是其中使用起来最普遍的一种,但对于非工科男的Dineal根本看不懂这些,只能换用其它方法了。
现在用得最广泛的伪随机数产生算法就是所谓的线性同余算法。其随机数序列 {Xn}由方程:Xn+1 = ( aXn + c ) mod m得到,其中m>0称为模数,0≤ a <m称为乘数,0≤c <m称为增量,0≤X0<m称为初始值或种子,当m、a、c、X0都是整数时,通过这个方程就能产生一系列[0,m)范围内的整数了。很明 显,对一个线性同余随机产生算法来说,最重要的是m、a、c的选择。我们希望产生的序列足够长,能包含[0,m)内所有的数,并且产生的数是随机的,最好 能用32bit算术高效实现。于是乎为了有足够的空间产生足够长的队列,我们会使m足够大;为了使序列足够完整,足够象随机序列,我们会发现当m是素 数,c为0时就可以使序列的周期(即序列不重复的长度)对于一定的a达到m-1;要能用32bit算术高效实现,我们的m当然不能超过32bit,幸好刚 好有一个满足上述条件的很方便的素数2^31-1给我们用,于是产生函数就变成了Xn+1 = ( aXn) mod ( 2^31 – 1 )。在超过20亿个a的可选取值中,只有很少的几个可以满足上述所有条件,其中之一就是a = 7^5 = 16807。于是我们可以实现如下(完整的代码code栏目中提供打包下载,下同):
--------------------------------------------------------------------------------
http://photo2.bababian.com/upload3/20100129/7C24BC78847F90E0588BBEC94362AAEB.jpg