隨機種子

隨機種子

隨機種子(Random Seed)是計算機專業術語,一種以隨機數作為對象的以真隨機數(種子)為初始條件的隨機數。一般計算機的隨機數都是偽隨機數,以一個真隨機數(種子)作為初始條件,然後用一定的算法不停疊代產生隨機數。

方法

一般種子可以以當前的系統時間,這是完全隨機的

算法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之間的偽隨機數

該算法的一個缺點是會出現循環。

在windows平台下,可以考慮將如下參數作為影響種子的因素。

⒈GetTickCount()

系統啟動以來的嘀嗒時間

說明:該時間與系統運行時長相關,

⒉GetCurrentProcessId()

當前進程Id號

說明:該Id與系統啟動進程數量及次序有關,一般波動範圍較小。

⒊GetCurrentProcess()

當前進程句柄

說明:該句柄實質就是記憶體地址,但每次進程啟動時地址值是不確定的。

⒋GetProcessTimes()

進程時間參數

說明:-

⒌GetCurrentThreadId()

當前執行緒Id號

⒍GetCurrentThread()

當前執行緒句柄

⒎GetThreadTimes()

執行緒時間參數

⒏GetCurrentHwProfile()

Profile配置檔案

⒐GetSysColor()

系統Color

⒑GetSystemInfo()

系統信息

⒒GetSystemPowerStatus()

電源狀態

⒓GetKeyboardState()

鍵盤狀態

⒔GlobalMemoryStatus()

記憶體狀態

⒕time()

當前時間 秒

⒖GUID

各硬體設備GUID

⒗MAC

網卡mac

⒘CPUID

CPU Id號

⒙音效卡錄音噪音

該參量與環境相關

⒚用戶鍵盤間隔時間

該參量與用戶習慣相關

其次,盡最大可能增加這些因素的維度。這裡說的維度是指

種子結果與因素之間的關聯程度。一般使用hash函式對多個

因素進行哈希運算。這樣得到的種子具有較強的散列特性。

通過以上技術手段得到的種子產生的偽隨機數是具有較好

統計特性的,它不依賴於某一台機器,某一時刻,某一方法,

而是複雜多變、讓人捉摸不透難於重現的。

相關詞條

相關搜尋

熱門詞條

聯絡我們