複製鏈接
請複製以下鏈接發送給好友

偽隨機方式

鎖定
在計算機、通信系統,密碼學中,在處理有些問題時,我們無法做到真正的隨機,引入某些物理噪聲的方法來實現無週期的隨機,一般稱為偽隨機。偽隨機方式是指利用偽隨機解決問題的方式。例如在計算機中利用偽隨機方式去挑選整數,它能消除線性再散列中所產生的堆聚問題。
中文名
偽隨機方式
外文名
pseudo-random fashion
學    科
計算機、通信、密碼學
定    義
模仿真隨機
方    法
引入某些物理噪聲的方法
應    用
密碼傳輸、數據堆聚問題等

目錄

偽隨機方式定義

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

偽隨機方式方式

從計算機層面來分析,偽隨機方式可以分為軟件偽隨機方式和硬件偽隨機方式
軟件偽隨機方式
軟件偽隨機方式就是按照某種算法來實現偽隨機來解決問題。常見的算法如下:
Blum-Micali算法
互補乘法
逆向同餘發生器
ISAAC(密碼)
滯後斐波納契發電機
線性同餘發生器 - 具有歷史意義
最大週期性倒數
Mersenne Twister
中間方法
MIXMAX發生器
乘以攜帶
Naor-Reingold偽隨機函數
PCG
RC4 PRGA
硬件偽隨機方式就是硬件實現偽隨機來解決問題。以下是生產硬件隨機數生成器的公司列表。
Araneus Alea
ComScire [1] 
熵鍵
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(); // 初始化隨機數 [2] 
參考資料