《神秘的程序員們》漫畫:31、32、34

jopen 8年前發布 | 20K 次閱讀 神秘的程序員們

關于未來程序員將變得不再緊缺的預言或報道,從來沒有停止過。但與此同時,所有人不得不面對的一個事實是:你招聘不到程序員。

《神秘的程序員們》漫畫:31、32、34

《神秘的程序員們》漫畫:31、32、34

32 年會上的程序員們……  

女優?艷舞?鼓勵師?反串表演?NO,NO,NO, 一個有許多程序員的年會是這樣的……

《神秘的程序員們》漫畫:31、32、34

《神秘的程序員們》漫畫:31、32、34

《神秘的程序員們》漫畫:31、32、34

《神秘的程序員們》漫畫:31、32、34

《神秘的程序員們》漫畫:31、32、34

注1:Random.org 通過大氣噪音 (Atmospheric Noise)生成真隨機數,由愛爾蘭都柏林三一學院 Mads Haahr 博士于 1998 創建。它有免費和收費兩種 API 供開發者使用,相對于計算機產生的偽隨機數,使用 Random.org API 用于博彩、抽獎之類的應用是非常嚴肅的。

注2:這個年會故事的靈感來自于一條朋友圈。如果是真的,這應該是一家技術主導的互聯網公司,有讀者知道是哪家,透個底給我?

《神秘的程序員們》漫畫:31、32、34

34 摔!這個春節期間最兇殘的一期漫畫  

點開它這個假期你就有事干了

《神秘的程序員們》漫畫:31、32、34

“一次抽出 50 個數和抽 50 次(每次 1 個)在概率上難道不是相等的嗎?”

《神秘的程序員們》漫畫:31、32、34

這個問題需要分兩步來回答。

1、如何抽出 50 個數。正確的設計是先將全部有效工號 list 的索引生成隨機序列,再取序列的前 50 位為中獎者。如果你的隨機序列算法沒有太奇怪的話,可以保證每個人的中獎率是公平的。如果你刷了不少面試題,大概還記得 洗牌算法(ShuffleArray)吧,也知道它有各種錯誤實現。實現這個算法要用到隨機數,于是又有了偽隨機數的問題,所以原文我們沒有自己實現這個算法,我們用了 random.org 提供的隨機序列(見原文中被 review 的代碼,就是 http 調用 api 取隨機序列的)。

2、在抽獎程序中 “抽 50 次”的隱含前提是每抽出一個號碼后會公布,然后從獎池中移走。所以讓我們假設有效工號是 51 個,每次抽出一個工號、公布、移走。再抽取下一個、公布,移走……直到 50 個中獎名額都取完。很顯然進行第一次抽取(公布前),獎池中每個人的中獎概率是1/51;但進行第 50 次抽取(未公布前),獎池中每個人的中獎概率是1/2。所以用抽 50 次的方法,每次抽取時,獎池里剩下的人的獲獎概率是不平等的。。

還會有人問:所謂的生成隨機序列,生成的時候難道不也是一個一個地取號碼?但在序列生成完成前,只要這 50 個號碼還未公布。獎池里所有人的人仍然擁有相同的概率。

但從群眾的情緒角度出發,人們肯定更愿意看系統一個一個地抽出下一位獲獎者,而不是更在乎什么概率上絕對公平。

《神秘的程序員們》漫畫:31、32、34

如果要兼顧公平和現場氣氛,理想的做法是抽出一次 50 個工號后,再配合一個激動人心的看起來是正在抽獎的動畫來顯示下一個中獎號碼

正如進度條的存在意義一樣……

《神秘的程序員們》漫畫:31、32、34

說到抽獎的概率問題,不可不提的是著名的“三門問題”(Monty Hall problem)

《神秘的程序員們》漫畫:31、32、34

只要在任何論壇、問答站、社交群、研討會上貼出三門問題,都會吵上幾十頁,從初中生到數學博士都熱衷于討論,并且誰也無法說服誰,最后以互罵民科、羞辱對方智商收場。

《神秘的程序員們》漫畫:31、32、34

讓這個數學游戲問題變得著名的是 Marilyn vos Savant,至今為止吉尼斯世界紀錄中擁有最高智商的人類/女性,10 歲時測得 IQ 高達 228。她在《Parade》雜志開專欄回答讀者來信,有一位讀者在 1990 年向她提出了三門問題。Vos Savant 的回答是:

“你原先選擇的門有1/3 的勝率,但剩下的門有2/3 的勝率。所以你應該改變選擇。如果我們把問題換成 100 個門,你選了A門,然后(知道獎品在哪的)主持人為你打開了 98 扇有貓的門,這樣一假設的話你肯定毫不猶豫會換門,對吧。”(見注1)

她的答案看起來相當反直覺,所以在專欄上登出以后,收到了來自群眾和學界的雪片般的質疑。

“看起來你很喜歡直奔要點,那我也直接點:你搞砸了。如果一扇門打開后顯示沒有獎品,那么剩下的兩扇門勝率都各是1/2,沒什么可能一扇門比另一扇門的概率高。作為一個職業數學家,我為大眾在數學技能的缺失感到十分擔憂。請承認你的錯誤,并在未來更用心些。”

Robert Sachs, Ph.D.

喬治梅森大學

“你捅簍子了,你捅大簍子了!看起來掌握基本的數學原理對你是有困難的。無論你是否改變選擇,概率都是1/2。這個國家里已經有夠多的數學文盲了,我們用不著“世界智商最高的人”來證明這一點了。丟人!”

Scott Smith, Ph.D.

弗羅里達大學

作為反擊,Vos Savant 在她的專欄對三門問題做了更詳細的分析(用來解決三門問題的方法很多,她在回信里用的是最容易理解的 simple solutions)

《神秘的程序員們》漫畫:31、32、34

在“主持人知道每個門后有啥,且只打開有貓的門”這個命題限定條件下:換門有2/3 的勝率,不換只有1/3 的勝率(因為你首次選中的門后有車的概率是1/3)

沒想到,她收到了更多措辭粗魯的回信。92% 的大眾不同意她的答案,65% 來自高校的來信認為她是錯的。

“你錯了。但愛因斯坦在承認自己的錯誤后在人們心中贏得了更多尊重。”

Frank Rose, Ph.D.

密歇根大學

“我曾經是你專欄的忠實讀者。但這件事上你真的錯了。我是專業干這個的。”

James Rauff, Ph.D.

密利克大學

“在回答此類問題之前,你應該重修概率。”

Charles Reid, Ph.D.

弗羅里達大學

“我肯定你能收到不少來自高校學生的來信,建議你留著他們的地址以便在未來求助。”

W. Robert Smith, Ph.D. 

佐治亞州立大學

“你錯得不能再錯了。我希望這次的爭論能喚起人們對當今數學教育形勢之嚴峻程度的關注。如果你能承認自己的錯誤,尚能對目前可悲的現狀作出一些貢獻。到底多少憤怒的數學家才能讓你改變觀點?”

E. Ray Bobo, Ph.D.

喬治城大學

“很震驚,在被至少三個數學家糾正之后,你仍然沒意識到自己的錯誤。”

Kent Ford

迪克森州立大學

“可能女人看待數學問題就是跟男人不一樣。”

Don Edwards

俄勒岡州桑河市 

“你就是那只羊!” (三門問題原題是兩只羊和一輛豪車。漫畫做了萌化改編)

Glenn Calkins

西密蘇里州立大學

“你錯了。但積極一面看,要是所有的這些 Ph.D 都錯了,我們的國家就有大麻煩了”

Everett Harman, Ph.D.

美國陸軍研究院

盡管第二次回復后收到的來信重得差不多把雜志的(物理意義上)郵箱都壓壞了,vos Savant 第三次在專欄上回復堅持自己是對的。并號召全國的數學課堂都拿這個問題做一下概率實驗,無論人肉或計算機模擬都行。

最后幾乎所有做了實驗的反饋都證明她是對的:改變選擇后贏取豪車的概率上升為2/3,而不是1/2 或1/3。大部分教授和學生在看到實驗數據時都震呆了。

連 Paul Erd?s在內的頂級數學家都在這個問題上失了足 (迄今為止發表論文數最多的數學家,在數論、圖論、組合數學、概率論、集合論、近似理論等領域頗有建樹)。即使在 "a formal mathematical proof of the correct answer “面前,他仍然拒絕相信且更加憤怒。直到親眼看到數百次計算機模擬的結果,他才不得不承認自己錯了(見注2)。 Paul 的牛逼生平見注 3 (譯文)

如此多的數學/理工博士會栽在這個問題上,就是因為它太反直覺了。對于所有搞科學為生的人,過于相信自己的直覺是會倒霉,不經過計算就羞辱對手更是會倒大霉的,也有可能學界對吉尼斯、IQ 測試、女性這幾個關鍵字的組合有天然敵意。但結果就是,以上這些來自各大高校的 Ph.D 的精彩言論(連同署名和學院)被一直留在 vos Savant 官網的頁面上。25 年來,任何三門問題的論文/討論/wiki 都會引用這個頁面。除非她不再給服務器續費或被騙走域名,這些人差不多會被一直圍觀下去。


與此類似的另一個經典概率悖論是 Two envelops problem

《神秘的程序員們》漫畫:31、32、34

這個困局應該如何破解?解釋見注4,或結尾處掃碼取藥。


不夠過癮的話來看看和三門問題密切相關,但更反直覺的 Bertrand's Box Paradox

《神秘的程序員們》漫畫:31、32、34

解釋請看注 5 和注6(中文) ,或結尾處掃碼取藥。


感覺沒被虐夠的歡迎來到 Boy or Girl paradox (Two Child Problem )

《神秘的程序員們》漫畫:31、32、34

感覺智力被傷害的同學們,來看個段子開心開心吧,

《神秘的程序員們》漫畫:31、32、34

分析過程及問題拓展請看注 8 或注9,或結尾處掃碼取藥。

這是 96 年 vos Savant 在《Parade》雜志專欄上討論的另一個坑人概率段子。作為智商最高的人類,她還真的是很厲害,1990 年的三門問題大討論后,估計受到一萬點傷害的學界們很可能會一直用各種悖論或陷阱問題釣她的魚。但直到 2012 年她才犯了一個錯誤,隨后糾正了。后來 2013、2014、2015 年她每年都各犯了一個錯誤(回答專欄問題時),全都被 wiki 頁面記錄下來……(注 10)(她仍然在《Parade》上開著那個專欄)

上述這些爭議問題一個共性都是它們都用了難度看起來很低的提問方式,數字很小,好像隨便心算一下就能得出答案。這種迷惑性讓人們更輕信自己的簡單計算的結果或被直覺蒙蔽。如果三門問題當初是個千門問題,提前知道結果的主持人打開了其中 239 扇門…… 沒準人們更愿意使用條件概率或模擬來計算。那樣的話,很可能它不會引發如此大的爭議。

另一個共性是很多時候,這些問題的復雜度或爭議,是由于自然語言很難描述好一個數學問題。命題里模糊的表述會嚴重影響條件,從而得出截然不同的概率。

對了,放假期間閑得沒事干的同學,可以移步注 6 鏈接(譯文)中的最后一個“充滿爭議的數學問題”,經典虐腦概率題:Three prisoners problem 

最后,西喬和神秘的顧問團祝大家春節愉快(結果看完你們不會愉快了對吧,摔!)


由于上述每一個問題都基本上會引發巨大爭議,篇幅所限,這篇漫畫不提供分析過程。有疑惑的同學請參考腳注或自行 google。不方便看到英文 wiki 的同學可以長按二維碼去看答案,我摘錄了各題的部分解答和分析過程。

《神秘的程序員們》漫畫:31、32、34

可預見將會收到很多評論,恕不能一一回復。建議寫出了自己見解或分析的同學們分享到朋友圈討論。

  • 注 1 vos Savant 關于三門問題的所有回復和讀者來信精選(英文) http://marilynvossavant.com/game-show-problem/

  • 注 2 Monty Hall, Paul Erd?s, And The Fallibility of Human Intuition(英文)  http://bdld.info/2009/06/25/monty-hall-paul-erdos-and-the-fallibility-of-human-intuition/

  • 注 3 作為當代最偉大的數學家之一,他有很多非常有趣的故事。(中文)http://www.brunel.ac.uk/~csstzzw/erdos.html

  • 注4(英文)  https://en.wikipedia.org/wiki/Two_envelopes_problem

  • 注 5 Bertrand's Box Paradox(英文)  https://en.wikipedia.org/wiki/Bertrand%27s_box_paradox

  • 注 6 最具爭議的 12 個數學事實 (譯文) http://select.yeeyan.org/view/AhyuChen/357495

  • 注7(英文)  https://en.wikipedia.org/wiki/Boy_or_Girl_paradox

  • 注 8 (譯文) Lying students and games of coordination  http://mindyourdecisions.com/blog/2009/10/13/lying-students-and-games-of-coordination/

  • 注 9 (中文) 樣本空間 (Sample space)  http://highscope.ch.ntu.edu.tw/wordpress/?p=47145

  • 注 10 (英文)  https://en.wikipedia.org/wiki/Marilyn_vos_Savant

后續:

挖了一個兇殘的坑然后自己掉進去了

上一篇《摔,這個春節期間最兇殘的一期漫畫》收到很多關注轉發,也有很多評論留言指出在“抽 50 個數和抽 50 次”的概率問題上我們弄錯啦。

于是我們團隊又花了大半天討論這件事(本來想春節給讀者們找點事干,沒想到先把自己扔坑里了)。結論是我們的確出錯了(臉被打得 pia pia 響),向讀者們致歉。

在引子處闡述了我們對于年會那期漫畫中抽獎程序的設計理由。帶出了一個問題 “一次抽出 50 個數和抽 50 次(每次 1 個)在概率上難道不是相等的嗎?”

首先這個提問是有毛病的,它并沒有描述在討論什么的概率。而我們在上一篇中提到的:“在抽獎程序中 “抽 50 次”的隱含前提是每抽出一個號碼后會公布,然后從獎池中移走……所以用抽 50 次的方法,每次抽取時,獎池里剩下的人的獲獎概率是不平等的。”解釋本身沒有錯。但回答不了問題,(實際上這個問題也回答)。

但我們最大的失誤是只考慮了讓程序在“每輪抽取時的概率是否一樣”,但忽略了現場中的每個人 50 輪抽獎后中獎概率是否一樣。

其次,由于原來的這個提問從年會抽獎的漫畫場景而來,表述不清晰,因此附加條件是不完備的。要滿足每個人中獎概率公平,還必須增加一個限定條件:“50 份獎品是完全相同的”。實際上,三等獎經常是等值但不同的獎品,而就算是“一樣的”實物獎品,甚至哪怕是等額現金,都會有細微的差別。大概只有固定錢數電子支付才能滿足這個限定條件。

所以從程序設計的角度出發,“亂序取 top50” 的方式仍然比“抽 50 次”更有通用性。

討論真實世界的概率問題,必須在一系列附加條件下進行,這樣才能抽象出模型進行計算。但自然語言描述這些附加條件非常吃力,經常會漏掉條件導致結果變化。比如下面補丁1。

結論:在加上“獎品完全一樣”這個限定條件后,現場觀眾在 50 輪抽獎后的累積中獎概率的確是相等的。

每一篇漫畫,除了主創團隊兩人(負責技術層面的霍炬和負責表現層面的西喬),我們都會請漫畫主題相關領域的專家 review。這次我們找了兩個我們認識的數學水平最高的算法專家。但是由于我們提問時描述語言的不完備,所有人的注意力都放在“程序生成的每一輪的中獎概率是否相等”以及如何選擇亂序算法。大家甚至花了大半天討論如何在使用偽隨機數的情況下提高的算法公平性。然后又就此討論如果擁有無限的計算能力,我們是否可以通過計算證明我們所在的充滿概率的世界是不是虛擬的。當然最后他們不約而同的勸我們不要討論概率問題,“因為那沒有意義”,不幸的是我們沒采納這個建議。


上一篇中的兩個補丁

補丁1: 最后一題爆胎問題中,缺少限定條件:爆胎的必須是一輛四輪車,兩人猜中一致的概率才是1/4。感謝讀者 老張指出。

補丁2: 三門問題的解法中,配圖文字應為第一種可能下車在A門;第二種可能下車在B門;第三種可能性下車在C門。而不是"第一種可能你選擇了A門……B門……C門” 。 感謝讀者追俗和  Viz (? ·?_·?)? 指出。

來自: mp.weixin.qq.com

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!