03.03 是否存在一種算法可以隨機生成一個自然數?

顏煥原


在現在的計算機系統中,是無法產生「真」隨機數的。這是因為,當前的計算機的各種算法,都是確定性的——輸入是某某,則輸出必然是p(某某),是一一對應的關係。

很多人可能會說:不對!我每次打開XX遊戲,裡面的內容都有差異。其實這種看法是片面的。不同的時候打開程序,本身就是不同的「輸入」。因為很多隨機算法,都會把系統時間當作隨機數種子,作為一個初始條件,然後再輸出很多看似隨機的序列。

既然「算法」本身,特別是CPU是確定的,那如何去產生真隨機數呢?有的讀者可能會想到:直接加入一個元件,專門產生真隨機數不就可以了嗎?確實,很多程序確實就會用硬件來產生隨機數。比如Linux系統中,就會收集計算機的溫度、電壓,來當作隨機數種子。

為什麼計算機的溫度、電壓,就可以用來產生真隨機數呢?這是因為,溫度、電壓的浮動,背後是複雜的物理過程。而物理過程,特別是微觀層面的物理,包含了非常大的隨機成分。比如說溫度,有的漲落可能完全就是隨機的。更不用說,這些物理現象的背後,實際都包含了量子過程,而很多量子過程,是全然隨機的。進而,使用這些數據的隨機數生成器,可以看作是真隨機的。

而要求更高的,則會使用專門的量子隨機數生成器。比如說,可以使用半反射鏡,以及單光子,來直接生成隨機二進制序列。


章彥博


算法生成的數都是偽隨機數的,這點從算法的定義就可以看出,之所以叫隨機數是因為隨機數的種子是時間戳。時間戳不一樣,通過算法生成的數字自然就不一樣了。如果你說的是這種偽隨機數,是有很多算法可以生成的,就看你想用編程語言。


分享到:


相關文章: