定義
在計算機、通信系統,密碼學中,在處理有些問題,我們無法做到真正的隨機,引入某些物理噪聲的方法來實現無周期的隨機,一般稱為偽隨機。偽隨機方式是指利用偽隨機解決問題的方式。例如在計算機中利用偽隨機方式去挑選整數,它能消除線性再散列中所產生的堆聚問題。
方式
從計算機層面來分析,偽隨機方式可以分為軟體偽隨機方式和硬體偽隨機方式
軟體偽隨機方式
軟體偽隨機方式就是按照某種算法來實現偽隨機來解決問題。常見的算法如下:
Blum-Micali算法
互補乘法
逆向同餘發生器
ISAAC(密碼)
滯後斐波納契發電機
線性同餘發生器 - 具有歷史意義
線性反饋移位暫存器
最大周期性倒數
Mersenne Twister
中間方法
MIXMAX發生器
乘以攜帶
Naor-Reingold偽隨機函式
Park-Miller隨機數發生器
PCG
RC4 PRGA
硬體偽隨機方式就是硬體實現偽隨機來解決問題。以下是生產硬體隨機數生成器的公司列表。
Araneus Alea
ComScire
熵鍵
Fox-IT FoxRandomCard
ID Quantique
英特爾810/815/840 / 845G晶片組
Intel RdRand指令
LETech
QuintessenceLabs
TectroLabs
RNG98
威盛掛鎖發動機
BitBabbler
套用
在Java利用偽隨機方式模擬福利彩票。
1)問題分析
福利彩票遊戲中,中獎號碼由 7 個基本號碼組成,使用指定的專用搖獎器搖出。搖獎器內放置標有 01-35 的 35 個號碼球,搖獎時依次搖出 7 個號碼球,然後,依據設定相應的兌獎規則,(如 7 中 7 、 7 中 6 、 7 中 5 )等,進行兌獎。
2) 類定義
根據問題分析, 為該應用程式創建球類 Bull 、 遊戲類 Game 與測試類TestGame 。
同樣, 為了能在遊戲應用程式中使用隨機數, 需要導入 java.util 包的Random 類。 Bull 類定義球號碼 point 以及顯示球 displayBull 方法。 其中,displayBull 用於顯示球號碼對應的圖片。 Game 類中 playGame 方法用於隨機從 35 個球中“搖出” 7 個球,並需要考慮球號不能重複; ruleGame 方法用於設定兌獎規則。
3) 類實現
Game 類中 playGame 方法的關鍵代碼如下:
public void playGame()
{int i=0;
int index =0;
for(i=0;i<NumBull;i++)
{ranarray[i]=i+1;
}
for(i=0;i<NumRoll;i++)
{index = rand.nextInt(NumBull);
ran[i].setPoint( ranarray[index] );
ranarray[index]=ranarray[--NumBull];
}// 產生不重複的球號 }
其中,變數定義如下:
int NumBull = 35; // 定義總球數
int NumRoll = 7; // 定義中獎球數
Bull[] ran = new Bull[NumRoll]; // 定義中獎的球
private int[] ranarray = new int[NumBull]; // 總球的數組
public Random rand = new Random(); // 初始化隨機數