自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

討厭的人類居然讓我們擲骰子,這實(shí)在太難了!

企業(yè)動(dòng)態(tài)
周末的深夜,Linux老大發(fā)布了緊急會(huì)議通知,召集CPU、內(nèi)存、硬盤等所有硬件,以及git、 vim、瀏覽器、c、 Java等所有軟件參會(huì)。

 周末的深夜,Linux老大發(fā)布了緊急會(huì)議通知,召集CPU、內(nèi)存、硬盤等所有硬件,以及git、 vim、瀏覽器、c、 Java等所有軟件參會(huì)。

[[312965]]

老大對(duì)深夜打擾大家深表歉意,表示春節(jié)快來(lái)了,到時(shí)候一定讓大家好好休息,然后就進(jìn)入中心議題:人類要求我們學(xué)會(huì)“擲骰子”,該怎么辦?

內(nèi)存表示不解:為啥?想讓我們賭錢玩嗎?我們這兒可沒(méi)有骰子!

Linux老大:其實(shí)不是真正的擲骰子,是生成隨機(jī)數(shù),隨機(jī)數(shù)在我們計(jì)算機(jī)里用途極為廣泛,生成密鑰,進(jìn)行通信,生成鹽(salt)...... 不可能指望人去手工操作。

vim笑道:生成隨機(jī)數(shù)? 這太簡(jiǎn)單了,讓新手退出我vim就行了。

Linux老大:為啥?

vim: 哈哈,因?yàn)樾率植恢涝趺床拍芡顺鰒im,就會(huì)瞎胡亂按一通, 非常隨機(jī),這不就形成隨機(jī)數(shù)了嗎?!

CPU阿甘:這笑話夠冷的!

Linux老大:口頭警告vim一次,嚴(yán)肅點(diǎn)兒, 生成隨機(jī)數(shù)是非常重要的事情,人類要求:

1. 要雜亂無(wú)章

2. 不能預(yù)測(cè),不能根據(jù)已經(jīng)生成的隨機(jī)數(shù),推測(cè)出下一個(gè)隨機(jī)數(shù)是啥

3. 不能重現(xiàn), 無(wú)法重現(xiàn)和某一隨機(jī)數(shù)列完全相同的數(shù)列

聽(tīng)到此處,大家都吸了一口冷氣,這要求夠高的!人類通過(guò)擲骰子可以達(dá)到這個(gè)要求,但是計(jì)算機(jī)里都是確定的算法和程序,這該怎么辦?

C老頭兒說(shuō):我提一個(gè)方案,我聽(tīng)說(shuō)人類有個(gè)算法,叫做什么線性同余算法,似乎可以生成隨機(jī)數(shù)。

C老頭兒寫下了一個(gè)公式:

 

內(nèi)存想起和CPU阿甘折騰過(guò)的遞歸函數(shù)調(diào)用,說(shuō)到:“看到遞歸我就頭暈。”

C老頭說(shuō):這個(gè)算法很簡(jiǎn)單,A, C, M 都是精心挑選的整數(shù),使用者在生成隨機(jī)數(shù)之前,先選一個(gè)種子(seed),比如說(shuō)用當(dāng)前的時(shí)間戳當(dāng)作種子,我們用簡(jiǎn)單的數(shù)字做個(gè)實(shí)驗(yàn), 讓A = 11 , C =5, M = 13, seed = 15

 

“看看,是不是挺隨機(jī)的!” C老頭兒挺得意。

Java 說(shuō):“這個(gè)算法很簡(jiǎn)單嘛,效果也不錯(cuò),我也實(shí)現(xiàn)一下,放到我的java.util.Random當(dāng)中吧。”

C老頭說(shuō):“我就放到我的srand函數(shù)和rand函數(shù)里。srand用來(lái)設(shè)定‘種子’,rand用來(lái)獲取下一個(gè)隨機(jī)數(shù)。”

  1. srand((unsigned) time(&t));   
  2. // 輸出5個(gè)隨機(jī)數(shù) 
  3. for(int i=1 ;i<=5; i++){ 
  4.     printf("%d\n", rand()); 

Java說(shuō):“看看,還是面向?qū)ο蠛冒?,我的Random類封裝了內(nèi)部狀態(tài),用戶只需要在創(chuàng)建Random對(duì)象的時(shí)候把種子傳進(jìn)去(不傳也行,我自己默認(rèn)給它設(shè)置一個(gè)),然后就nextInt()方法就可以了。多簡(jiǎn)單!”

  1. Random r = new Random(); 
  2. for(int i=1; i<=5; i++){ 
  3.     System.out.println(r.nextInt()); 

C老頭兒正要反擊自以為是的Java, CPU阿甘又發(fā)言了:“不對(duì)啊,你這個(gè)隨機(jī)數(shù)不符合我們老大的要求啊,這不是真正的隨機(jī)數(shù),這是偽隨機(jī)數(shù)!”

C老頭兒馬上把注意力轉(zhuǎn)移到阿甘身上:“憑什么說(shuō)這是偽隨機(jī)數(shù)?”

CPU阿甘說(shuō):“老大說(shuō)了,要不可預(yù)測(cè),但是你這公式,我如果知道了上一個(gè)隨機(jī)數(shù),下一個(gè)隨機(jī)數(shù)我自己代入那個(gè)公式就可以計(jì)算出來(lái)了,在我這里,一毫秒都用不了,完全可以預(yù)測(cè)。”

阿甘此言不虛,他的速度是整個(gè)計(jì)算機(jī)系統(tǒng)最快的。

"還有,你居然用當(dāng)前時(shí)間做種子,那我也用同樣的時(shí)間做種子,豈不是可以生成和你一模一樣的隨機(jī)數(shù)隊(duì)列?完全可以重現(xiàn)啊。”

C老頭兒連續(xù)挨了兩記悶棍,嘴里嘟囔著,但也說(shuō)不出話來(lái)了。

Linux老大趕緊和稀泥:“雖然是偽隨機(jī)數(shù),但是這個(gè)算法非常簡(jiǎn)單,對(duì)于那些對(duì)安全要求不高的場(chǎng)合,比如玩游戲的時(shí)候,還是非常有用的。我們?cè)傧胂耄趺瓷烧嬲碾S機(jī)數(shù)吧!”

C老頭兒說(shuō)到:要不這樣,我們可以使用Hash函數(shù)。

  • R1 = hash(seed)
  • seed = seed + 1
  • R2 = hash(seed)
  • seed = seed + 1
  • R3 = hash(seed)
  • seed = seed + 1
  • R4 = hash(seed)
  • ......

CPU阿甘說(shuō):“這個(gè)方法還行,在不知道種子(seed)的情況下,你給我一個(gè)隨機(jī)數(shù),我是無(wú)法預(yù)測(cè)下一個(gè)的,因?yàn)殡S機(jī)數(shù)是hash函數(shù)生成的,是個(gè)單向的過(guò)程。但是,如果我知道了種子,那就可以生成和你一模一樣的隨機(jī)數(shù)列,所以不滿足‘不可重現(xiàn)’的性質(zhì)。”

看來(lái)生成真正的隨機(jī)數(shù)太難了,大家都沉默了。

過(guò)了良久, vim突然說(shuō)到:你們以為我說(shuō)的是笑話,但是思路卻是可以借鑒啊?大家想想

用戶敲擊鍵盤的速度節(jié)奏是不是隨機(jī)的?

用戶的鼠標(biāo)移動(dòng)是不是隨機(jī)的?

網(wǎng)卡每秒發(fā)送的數(shù)據(jù)量是不是隨機(jī)的?

硬盤每秒寫入的數(shù)據(jù)是不是隨機(jī)的?

如果我們把這些隨機(jī)的東西給綜合起來(lái)......

Linux老大非常高興:“沒(méi)錯(cuò),我們可以把它們認(rèn)為是機(jī)器運(yùn)行的環(huán)境噪音,我把它們收集起來(lái)放到一個(gè)池子里......”

CPU阿甘馬上接口:“然后,可以用個(gè)Hash算法對(duì)這個(gè)池子中的內(nèi)容做個(gè)消息摘要,結(jié)果就是真隨機(jī)數(shù)了!雜亂無(wú)章,無(wú)法預(yù)測(cè),無(wú)法重現(xiàn)。”

vim感覺(jué)有點(diǎn)不爽,這倆人也太會(huì)搶功勞了。

C老頭兒也頻頻點(diǎn)頭:“這個(gè)辦法妙啊,我可以修改一下我的rand函數(shù),來(lái)獲得這個(gè)值......”

Linux老大:“別別,你的偽隨機(jī)數(shù)還是要保留,上周碼農(nóng)翻身公眾號(hào)剛剛說(shuō)過(guò),一切皆文件,我可以生成一個(gè)特殊的文件,就叫/dev/random吧,這樣程序員就可以使用最常用的open ,read等方法來(lái)調(diào)用了!”

Linux老大說(shuō)完,又感慨了一句:“終于,我們學(xué)會(huì)擲骰子了!”

一天以后。

CPU阿甘興沖沖地跑來(lái)找Linux老大:老大,昨天忘了一件事,我的硬件就支持真正的隨機(jī)數(shù)生成啊,我可以利用電阻的熱噪聲來(lái)生成的,是真隨機(jī)數(shù),用RdRand指令就能獲得。

Linux老大:這個(gè)硬件是你出生的時(shí)候就被植入了,是個(gè)黑盒子,如果NSA在里邊安裝了后門,怎么辦?

CPU阿甘看著自己的身體,愣住了......

【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)】

 

戳這里,看該作者更多好文

 

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專欄
相關(guān)推薦

2020-11-05 07:52:40

Chrome

2021-01-03 16:42:52

Windows 10Windows操作系統(tǒng)

2022-04-05 11:29:40

Linux安裝操作系統(tǒng)

2022-04-27 10:14:43

進(jìn)程調(diào)度LinuxCPU

2020-04-13 07:30:18

Windows 10Windows操作系統(tǒng)

2022-04-15 19:48:49

上海疫情居家辦公

2020-11-16 07:28:53

驗(yàn)證碼

2022-03-16 07:58:02

OOMdubbo內(nèi)存

2023-10-20 09:04:08

JavaScript語(yǔ)言Java

2020-03-26 15:10:34

蘋果iPhone手機(jī)

2018-11-02 15:03:07

技術(shù)管理技術(shù)管理者

2020-10-10 11:07:38

Java開(kāi)發(fā)代碼

2021-12-08 23:42:37

iPhone 13手機(jī)停產(chǎn)

2021-03-28 20:44:34

Kafka中間件MQ

2024-11-22 14:10:00

AI智能體

2021-08-31 09:39:06

Python數(shù)據(jù)工具

2014-11-12 10:10:09

國(guó)產(chǎn)操作系統(tǒng)

2020-10-12 07:30:31

Chrome下載

2020-08-19 09:03:57

微信微信支付移動(dòng)應(yīng)用

2021-09-18 07:19:54

400G5GIP網(wǎng)絡(luò)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)