計(jì)算機(jī)如何生成隨機(jī)數(shù)?
網(wǎng)友解答: 最早的隨機(jī)數(shù)生成與計(jì)算機(jī)的先驅(qū)馮諾依曼聯(lián)系到一起的。 隨機(jī)數(shù)可以分為兩種,一種為真隨機(jī)數(shù),一種為偽隨機(jī)數(shù)。真隨機(jī)數(shù)的生成過(guò)程是完全不可預(yù)測(cè)的,因此要生成一個(gè)真隨機(jī)數(shù),計(jì)算機(jī)需
最早的隨機(jī)數(shù)生成與計(jì)算機(jī)的先驅(qū)馮諾依曼聯(lián)系到一起的。 隨機(jī)數(shù)可以分為兩種,一種為真隨機(jī)數(shù),一種為偽隨機(jī)數(shù)。
真隨機(jī)數(shù)的生成過(guò)程是完全不可預(yù)測(cè)的,因此要生成一個(gè)真隨機(jī)數(shù),計(jì)算機(jī)需要檢測(cè)外部發(fā)生的某種物理現(xiàn)象。比如說(shuō),可以測(cè)量某個(gè)原子的放射性衰變。根據(jù)量子理論,原子衰變是隨機(jī)而不可測(cè)的,所以這就是宇宙中的“純粹”隨機(jī)性。
計(jì)算機(jī)生成真隨機(jī)就依賴(lài)于硬件設(shè)備。更具體一點(diǎn)的例子就是計(jì)算機(jī)可以根據(jù)當(dāng)前CPU的頻率以及溫度等來(lái)生成隨機(jī)數(shù),或者根據(jù)環(huán)境中的噪音或者采取你敲擊鍵盤(pán)的精確時(shí)間作為隨機(jī)數(shù)據(jù),這種隨機(jī)數(shù)的生成方式被稱(chēng)為硬件隨機(jī)數(shù)生成器。
而偽隨機(jī)數(shù)則是運(yùn)行程序產(chǎn)生的隨機(jī)數(shù)。計(jì)算機(jī)通過(guò)發(fā)送種子數(shù)值,運(yùn)用算法產(chǎn)生某個(gè)看起來(lái)像隨機(jī)數(shù)的數(shù)字。但是實(shí)際上這個(gè)數(shù)字是可以預(yù)測(cè)的。因?yàn)橛?jì)算機(jī)沒(méi)有從環(huán)境中收集到任何隨機(jī)信息。
常用的偽隨機(jī)數(shù)生成器有線性同余方法(LCG)。它是根據(jù)遞歸公式:
其中A、B、M都是生成器設(shè)定的常數(shù),mod為對(duì)M取余數(shù)。
給定種子數(shù)字X0即可由此產(chǎn)生線性同余的隨機(jī)數(shù)列。往往為了方便,X0取計(jì)算機(jī)的系統(tǒng)時(shí)間。因此對(duì)于線性同余的偽隨機(jī)數(shù)生成器,給定同一個(gè)初始值,那么產(chǎn)生的偽隨機(jī)數(shù)列也是相同的。由此生成的隨機(jī)數(shù)范圍為0到M-1。
因此在對(duì)隨機(jī)性要求不高的情況下,往往只需要生成偽隨機(jī)數(shù)即可,比如游戲中的抽獎(jiǎng),那么用的是真隨機(jī)數(shù)或偽隨機(jī)數(shù)并不重要;但是如果你的應(yīng)用正在加密,情況就不同了,因?yàn)槟悴幌M粽吣軌虿碌侥愕碾S機(jī)數(shù)。
網(wǎng)友解答:隨機(jī)數(shù)是專(zhuān)門(mén)的隨機(jī)試驗(yàn)的結(jié)果
計(jì)算機(jī)如何生成隨機(jī)數(shù),是指計(jì)算機(jī)編程語(yǔ)言生成隨機(jī)數(shù),我們利用計(jì)算機(jī)的編程語(yǔ)言的函數(shù)生成一個(gè)隨機(jī)數(shù),其實(shí)生成的是偽隨機(jī)數(shù)。電腦隨機(jī)數(shù)都是偽隨機(jī)數(shù),隨機(jī)數(shù)的生成算法有很多種,基于算法的隨機(jī)數(shù),意味著生成的數(shù)據(jù)是可重復(fù)的。
真正意義上的隨機(jī)數(shù)在某次產(chǎn)生過(guò)程中是按照實(shí)驗(yàn)過(guò)程中表現(xiàn)的分布概率隨機(jī)產(chǎn)生的,其結(jié)果是不可預(yù)測(cè)的,是不可見(jiàn)的。而計(jì)算機(jī)中的隨機(jī)函數(shù)是按照一定算法模擬產(chǎn)生的,其結(jié)果是確定的,是可見(jiàn)的。我們可以這樣認(rèn)為這個(gè)可預(yù)見(jiàn)的結(jié)果其出現(xiàn)的概率是100%。所以用計(jì)算機(jī)隨機(jī)函數(shù)所產(chǎn)生的“隨機(jī)數(shù)”并不隨機(jī),是偽隨機(jī)數(shù)。
隨機(jī)函數(shù)在這里以Python為例,生成隨機(jī)數(shù)據(jù)的樣例。在python中用于生成隨機(jī)數(shù)的模塊是random,在使用前需要import。
隨機(jī)產(chǎn)生整數(shù)
隨機(jī)產(chǎn)生小數(shù)
隨機(jī)偶數(shù)
以上是以Python舉的例子,希望能夠有所幫助。不過(guò),細(xì)想一下計(jì)算機(jī)是一種可確定,可預(yù)測(cè)的的設(shè)備,想通過(guò)一行一行的確定的代碼自身產(chǎn)生真隨機(jī),顯然有點(diǎn)力不從心。