如何用人腦產生一個某範圍內隨機整數?
隨機很容易,均勻很難。
進入神經質狀態,找節奏。
開始!動次打次,動次打次。
yes,yes,no,yes,yes, yes, no,no,yes no, yes, yes, no, no, no yes,.
然後轉化為二進位
1101110010110001
再轉化為十進位
嚴謹一點
其實可以在抽風的腦子中不停快速問自己問題而導出來,例如,吃菠蘿嗎?no。
噓噓嗎?yes
大象跑得過螞蟻嗎?yes
想要雞雞打結嗎?no
上司咪咪大嗎?yes
花生比土豆性感么?no
抓一小撮兒頭髮
然後數頭髮個數
模2求餘數
即可得到隨機比特
我一直選的一個方法是
1)確定要的數字的範圍
2)自己試一下隨便想這個範圍內的數字,記住直到第n個的時候就記不得前三個
3)想一個隨機的大於n的數字m
4)開始隨便想目標範圍內的數字,試著保證無序且不重複,直到第m個,使用這個數字
以後可以記住這個n,遇到類似的數字範圍就用它。
實驗驗證在有的人身上這個方法存在系統性的非隨機性或偽隨機性。我個人以為是這樣的人選的m太大或者太小。在多數人身上這個方法獲得了很好的相對平均分布的隨機數。
缺點是耗時長。
以及,本方法只保證產生隨機分布的符合範圍的隨機數,但並不保證該範圍內每個數字都有一樣的概率出現,也就是說對於有的人來說有些數字會被有意無意跳過的。首先,找一個日本人
然後在他腦袋頂放一枚硬幣
對他說:哭你七娃~
重複1w遍
【多圖預警】
【高能預警】
我並不知道題主為什麼需要用人腦去生成隨機數,也許是無道具玩《龍與地下城》桌游的需要?不管如何,有了買賣,就有殺害,我們來試圖解決這個需求。
真·隨機數是很難產生的,即使是採用自然界的閃電、宇宙射線、放射性衰變來協助產生隨機數,其實也會有內在的規律,實現過程很容易遭到人工干擾。好在我們還不需要那麼真的隨機數,我們生成隨機數的目的往往是:不可預測和形式公平,這樣的話偽·隨機數就可以了。
所以我們來討論下如何用大腦產生無法預測的偽·隨機數。你會說,偽·隨機數那還不簡單,我腦子裡隨便蹦一個出來不就是,同學,好多著名的加密演算法實現,就是這樣被輕易破解的,聽我細細道來。
為了確保不可預測以及相對公平,一個偽·隨機數的生成至少要保證以下五步。
第一步,關閉五感:偽·隨機數的最大挑戰是你以為你想出來的是隨機數,但這很可能是別人灌輸給你的信息所導致,於是完全落入了圈套。隨機數不隨機,那就坑爹了不是?
《盜夢空間》里亞瑟對齋藤說:我說不要去想大象,你會想到什麼?- 大象。
我說不要去想你的銀行卡密碼……來,告訴我你想到了什麼?
因此關閉五感是防止其他人控制你的思想從而影響隨機數的第一步,佛曰:眼耳鼻舌觸為因,如幻變化見眾相……關關關,必須關!
怎麼關閉五感呢?那必須要用到以下利器:
(我知道眼罩很逗,誰讓我是吃貨)
眼罩、耳塞、鼻夾、牙刷……這不才四個?觸覺嘛,仿效東晉名士裸奔就好。
耳塞阻止了「不要想大象」的擾亂,眼罩預防了看到門牌號碼或者銀行卡,鼻夾可以聞不到樓上臭豆腐的通感攻擊,牙刷幹嘛的?昨晚吃的韭菜不刷乾淨,你腦子裡會一直都是999999吧?
裝備齊全,現在你有了一個生成偽·隨機數的環境
第二步,止念
僅僅關閉外感是不夠的,因為你的內存會泄漏,啊不對,你的內心百感交集,當一萬頭大象奔騰而過的時候,菩薩也沒法隨機,所以我們要學習止念。
如圖所示盤膝坐下,五心向天……做不到?那麼半盤也可以,男生羅漢盤,女生觀音盤。一念起則一念止,一念起則一念止……呼~
什麼?你睡過去了?唔…昨晚DOTA太辛苦了吧…不要熬夜,同學。
第三步,生成種子
內存已經清空,鋼槍已經擦亮,我們可以在大腦里直接調用Random()函數了,你腦子裡沒有Random函數?不可能,因為Random函數,其實就是~就是胡亂想一個數啊!道家叫心血來潮、掐指一算。知乎叫靈機一動,腦洞大開。
第四步,散列
光有種子還是不夠的,種子的取值範圍往往取決於你的腦洞大小,我們還必須把種子散列到足夠大的空間去,比如:4,294,967,296?我們把種子顛來倒去,加加減減,乘乘除除,怎麼加減乘除?隨便你啊,你說你會算錯,算錯就更好了。
於是我們有了一個在0-4,294,967,296空間內的偽·隨機數。
第五步,拖延
我們知道,旁路攻擊可以通過分析計算時間預測隨機數的規律,所以我們不能直接給出答案,還要拖延一段時間,怎麼拖延呢?
「悟空,你要隨機數你要跟我說嘛,沒有道理你要隨機數我不給你,你不要隨機數我偏要給你……」
好,現在我們有了一個真·偽·隨機數。(對,我也開始一本道了……請大家去看 @沈萬馬 的正經答案。
睡前數羊,直到睡著。最後一個數字是一個幾何分布。
計算一個十三位數與十三位數的積,再計算這個數除以一個十位數後對一個十二位數取模。
心算!心算!
我知道你一定會算錯。
借樓上回答,我們生成隨機數的目的往往是:不可預測和形式公平
在腦中進行盡量多的無關運算,比如說你想生成[a,b]之間的隨機整數,你可以隨便想三個四位數d,e,f,計算a+(d*e+f) mod (b-a+1)的值即可。(可以自行根據情況調整d,e,f的位數和公式的複雜程度)
這個辦法跟直接「隨便想一個a到b之間的數」相比的好處是,你隨便想一個數字的話可能分布不夠均勻,但是你通過多幾次計算以後相信得到的那個東西的分布會相對均勻一點。
1、桌子上畫條垂直於身體的直線
2、腦門塗墨
3、腦門對準直線,閉眼,用力砸下
4、睜眼,偏左記0,偏右記1
5、重複3-4,按順序排列結果得到隨機數
《論如何採用數學分析及精神分析手段生成真隨機數》
1、首先你需要一個比較小的範圍,需要是質數,假定1-7。如果不是質數,把它擴大到下一個質數。
2、挑一個n位數,要比這個質數大很多,我們選擇五位數。
3、想一個隨機的5位數
4、用這個隨機數除以7取余,得到的就是一個幾乎真隨機的1-7之間的隨機數。
——————————————原理——————————————
在人腦內生成一個數,其實是很有意思的一個過程。它本身是隨機的,但是會受到一些確定過程的干擾。如果我們能把這些確定過程變換掉,就能輕鬆得到一個不下於任何隨機數發生器產生的真隨機數。
人腦隨便想一個數不隨機,有兩個主要的問題,第一是對不同區域的數分布不均。「腦內隨機數產生器」是為了實用化設計的,它必須滿足泛用的要求,既能在x&>0上產生隨機數,又必須在某個確定的區間上產生非無窮小的概率值。如此一來,符合要求的基本上其在R上的積分肯定會以類似對數函數的方式收斂。(但我們並不知道到底是哪個函數。)第二,它受到潛意識的干擾,我們總是更偏愛一些數,這會導致它在小範圍內出現雜訊。那麼,我們可以隨便想一個數的分布,假設是這個樣子。
f = Function[
x, (-30*ArcTan[x/20] + 15 π) (Mod[x, 2] + Mod[x, 5] +
Mod[x, 10]/5 + 5)];
ListLinePlot[Table[f[x], {x, 0, 100}]]
(強烈要求知乎代碼加入對Mathematica的支持)
現在簡單地按照上面的規則變換一下。
numlist = N[Plus @@ Partition[Table[f[x], {x, 10000, 100000}], 7]]
{1657.97, 1657.98, 1658., 1657.85, 1657.87, 1657.71, 1657.59}
極為接近。證明很麻煩,我不寫了。
這是在討論人有沒有自由意志嗎?
人腦不是確定的,是非線性的,因此產生的一定是真隨機數,(對人類抽樣而言),注意,這和偽隨機不是一個過程,這是好幾個人。只有計算機是因為確定所以每一台都差不多。
有一個簡單的方法,只要你心算不是特別厲害,都可以使用。
假設你要生成範圍為0-n的數字,方便起見。
1. 在腦海里隨便想一個大,一個小的數字,刻意想也行。
2. 大數-小數,得到差。
3.差除以n,取模就是結果
先想到哪個是哪個咯
隨便想一個數很容易,隨機想一個數很難
一個1 - n的整數,如果n不太大(&<20)還是可以做到近似uniform distribution的
1. 念一首詩,或者幾句歌詞
2. 數每個漢字的筆劃數,求和
3. mod n
4. +1s
突然想到這個問題,搜了一下就進來了。
最初的想法是在腦中丟一個骰子,那麼當骰子停止旋轉固定時,向上的一面會是幾呢?然而事實是,它並不會停止轉動,腦內空間沒有重力,不命令它停止顯示一個數字,它是不會停止轉動的。
第二個想法,把範圍從六變成二,在0和1兩個數字中,用大腦給出一個隨機數,做得到嗎?做不到。
通過外因造就的隨機等同於程序規則,純以大腦做到隨機,或許就等同於把感性的人類變為可以固化的數據規則,若有朝一日能做到這一點,記憶就應該能夠儲存了。
反之,將絕對的數據規則變為不可控的形式,就是未來的高等人工智慧。
over。
1926
不能
推薦閱讀: