算法之4 | 随机数生成算法

算法之4 | 随机数生成算法一般的算法结果都是确定的 即对于相同的输入总对应着相同的输出 但实际应用中经常用到不确定的算法 比如随机数生成算法 算法的结果是不确定的 计算机中的随机数都是伪随机数 通过线性同余法得到 在计算物理学中 随机数被准确地分成了三类 真随机数

欢迎大家来到IT世界,在知识的湖畔探索吧!

一般的算法结果都是确定的,即对于相同的输入总对应着相同的输出。但实际应用中经常用到不确定的算法,比如随机数生成算法,算法的结果是不确定的。

计算机中的随机数都是伪随机数,通过线性同余法得到。

在计算物理学中,随机数被准确地分成了三类:真随机数、准随机数、伪随机数。那么这三种的区别是什么呢?拷贝一段书上的定义:

  1)真随机数:产生的数不可预计,也不可能重复产生两个相同的真随机数序列。真随机数只能通过某些随机的物理过程来产生,如放射性衰变、电子设备的热噪声等。

  2)准随机数:其随机数序列不具备随机性质,仅仅是用它来处理问题能够得到正确的结果。

  3)伪随机数:通过某种数学公式或者算法产生的数值序列。虽然在数学意义上伪随机数是不随机的,但是如果能够通过统计检验,可以当成真随机数使用。

例如,产生伪随机数序列a1, a2, …, an:

算法之4 | 随机数生成算法



欢迎大家来到IT世界,在知识的湖畔探索吧!

其中,b>0, c>=0, d>=m。d为种子;m取值越大越好;m,b互质,常取b为质数;

实际应用中,一般使用当前时间作为随机种子。

代码如下:

public class MonteCarlo {

private static final int MAXN = 1 << 20;

private int[] x;

public MonteCarlo() {

x = new int[MAXN];

}

public void rand() {

x[0] = (int)(Math.random()*100 + 1); // 随机种子(可以用日期产生)

/* 保证m与a互质 */

int m = MAXN;

int a = 9; // a = 4p + 1

int b = 7; // b = 2q + 1

System.out.println(x[0]);

/* 取前1w个数*/

for(int i = 1; i < 10000; ++i) {

x[i] = ( a * x[i-1] + b ) % m;

System.out.println(x[i]);

}

}

public static void main(String[] args) {

MonteCarlo mc = new MonteCarlo();

mc.rand();

}

}

算法之4 | 随机数生成算法

注:凡属于本公众号内容,未经允许不得私自转载,否则将依法追究侵权责任。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/106868.html

(0)
上一篇 3天前
下一篇 3天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信