求各种产生随机数的算法

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/24 00:50:08
求各种产生随机数的算法求各种产生随机数的算法求各种产生随机数的算法多的很呀!别撤消呀,千万!\x0d不过几乎都是伪随机数.\x0d随机序列的算法\x0d找到了两个算法,第一个很简单,但可惜不是随机的,

求各种产生随机数的算法
求各种产生随机数的算法

求各种产生随机数的算法
多的很呀!别撤消呀,千万!\x0d不过几乎都是伪随机数.\x0d随机序列的算法\x0d找到了两个算法,第一个很简单,但可惜不是随机的,第二个是典型的伪随机数算法,可惜要用到2的几百万次方这样巨大的整数,真痛苦\x0d要是有UNIX上计算密码的源代码就好了\x0d第一种做法:\x0df(k) = (k*F(N-1)) mod F(N)其中,\x0dk是一个序列号,就是要取的那个数的顺序号\x0dF(N)是这样一个序列 F(0) = 0,F(1) = 1,F(N+2) = F(N+1)+F(N) (for N>=0)第二种做法V = ( ( V * 2 ) + B .xor.B ...)(Mod 2^n)N+1 N 0 2V是要取的随机数,B是个种子,n是随机数的最大个数\x0d原来这个问题,很高难,不少数学高手都为解决这个问题写了论文,咳咳,偶真是个白痴\x0d呵呵,效果肯定是不错啦,因为用不到很大的表.\x0d至于应用是这样的,比如,你要给每个用户在注册的时候一个ID但有不希望用户在看到自己的ID的时候能知道其他用户的ID,如果用SEQUENCE来生成ID的话,一个用户只要把自己的ID减1就能得到其它用户的ID了.所以要用随机数来做ID,这样用户很难猜到其他用户的ID了.\x0d当然主要的问题是,随机数可能重复.因此希望使用一个随机数做种子用它来确定一组"无规律"的自然数序列,并且在这个序列中不会出现重复的自然数.在这里使用的方法生成的序列并不是没有规律的,只不过这个轨律很难被发现就是了.\x0dXn+1 = (aXn + b) mod c (其中,abc通常是质数)是一种被广泛使用的最简单的随机数发生算法,有研究表表明这个算法生成的随机数基本上符合统计规律,JAVA,BORLAND C等用的都是这个方法,一般只要保证第一个种子是真正的随机数就行了,\x0d下面来说一下重复的问题,\x0d上述方法会有可能出现重复,因为当(aXn + b)有可能是同样的数或者说余数相同的数,因此要想不重复就得变形\x0d偶想到的方法是\x0dXn=(a*n + b) mod c n是一个在1到c之间的整数,a*n + b就是一个线性公式了,且若n不同则a*n + b也不同,它们除上质数c得到的余数也肯定不同,因为 若不考虑a和b而只有n的时候,每次的结果都是n,而线性公式,只不过移动了这条直线的位置和斜率而已,每个结果仍然不会相同的,\x0d为了增加不可预计性,偶又为上面那个公式设计了,随机数种子,于是就变成了这个样子\x0dF(N)=(随机数*(N+随机数))MOD 一个质数\x0d这样就能够产生 1到选定质数之间的一个"无规律"的自然数序列了,只要改变随机数就能改变序列的次序\x0d在应用的时候,要把随机数种子和最后用到的序列号保存到一个表里,每此使用的时候取出来算好,再把序列号更新一下就可以了\x0d具体地说,就是可以建一个表来保存每个序列的随机数种子,然后再为这个序列建一个SEQUENCE就行了然后就SELECT MOD(序列控制表.随机数*(SEQ.NEXTVAL+序列控制表.随机数)),序列控制表.质数)\x0dFROM 序列控制表\x0dWHERE 序列控制表.序列ID=XX就OK了注意 序列控制表.质数 决定了序列的范围

求各种产生随机数的算法 求java算法:如何生成一组不重复的随机数(比如1到10)Random类生成的随机数都会发生重复,但我想求一个随机数算法,不会产生重复的数(算法中不要用if来判定该随机数是否已出现过,否则执行效率 生成随机数独矩阵的算法的算法是?求随机生成10000个数独矩阵的算法. 随机数生成算法是怎样的 计算器如何产生随机数?就是产生随机数的步骤 C++怎么产生随机数?还有产生一定范围的随机数 java程序中如何产生随机数(一个按钮产生一个1~100的随机数) 求程序~ 求一个产生随机数的C语言程序要求在000~999之间产生一个随机数,包含000和999! java如何产生随机数的 求从n个数中抽取随机数的c语言算法. 求数据结构与算法工具书可以当字典查到各种常见算法的书, 算法设计:int rand()是一个能产生(0,65565)的随机数函数,怎么随机产生十个(1,300000)的不相等的数 求个随机数生成器不懂什么真随机数假随机数,只要能给我产生计算器上的效果就行,越快越好,好的在加分. labview随机数发生器里随机数产生的速度如何设定. 如何测试 产生的随机数 是不是真随机数? c# 随机数,会产生两个相同的随机数吗 随机数的概率随机数范围是0到90,一共产生22个随机数,求后一个随机数和前一个随机数相等的概率是多少,补充下,应该是:随机数范围是0到90,一共产生22个随机数,求至少有一次“后一个随 VB中怎样知道随机数产生的次数?我在程序中取了两个随机数,设当这两个随机数的和为50时程序停止.求这次程序运行中随机数产生了多少次?