這周在B站上看MIT的CS6.0001(作為一條計算機基礎菜狗,上這課真是大補。老師講的真得超好,強烈安利第六講,第十講到第十二講)。
今天還剩最后一講,狠狠獎勵自己(快樂地摸了摸魚),點開了《魷魚游戲》,開始回味第七集【過墊腳石橋】。
為了方便沒有看過該劇的讀者理解,在這里描述下游戲規則:
有16位選手要過一條玻璃橋。
玻璃橋由18組玻璃構成。每組玻璃由兩塊玻璃平行組成,1塊是鋼化玻璃,1塊是普通玻璃。
鋼化玻璃能承重,如果選手踩到鋼化玻璃可以繼續前行;但如果踩到普通玻璃,玻璃會碎掉,選手死亡。
選手按號碼依次前行,通過18組玻璃后算作存活。
玻璃橋直觀圖片:

選手們如何過橋(放張沒那么血腥的):

比較有意思的是,劇里面的3號選手(是一個數學老師)發現前面還有15組玻璃時,絕望地說過橋的概率只有1/(2^15),因此不顧一切地飛奔(按照概率預想的gg了)。
由此我想到了一些相關問題:
【問題1】16位選手,在排除其他因素的情況下,期望能夠有多少人可以存活?
【問題2】每個人的期望生存概率是多少咧?
【問題3】直觀上感覺16號成奇勛(主角)肯定能活,是對的嗎?
作為一條菜狗,我當然沒有想到蒙特卡洛解法(為什么這么理直氣壯),老師說先從小問題算起,那就來個最基礎的problem吧。
墊腳石橋嘛,前面一個人幫后面的人探路。
最好情況,1號win the lottery,戰勝了1/(2^18)概率,帶領16個人全通關了。
最壞情況,前面的人都是倒霉蛋,全踩到普通玻璃做了墊腳石,因此16號奇勛同志前面還有3組玻璃,那么他有1/(2^3)【12.5%】的概率可以存活(運氣背起來也太背了……)。
下面考慮一種直觀情況。假設每個玩家都能通過一組玻璃,然后在第二組玻璃的時候領便當。
這種情況下每個人踩了別人之后,生存的概率是均等的,近似於生存的平均情況。
上個圖【取了劇中的配色,對比色能搭成這樣真得很好看!深粉色:#E54D91;深綠色:#004A46;淺粉色(excel自帶):#FFCCFF】

在這種情況下,有7個人可以到達橋對岸。
但我咋證明它確實是平均情況咧????
面向搜索引擎編程,啟動!
計算思維的本質是自動化+抽象。
看到概率問題,為什么不用蒙特卡洛算法呢?
看到概率問題,為什么不用蒙特卡洛算法呢?
看到概率問題,為什么不用蒙特卡洛算法呢?
模擬下真實情況就好了呀!!!(下面為大家播送大佬們的兩個帖子,寫得很詳細清晰)
計算最有可能通過的人數(java):https://www.cnblogs.com/bryan31/p/15420470.html
大佬模擬了1億次,得出存活7人的可能性最高。
計算每個人的生存概率(python):https://www.cnblogs.com/dingdangsunny/p/15435513.html
大佬模擬了100萬次,得到如下結論(圖源自上述地址):

一般而言,16號奇勛同志真是穩贏啊!
所以今天真的有狠狠get到計算思維的魅力哈哈。
那么這個問題就這樣收尾啦(好草率的收尾),感覺這個問題很適合作為教學案例呢。
E54D91
