隨機種子 Random seed

http://blog.sina.com.cn/s/blog_4b3120470100k96z.html
Random類的基值seed是什麼意思?
比如:
Random ran1=new Random();
Random ran2=new Random(12345);
這兩個有什麼區別啊?運行結果沒區別啊!
生成隨機數 Random random = new Random(); Random random = new Random(100);//指定種子數100 random調用不同的方法,獲得隨機數。 如果2個Random對象使用相同的種子(比如都是100),並且以相同的順序調用相同的函數,那它們返回值完全相同。如下面代碼中兩個Random對象的輸出完全相同 import java.util.*; class TestRandom { public static void main(String[] args) { Random random1 = new Random(100); System.out.println(random1.nextInt()); System.out.println(random1.nextFloat()); System.out.println(random1.nextBoolean()); Random random2 = new Random(100); System.out.println(random2.nextInt()); System.out.println(random2.nextFloat()); System.out.println(random2.nextBoolean()); } }
====================================================================
一般計算機的隨機數都是僞隨機數,以一個真隨機數(種子)作爲初始條件,然後用一定的算法不停迭代產生隨機數,下面介紹兩種方法: 
  一般種子可以以當前的系統時間,這是完全隨機的 
  。 
  算法1:平方取中法。 
  1)將種子設爲X0,並mod 10000得到4位數 
  2)將它平方得到一個8位數(不足8位時前面補0) 
  3)取中間的4位數可得到下一個4位隨機數X1 
  4)重複1-3步,即可產生多個隨機數 
  這個算法的一個主要缺點是最終它會退化成0,不能繼續產生隨機數。 
  算法2:線性同餘法 
  1)將種子設爲X0, 
  2)用一個算法X(n+1)=(a*X(n)+b) mod c產生X(n+1) 
  一般將c取得很大,可產生0到c-1之間的僞隨機數 
  該算法的一個缺點是會出現循環。
=====================================================
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章