偽隨機方式

偽隨機方式

在計算機、通信系統,密碼學中,在處理有些問題時,我們無法做到真正的隨機,引入某些物理噪聲的方法來實現無周期的隨機,一般稱為偽隨機。偽隨機方式是指利用偽隨機解決問題的方式。例如在計算機中利用偽隨機方式去挑選整數,它能消除線性再散列中所產生的堆聚問題。

定義

在計算機、通信系統,密碼學中,在處理有些問題,我們無法做到真正的隨機,引入某些物理噪聲的方法來實現無周期的隨機,一般稱為偽隨機。偽隨機方式是指利用偽隨機解決問題的方式。例如在計算機中利用偽隨機方式去挑選整數,它能消除線性再散列中所產生的堆聚問題。

方式

從計算機層面來分析,偽隨機方式可以分為軟體偽隨機方式和硬體偽隨機方式

軟體偽隨機方式

軟體偽隨機方式就是按照某種算法來實現偽隨機來解決問題。常見的算法如下:

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(); // 初始化隨機數

相關詞條

熱門詞條

聯絡我們