你見過的最簡單的偽隨機演算法是什麼?

時間 2021-05-31 21:16:04

1樓:幼鷹me

利用機械結構,例如彩票搖號機,缺點:

生成速度慢

不能被計算機直接呼叫

無法重複(有時要用同一組隨機數測試兩套模型策略)預先生成隨機數,並且儲存到乙個外接裝置上。

例如蘭德公司(RAND)出版過一本書《百萬亂數表》

用確定的整數遞迴方程生成偽隨機數,優點:

只用儲存公式和種子可重複

2樓:白東傑

查 LCG 和 PCG 就有。其中 PCG 用處很多,在非密碼學強度的應用場景下很快樂(比如寫遊戲)。

#include

static

uint64_t

state

=0x4d595df4d0f33173

;// Or something seed-dependentstatic

uint64_t

const

multiplier

=6364136223846793005u;static

uint64_t

const

increment

=1442695040888963407u;// Or an arbitrary odd constantstatic

uint32_t

rotr32

(uint32_tx,

unsignedr)

uint32_t

pcg32

(void

)void

pcg32_init

(uint64_t

seed

)想用紙筆搞隨機數,這個簡單。你可以先列印一張隨機數表,然後再用紙筆模擬輪盤來決定選哪個數。

3樓:

線性同餘演算法是最簡單的偽隨機演算法了。

簡單到只要對上乙個值乘以乙個數加上乙個數再模乙個數就可以了。

即 像 C++11 標準庫的 裡就提供了這樣乙個最簡單的隨機數引擎。這個基本就是各大偽隨機庫里提供的能用的最簡單的隨機引擎了,而且也是有理論支撐的

線性同餘類的引擎裡有兩組常用的引數:

1) minstd_rand0 引擎:s 的型別取 32 位無符號整數,A 取 16807,C 取 0,M 取 2147483647

2) minstd_rand 引擎:s 的型別取 32 位無符號整數,A 取 48271,C 取 0,M 取 2147483647

用這兩個引擎已經能生成「肉眼看上去」比較好的隨機數了。

4樓:

朋友想用紙筆操作,那當然可以啦~

比如說,你在座標紙上,劃定乙個區域,x∈ [a, b], y∈ [c, d];在該區域裡,隨機且大量地投一些,小顆粒(比如芝麻,或者黃公尺),測量這些落點的座標(x, y),得到2個近似隨機的序列:

x[1], x[2], ... x[n];

y[1], y[2], ... y[n];

當n足夠大時,我們就可以近似認為,x[i]是[a, b]上的隨機數,y[i]是[c, d]上的隨機數。

如果是用計算機的話,那就不好說啦i_i。

5樓:三離五巽

不知道這樣算不算偽隨機演算法,可以去計算 的值,然後理論上得到的3.1415926...應該就是乙個偽隨機數列(或者是乙個真隨機數列),然後你就可以根據需要的隨機數的個數來對應著計算相應的 值的位數了

至於 值的計算,需要隨機數比較少的話直接查一下就好,如果比較多並且像你說的需要紙筆操作的話, 也有很多可以手算的公式,比如:

黎曼公式:

Chudnovsky公式:

取1項,就可以得到7個數字:3.141592...

取2項,可以得到16個數字:3.141592653589793...

演算法裡的(偽)隨機真的有用嗎?

那羅延 首先你要理解偽隨機數的偽到底是什麼意思。這個所謂的偽,是指這是乙個固定的串型序列,這個序列上每乙個值其實都是一開始就決定好了的。你可以理解為 給定演算法和種子 種子後面說 給定某個位置 i 的數x i,則位置 x j 值就被唯一確定了,i和j 其實可以不分先後。種子是乙個數,起到的作用是開啟...

如何評價乙個偽隨機數生成演算法的優劣?

Sisi H 本來是來這裡看看能不能幫我完成作業的,看了看發現我老師說得還挺全的。截老師的三張ppt 王建新 NIST SP800 22中規定了隨機數隨機性測試方法,共16個測試項,必選項15個,是國際上比較權威的測試方法,國密局的隨機數測試規範也參考了這個標準。按照此標準測試有開源的測試工具 st...

你見過喝酒時最簡單的下酒菜是什麼?

胖噠二世 那年在外面,手上就半包瓜子 先用瓜子就著酒,瓜子也沒了,就開始嚼瓜子皮,嚼出鹹味後吐掉,就這麼喝了一斤多酒 當時也不知道為什麼,就是想喝 迷糊 1 我爺爺。下農田幹活歸來,到村里小社打一端子60度白酒,倒進碗裡,咕咚咚灌進去。賒賬,然後悠哉悠哉回家吃飯。此事發生在六十年前。父親說酒量可以遺...