2011-08-03 57 views
1

我想知道隨機數函數是如何工作的。我的意思是使用服務器時間或使用其他方法生成隨機數字?他們真的是隨機數還是傾向於某種模式?比方說python:隨機數的生成過程如何?

import random 
number = random.randint(1,10) 
+2

可能的重複:http://stackoverflow.com/questions/1716308/how-does-a-random-number-generator-work – BlackJack

+0

您是否閱讀過http://en.wikipedia.org/wiki/Random_number_generation? – lhf

+0

大量的重複在這裏;我不想只是複製/粘貼[我剛纔的答覆(http://stackoverflow.com/questions/6593636/how-does-software-generate-random-numbers-and-how-do-these-compare -with人-GE/6593689#6593689)...的 – Joey

回答

1

隨機數發生器在不同平臺上有所不同(當然),但一般來說,它們只是「僞隨機」數。也就是說,「隨機」數字是由一種算法生成的,該算法被選擇爲提供合理均勻的數字分佈,並且具有類似於期望的真實隨機性的統計分佈。這些隨機數發生器通常採用「種子」值,該值用於啓動「序列」;通常,相同的「種子」值將返回相同的「隨機」數字(表明它顯然不是「隨機」)。

然而,通過使用快速變化的數字(例如來自機器的時間(以刻度))或其他變化的種子值來播種「隨機」數字函數,可以獲得合理的僞隨機結果。然而,這並沒有改變這個事實,即這些「隨機」數字並不是真正的隨機數;但是,對於大多數目的而言,它們可以被認爲是「足夠好」的。

作爲附錄的一個註釋:有實際的隨機數發生器是基於硬件的,可以購買和使用,實際上是隨機的。這些通常取決於變化量的測量,例如由檢測器接收的光子的數量,並且偏向於使得它們返回真正的隨機值。但是,這些比較少見。

+0

好的。謝謝。儘管所有的答案都是有用的。 – user366121

1

它的僞隨機數生成器,精確的工作依賴於實現,但我以爲這是某種C實現Mersen捻的:http://docs.python.org/library/random.html(第三段)

哦,和詳細的功能randint在基地random建功能。隨機返回範圍(0,1]中的實數,並且randint(a,b)返回範圍[a,b]中的整數並且可以實現爲lambda a,b: int(a + random.random()*(b+1-a))

1

是的,時間通常用於種子隨機數發生器,當它不重要時例如,如果您在幻燈片放映中顯示隨機圖像,那麼時間是一個很好的使用價值,以便下次運行幻燈片時圖像序列不一樣。 ,因爲大家都知道時間的準確性很高,這對於加密的目的來說是一個可怕的種子,並且它被證明容易受到攻擊,現在安全的隨機數是通過設備收集的熵產生的像鼠標移動和麥克風輸入。 「無頭」網絡設備使用其網絡流量特徵作爲或多或少不可預知的熵源。對於真正特殊的應用,有時會使用硬件隨機源,如攝像機和蓋革計數器。在unix系統上,你可以從/ dev/random獲得安全的隨機數,並且如果沒有「足夠的熵」(通過計數器估計)來保證安全的隨機性,它將會阻塞。

1

根據你的背景你可能會喜歡Numerical Recipes。我是一位物理學家 ,我非常喜歡這本書(儘管數學家偶爾會寫一些關於它的壞東西,它會給很多主題提供很好的概述)。

有關隨機數的一個很好的介紹,請參閱第7章。