————— 次日 —————
程序員
海盜分金幣問題:markdown
有5個海盜,得到了100枚金幣,因而他們要商量一個方法來分配金幣。商議方式以下:ide
由5個海盜輪流提出分配方案。學習
若是超過半數海盜(包括提出者)贊成該方案,則按照該方案分配。3d
若是贊成該方案的人數(包括提出者)小於等於半數,則提出者要被扔到海里餵魚,剩下的海盜繼續商議分配。blog
問:第一個海盜應該提出怎樣的分配方案,才能保證本身既不被扔到海里,又能使本身利益最大化?
遞歸
舉一個栗子:it
此時第一個海盜來提議分配方案,他說:
我要100枚金幣,大家其餘人一個金幣也沒有!class
顯然,其餘小夥伴一致反對,結果第一個提出者被扔到了海里。程序
接下來輪到第二個海盜提出分配方案,他說:
我只要1個金幣,剩下3個小夥伴每人33個金幣!
第三個海盜反對,剩下兩個小夥伴贊成,贊成者超過了半數(4 : 1),因而按照這個方法執行了分配。
————————————
如何利用遞歸思想來簡化問題呢?讓咱們來詳細分析一下,後文把五個海盜簡稱爲老1、老2、老3、老4、老五。
老一在提出分配方案的時候,不妨這樣思考:
若是我被扔到海里了,剩下4個海盜,此時老二的最優分配方案是什麼呢?
我只要在老二的分配方案上稍微增長一點,就能贏得更多的支持。
老二在提出分配方案的時候,也會這樣思考:
若是我被扔到海里了,剩下3個海盜,此時老三的最優分配方案是什麼呢?
我只要在老三的分配方案上稍微增長一點,就能贏得更多的支持。
老三在提出分配方案的時候,仍是會這樣思考:
若是我被扔到海里了,剩下2個海盜,此時老四的最優分配方案是什麼呢?
我只要在老四的分配方案上稍微增長一點,就能贏得更多的支持。
整個遞歸過程,就像下圖同樣:
這個遞歸過程到何時截止呢?剩下兩我的爲止。
想一想看,當剩下兩我的的時候,是什麼情形?
此時老四沒有任何選擇!不管他如何分配,哪怕把100枚金幣都給老五,老五仍然能夠反對,致使老四被扔到海里,金幣全歸老五全部。
由此,老三心想:老四沒有最優決策,因此不管我提出什麼要求,老四都必定會贊成,而老五必定不一樣意。
因爲只要超過半數贊成就能夠執行分配,因此老三的最優策略以下:
接下來,老二暗自尋思:若是沒有我,老三能得到100枚金幣,因此不管如何不會贊成我。但我能夠設法「籠絡」老四和老五,造成 3 : 1 的局面。
在老三的「淫威」下,他們本來一個金幣都得不到。我給他們一人一枚金幣,好過由老三來分配,因此他們確定會贊成。
所以,老二的最優策略以下:
終於輪到老一了,老一內心琢磨:若是沒有我,老二能得到98枚金幣,我總不能分給他多於98枚,索性放棄他,只要剩下三人中籠絡到兩人,造成 3 : 2 的局面便可。
要籠絡誰呢?以老二的策略,老三得不到金幣,因此老三最好「伺候」。我給老三1枚,老三必定贊成。
至於老四和老五,原本能夠獲得1枚,因此我必須比老二給的多,才能贏得支持。但我又不必同時籠絡他倆,要麼給老四兩枚金幣,放棄老五,要麼給老五兩枚金幣,放棄老四。
所以,老一的最優策略以下:
喜歡本文的朋友們,歡迎關注公衆程序員小灰,收看更多精彩內容
渴望知識交流和學習的小夥伴們,也歡迎加入小灰的知識星球