云漫圈 | 有趣的海盗问题 (完整版)
戳藍字“CSDN云計算”關注我們哦!
作者:小灰
來源:程序員小灰
小灰發布的關于海盜問題的漫畫,得到了大家的熱烈討論,很感謝大家的支持。這一次,小灰做了如下更新:
1.修正了小灰面試階段的一個數字錯誤
2.補充了6個海盜和7個海盜局面下,最優的分配方式
—————? 第二天? —————
海盜分金幣問題:
有5個海盜,獲得了100枚金幣,于是他們要商量一個方法來分配金幣。商議方式如下:
1. 由5個海盜輪流提出分配方案。
2. 如果超過半數海盜(包括提出者)同意該方案,則按照該方案分配。
3. 如果同意該方案的人數(包括提出者)小于等于半數,則提出者要被扔到海里喂魚,剩下的海盜繼續商議分配。
4. 海盜們都是絕對理性的,以自己盡可能多獲得金幣為目的。但是在收益相等的情況下,會傾向把提出者扔到海里。
問:第一個海盜應該提出怎樣的分配方案,才能保證自己既不被扔到海里,又能使自己利益最大化?
舉一個栗子:
此時第一個海盜來提議分配方案,他說:
我要100枚金幣,你們其他人一個金幣也沒有!
顯然,其他小伙伴一致反對,結果第一個提出者被扔到了海里。
接下來輪到第二個海盜提出分配方案,他說:
我只要1個金幣,剩下3個小伙伴每人33個金幣!
第三個海盜反對,剩下兩個小伙伴同意,同意者超過了半數(4 : 1),于是按照這個方法執行了分配。
————————————
如何利用遞歸思想來簡化問題呢?讓我們來詳細分析一下,后文把五個海盜簡稱為老一、老二、老三、老四、老五。
老一在提出分配方案的時候,不妨這樣思考:
如果我被扔到海里了,剩下4個海盜,此時老二的最優分配方案是什么呢?
我只要在老二的分配方案上稍微增加一點,就能贏得更多的支持。
老二在提出分配方案的時候,也會這樣思考:
如果我被扔到海里了,剩下3個海盜,此時老三的最優分配方案是什么呢?
我只要在老三的分配方案上稍微增加一點,就能贏得更多的支持。
老三在提出分配方案的時候,還是會這樣思考:
如果我被扔到海里了,剩下2個海盜,此時老四的最優分配方案是什么呢?
我只要在老四的分配方案上稍微增加一點,就能贏得更多的支持。
整個遞歸過程,就像下圖一樣:
這個遞歸過程到什么時候截止呢?剩下兩個人為止。
想想看,當剩下兩個人的時候,是什么情形?
此時老四沒有任何選擇!無論他如何分配,哪怕把100枚金幣都給老五,老五仍然可以反對,導致老四被扔到海里,金幣全歸老五所有。
由此,老三心想:老四沒有最優決策,所以無論我提出什么要求,老四都一定會同意,而老五一定不同意。
由于只要超過半數同意就可以執行分配,所以老三的最優策略如下:
接下來,老二暗自尋思:如果沒有我,老三能獲得100枚金幣,所以無論如何不會同意我。但我可以設法“籠絡”老四和老五,形成 3 : 1 的局面。
在老三的“淫威”下,他們原本一個金幣都得不到。我給他們一人一枚金幣,好過由老三來分配,所以他們肯定會同意。
因此,老二的最優策略如下:
終于輪到老一了,老一心里琢磨:如果沒有我,老二能獲得98枚金幣,我總不能分給他多于98枚,索性放棄他,只要剩下三人中籠絡到兩人,形成 3 : 2 的局面即可。
要籠絡誰呢?以老二的策略,老三得不到金幣,所以老三最好“伺候”。我給老三1枚,老三一定同意。
至于老四和老五,本來可以得到1枚,所以我必須比老二給的多,才能贏得支持。但我又沒必要同時籠絡他倆,要么給老四兩枚金幣,放棄老五,要么給老五兩枚金幣,放棄老四。
因此,老一的最優策略如下:
由于海盜數目增加到7人,原本的老大順延成為老三,原本的老二順延成為老四......大家注意這里不要混淆。
如何把兩種分配結果進行聚合呢?
在剩余5個海盜的情況下,要么老六得到兩枚金幣,老七沒有金幣;要么老六沒有金幣,老七得到兩枚金幣。從概率學的角度來分析,這兩種情況發生的幾率各占50%,所以老六和老七的平均收益都是1枚金幣。
這樣一來,老二就變得容易分析了。老二想要形成 4:2 的局面,他該怎么分配呢?
如果沒有自己,老三可以得到97枚,所以老三直接放棄掉。
剩余5個海盜時,老四得不到金幣,所以給老四一枚就可以拉攏,很好伺候。
剩余5個海盜時,老五、老六、老七的平均收益都是1枚,但我們只要拉攏其中兩人就行。所以其中一人沒有金幣,另外兩人各自給兩枚。這樣就形成了一個排列組合:
2, 2, 0
2, 0, 2
0, 2, 2
因此,老二自己保留的金幣數量是 100 - 2 - 2 - 1 =?95。完整的分配方案有3種,如下圖所示:
接下來,為了分析老大的策略,我們仍然需要把上面三種情況聚合一下。
對于老五、老六、老七,他們各自有三分之二的幾率得到兩枚金幣,有三分之一的幾率得不到金幣。所以他們的收益平均值是 2 * 2/3 =?1.33?枚金幣。
這樣一來,老大也變得容易分析了。老大想要形成 4:3 的局面,他該怎么分配呢?
如果沒有自己,老二可以得到95枚,所以老二直接放棄掉。
剩余6個海盜時,老三得不到金幣,所以給老三一枚就可以拉攏,很好伺候。
剩余6個海盜時,老四的收益是1枚,老五、老六、老七的平均收益是1.33枚,但無論1枚還是1.33枚,給他們兩枚金幣都是可以拉攏的。我們只要拉攏其中兩人就行,所以其中兩人沒有金幣,另外兩人各自給兩枚。這樣又形成了一個排列組合:
2, 2, 0,?0
2, 0, 2,?0
2, 0, 0, 2
0, 2, 2,?0
0, 2, 0, 2
0, 0, 2, 2
因此,老一自己保留的金幣數量是 100 - 2 - 2 - 1 =?95。完整的分配方案有6種,比較復雜,這里就不用圖片表示了,直接列出表格:
—————END—————
1.微信群:
添加小編微信:color_ld,備注“進群+姓名+公司職位”即可,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!
2.征稿:
投稿郵箱:liudan@csdn.net;微信號:color_ld。請備注投稿+姓名+公司職位。
推薦閱讀
Gartner的預言:通向混合IT之旅
崩潰!新浪程序員加班錯失 77 萬年會大獎
剛剛!華為又被美國盯上了!
阿里“菜鳥”AI?
以太坊升級的拖油瓶,竟只是這幾行代碼
程序員有話說 | 程序猿在乘地鐵的時候都在想什么?
清華北大“世界排名斷崖式下跌”?
點擊“閱讀原文”,打開 CSDN App 閱讀更貼心!
喜歡就點擊“好看”吧!總結
以上是生活随笔為你收集整理的云漫圈 | 有趣的海盗问题 (完整版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 九大股份制银行有哪些
- 下一篇: 东阿阿胶股票怎么样 结合年报好好聊聊