您現在的位置:首頁 > 科技 > 正文

有什么事是計算機做不到的?產生真隨機數,電腦不會擲骰子-焦點熱文

時間:2023-02-13 10:40:18    來源:科普中國網    

當今世界,從航天工程到信息管理,從人工智能到過程控制,各個領域都少不了計算機的參與。


(資料圖)

但計算機也并不是萬能的,有很多事情是無法辦到的,甚至于一些看似十分簡單的事情,計算機也做不到,比如產生隨機數。計算機不能產生隨機數嗎?很多活動,比如公司年會搖獎,不都是采用計算機搖號的方式進行的嗎?的確,計算機可以生成隨機數,但計算機所產生的隨機數是要加上一個引號的,因為它并不是真正意義上的隨機數,而是“偽隨機數”。

為什么計算機只能產生偽隨機數呢?因為電腦不會擲骰子。

擲骰子對于一個人來說是一件無比簡單的事情,但對于計算機來說卻是難于上青天,因為計算機的一切行為都必須要有一個特定的程序,產生隨機數也不例外。什么是隨機數?簡單來講就是一個數字的出現不遵循任何的規律,第一個數字的出現不能夠決定第二個數字,同樣的,第三個數字也與前兩個數字沒有任何關系,這對于計算機來說就是一件不可能的事情。計算機可以通過對算法的改進而讓“偽隨機數”的產生過程變得更加復雜,但這仍然不能改變“偽隨機數”的本質。

那么計算機到底是如何產生“偽隨機數”的呢?

最早的偽隨機數生成法是由計算機之父馮·諾伊曼研發的,它被稱為“平方取中法”,現在這種隨機數生成方法已經被徹底廢棄了。所謂平方取中法,首先必須得選定一個種子數字,這個數字是事先設定的,可以是1234,也可以是5678,就以5678為例吧,第一步是先對種子數字進行平方,5678乘以5678就等于32239684。

完成了第一步平方之后,就是第二步,取中。

所謂取中,就是取32239684的中間四個數,也就是去掉前面的32和后面的84,中間剩下的四個數是2396,這就是第一個隨機數。第二個隨機數就是讓第一個隨機數重復平方取中的計算過程,也就是2396乘以2396等于05740816,中間的四個數字是7408,這就是第二個隨機數。由于平方取中法過于簡單,只要知道了種子數字,就能夠計算出之后所有的隨機數,所以現在已經不再使用了。

另一種相對簡單,但還在使用的隨機數生成方法被稱為“同余法”。

同余法首先要選定兩個定數,比如第一個定數為444,第二個定數為1234?,F在還是要先有一個種子數字,還是以5678為例吧。第一步是用種子乘以第一個定數,也就是5678乘以444等于2521032,接下來第二步就是用第一步的結果除以第二個定數,也就是2521032除以1234,四舍五入等于2043,這就是第一個隨機數。第二個隨機數的產生就是用第一個隨機數重復上述步驟,2043乘以444,再除以1234,等于735,這就是第二個隨機數。

相比平方取中法來說,同余法就要復雜多了,不僅要知道種子數字,還得知道兩個定數,才能夠計算出后面所出現的所有隨機數。

當然,如果事先知道了所使用的是何種程序,再有足夠多的隨機數樣本,也可以計算出定數。不過同余法還可以進行變形,比如在乘法之后再加入一個加法,再添加進去第三個定數,這樣就變成了“線性同余法”,也就更復雜了一些。無論是同余法還是平方取中法,都是比較簡單的隨機數生成方法,而現在我們主要使用的隨機數生成方法是要復雜得多的“梅森旋轉算法”,這種算法涉及到了比較復雜的計算過程,涉及到了矩陣和矢量的數學知識,按照這種方法生成的隨機數分布非常接近于真隨機數,但其本質上仍然是偽隨機數,每個數之間都是存在邏輯關系的。

更多內容請關注公眾號:sunmonarch

標簽: 偽隨機數 比較復雜

相關新聞

凡本網注明“XXX(非現代青年網)提供”的作品,均轉載自其它媒體,轉載目的在于傳遞更多信息,并不代表本網贊同其觀點和其真實性負責。

特別關注

熱文推薦

焦點資訊