版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們
當(dāng)今世界,從航天工程到信息管理,從人工智能到過程控制,各個領(lǐng)域都少不了計算機(jī)的參與。
但計算機(jī)也并不是萬能的,有很多事情是無法辦到的,甚至于一些看似十分簡單的事情,計算機(jī)也做不到,比如產(chǎn)生隨機(jī)數(shù)。計算機(jī)不能產(chǎn)生隨機(jī)數(shù)嗎?很多活動,比如公司年會搖獎,不都是采用計算機(jī)搖號的方式進(jìn)行的嗎?的確,計算機(jī)可以生成隨機(jī)數(shù),但計算機(jī)所產(chǎn)生的隨機(jī)數(shù)是要加上一個引號的,因為它并不是真正意義上的隨機(jī)數(shù),而是“偽隨機(jī)數(shù)”。
為什么計算機(jī)只能產(chǎn)生偽隨機(jī)數(shù)呢?因為電腦不會擲骰子。
擲骰子對于一個人來說是一件無比簡單的事情,但對于計算機(jī)來說卻是難于上青天,因為計算機(jī)的一切行為都必須要有一個特定的程序,產(chǎn)生隨機(jī)數(shù)也不例外。什么是隨機(jī)數(shù)?簡單來講就是一個數(shù)字的出現(xiàn)不遵循任何的規(guī)律,第一個數(shù)字的出現(xiàn)不能夠決定第二個數(shù)字,同樣的,第三個數(shù)字也與前兩個數(shù)字沒有任何關(guān)系,這對于計算機(jī)來說就是一件不可能的事情。計算機(jī)可以通過對算法的改進(jìn)而讓“偽隨機(jī)數(shù)”的產(chǎn)生過程變得更加復(fù)雜,但這仍然不能改變“偽隨機(jī)數(shù)”的本質(zhì)。
那么計算機(jī)到底是如何產(chǎn)生“偽隨機(jī)數(shù)”的呢?
最早的偽隨機(jī)數(shù)生成法是由計算機(jī)之父馮·諾伊曼研發(fā)的,它被稱為“平方取中法”,現(xiàn)在這種隨機(jī)數(shù)生成方法已經(jīng)被徹底廢棄了。所謂平方取中法,首先必須得選定一個種子數(shù)字,這個數(shù)字是事先設(shè)定的,可以是1234,也可以是5678,就以5678為例吧,第一步是先對種子數(shù)字進(jìn)行平方,5678乘以5678就等于32239684。
完成了第一步平方之后,就是第二步,取中。
所謂取中,就是取32239684的中間四個數(shù),也就是去掉前面的32和后面的84,中間剩下的四個數(shù)是2396,這就是第一個隨機(jī)數(shù)。第二個隨機(jī)數(shù)就是讓第一個隨機(jī)數(shù)重復(fù)平方取中的計算過程,也就是2396乘以2396等于05740816,中間的四個數(shù)字是7408,這就是第二個隨機(jī)數(shù)。由于平方取中法過于簡單,只要知道了種子數(shù)字,就能夠計算出之后所有的隨機(jī)數(shù),所以現(xiàn)在已經(jīng)不再使用了。
另一種相對簡單,但還在使用的隨機(jī)數(shù)生成方法被稱為“同余法”。
同余法首先要選定兩個定數(shù),比如第一個定數(shù)為444,第二個定數(shù)為1234?,F(xiàn)在還是要先有一個種子數(shù)字,還是以5678為例吧。第一步是用種子乘以第一個定數(shù),也就是5678乘以444等于2521032,接下來第二步就是用第一步的結(jié)果除以第二個定數(shù),也就是2521032除以1234,四舍五入等于2043,這就是第一個隨機(jī)數(shù)。第二個隨機(jī)數(shù)的產(chǎn)生就是用第一個隨機(jī)數(shù)重復(fù)上述步驟,2043乘以444,再除以1234,等于735,這就是第二個隨機(jī)數(shù)。
相比平方取中法來說,同余法就要復(fù)雜多了,不僅要知道種子數(shù)字,還得知道兩個定數(shù),才能夠計算出后面所出現(xiàn)的所有隨機(jī)數(shù)。
當(dāng)然,如果事先知道了所使用的是何種程序,再有足夠多的隨機(jī)數(shù)樣本,也可以計算出定數(shù)。不過同余法還可以進(jìn)行變形,比如在乘法之后再加入一個加法,再添加進(jìn)去第三個定數(shù),這樣就變成了“線性同余法”,也就更復(fù)雜了一些。無論是同余法還是平方取中法,都是比較簡單的隨機(jī)數(shù)生成方法,而現(xiàn)在我們主要使用的隨機(jī)數(shù)生成方法是要復(fù)雜得多的“梅森旋轉(zhuǎn)算法”,這種算法涉及到了比較復(fù)雜的計算過程,涉及到了矩陣和矢量的數(shù)學(xué)知識,按照這種方法生成的隨機(jī)數(shù)分布非常接近于真隨機(jī)數(shù),但其本質(zhì)上仍然是偽隨機(jī)數(shù),每個數(shù)之間都是存在邏輯關(guān)系的。
歡迎掃碼關(guān)注深i科普!
我們將定期推出
公益、免費(fèi)、優(yōu)惠的科普活動和科普好物!