-
1 # Bean毛豆
-
2 # 北航秦曾昌
最早的隨機數生成與計算機的先驅馮諾依曼聯絡到一起的。 隨機數可以分為兩種,一種為真隨機數,一種為偽隨機數。
真隨機數的生成過程是完全不可預測的,因此要生成一個真隨機數,計算機需要檢測外部發生的某種物理現象。比如說,可以測量某個原子的放射性衰變。根據量子理論,原子衰變是隨機而不可測的,所以這就是宇宙中的“純粹”隨機性。
計算機生成真隨機就依賴於硬體裝置。更具體一點的例子就是計算機可以根據當前CPU的頻率以及溫度等來生成隨機數,或者根據環境中的噪音或者採取你敲擊鍵盤的精確時間作為隨機資料,這種隨機數的生成方式被稱為硬體隨機數生成器。
而偽隨機數則是執行程式產生的隨機數。計算機透過傳送種子數值,運用演算法產生某個看起來像隨機數的數字。但是實際上這個數字是可以預測的。因為計算機沒有從環境中收集到任何隨機資訊。
常用的偽隨機數生成器有線性同餘方法(LCG)。它是根據遞迴公式:
其中A、B、M都是生成器設定的常數,mod為對M取餘數。
給定種子數字X0即可由此產生線性同餘的隨機數列。往往為了方便,X0取計算機的系統時間。因此對於線性同餘的偽隨機數生成器,給定同一個初始值,那麼產生的偽隨機數列也是相同的。由此生成的隨機數範圍為0到M-1。
因此在對隨機性要求不高的情況下,往往只需要生成偽隨機數即可,比如遊戲中的抽獎,那麼用的是真隨機數或偽隨機數並不重要;但是如果你的應用正在加密,情況就不同了,因為你不希望攻擊者能夠猜到你的隨機數。
-
3 # 木星小太陽
計算機生成的是偽隨機數,利用演算法生成。真正的隨機數是不可能產生的,用任何方法產生的隨機數都是偽隨機數。
真正的隨機數是不可預測的數,不僅下一個數不可預測,整體也沒有任何規律可言。有兩個因素決定了真正的隨機數不可產生。
第一是範圍。獲得一個隨機數,假如是145,這沒有任何問題。獲得一個0到100的隨機數,假如是145,這就超出範圍,由此可見隨機數和 0到100之間的隨機數是兩個概念,限定範圍的隨機數都是隨機數的子集而不是隨機數本身。
第二是整體預測。很多人把拋硬幣,轉輪盤,原子衰變等等機率事件產生的數當做真正的隨機數,這也是錯誤的。這樣得到的隨機數在整體上來看機率是固定的,可以總結出內在規律,既然有規律可循就不能稱為真正的隨機數。
因為隨機數不能有任何規律,而方法必然包含規則,所以用任何方法都不可能產生隨機數。隨機數的概念在科學上不能做任何讓步,雖然存在但是無法用任何方式產生。但在現實中我們可以讓步。
我們實際用到的隨機數是一種變形,是下一個不可預測準確值的數,比如骰子,可以預測下一個數在1到6之間,機率也差不多,但是不知道準確值。還有計算機的偽隨機數,只要計算機的使用者不能預測下一個數就能稱為隨機數。在現實中,這些“隨機數”就夠了。
為什麼隨機數在現實中門檻這麼低?真相比隨機數的現實更扎心:真正的隨機數從來都不需要,需要的其實是賭博和類似賭博的不可預測性。
-
4 # 2019年中國最帥的男生
計算機生成隨機數是有用的,樓下說一堆廢話裝什麼逼?現在是討論計算機範圍的知識,當聲明瞭型別後,就自動定下範圍了,這才有實用意義。討論沒有範圍產生隨機數?甩骰子的結果只有六個,一樣可以稱為隨機!隨機和有沒有範圍根本就沒關係,不懂就別裝逼了。
-
5 # 霹靂火76228767
很多數學擬合方法的前提需求都是先生成隨機數,這裡舉一個用python寫的娛樂用的例項,以說明python生成隨機數的方法。
這圖是筆者學習python時完成的印象派畫作――《未來》。
這實際就是一個無聊的數學遊戲,當你把x和y同時取1-1000範圍內100個隨機數,然後做成折線圖,就有了這樣一系列印象派大師的畫作了。這才畫了一張。實際上,每執行一次,結果都會不一樣。要畫多少張不一樣的結果,關鍵看你的電腦累不累。
原始碼很簡單,幾句話,你就可以成為超現實主義印象派大師了。
import numpy as np
import pylab as pl
import random
x = random.sample([i for i in range(1000)],100)
y = random.sample([i for i in range(1000)],100)
pl.plot(x, y)
pl.show()
如果將這個畫作塗上夢幻的色彩會更理想。不怪python號稱是碼農大師聖誕節的無聊之作,的確可以解悶。而且,它還會帶你走進數學世界,開始古人一樣的冥想。冥想並不深奧,也就是隨便想,不著邊際的想。
有人和筆者有一樣的愛好,也可以用學數學專業通常使用的MATLAB來完成這個簡單的印象派大師的畫作。
這是x,y同時取隨機數情況,如果x是序列數,y是隨機數會怎麼樣呢?喜歡者自己試驗一下。
這是本人尚未發表的新書中的一個小章節,先分享了。
回覆列表
隨機數是專門的隨機試驗的結果
計算機如何生成隨機數,是指計算機程式語言生成隨機數,我們利用計算機的程式語言的函式生成一個隨機數,其實生成的是偽隨機數。電腦隨機數都是偽隨機數,隨機數的生成演算法有很多種,基於演算法的隨機數,意味著生成的資料是可重複的。
真正意義上的隨機數在某次產生過程中是按照實驗過程中表現的分佈機率隨機產生的,其結果是不可預測的,是不可見的。而計算機中的隨機函式是按照一定演算法模擬產生的,其結果是確定的,是可見的。我們可以這樣認為這個可預見的結果其出現的機率是100%。所以用計算機隨機函式所產生的“隨機數”並不隨機,是偽隨機數。
隨機函式在這裡以Python為例,生成隨機資料的樣例。在python中用於生成隨機數的模組是random,在使用前需要import。
隨機產生整數
隨機產生小數
隨機偶數