有趣的海盜分金幣問題,不學點算法都不配當個海盜了

最近幾天看到一個挺有趣的博弈相關的趣談,今天來分享給你們,而且也會詳細講解最終問題的最優解,而且我還好經過這道題扯一扯遞歸。算法

問題描述

有 5 個海盜,得到了 100 枚金幣,因而他們要商量一個方法來分配金幣。商議方式以下:數據庫

由 5 個海盜輪流提出分配方案,規則以下編程

一、若是超過半數海盜(包括提出者)贊成該方案,則按照該方案分配。微信

二、若是贊成該方案的人數(包括提出者)小於等於半數,則提出者要被扔到海里餵魚,剩下的海盜繼續商議分配。網絡

三、海盜們都是絕對理性的,以本身儘量多得到金幣爲目的。可是在收益相等的狀況下,會傾向把提出者扔到海里。學習

問:第一個海盜應該提出怎樣的分配方案,才能保證本身既不被扔到海里,又能使本身利益最大化?操作系統

解決問題

先作一些假設和提醒計算機網絡

爲了方便後面描述,咱們假設輪流提出方案的順序爲:海盜5,海盜4,海盜3,海盜2,海盜1;也就是說,最開始由海盜5 提出分配方案,海盜1排在最後3d

而且,你們必定要注意最後一個條件,每一個海盜是絕對理性以及在收益相等的狀況下,會傾向把提出者扔到海里blog

前方高能,開始扯淡,請你發揮出你的各類猜測

好了,如今若是你是海盜5,你會怎麼分配才能使得得到的金幣儘量多,而且不會被扔進海里餵魚呢?

說實話,第一眼看到這個問題,有點無從下手,腦子太特麼亂了,由於徹底不知道怎麼證實我的分配方案可以讓超過一半的海盜都必須支持我,要不平均分配?要不我少一點他們多一點?要不我多一點他們少一點(這樣會不會立刻就被扔下海里)?

你也能夠本身先想幾分鐘哦,看看你可否本身想的出來?

事實上,要讓別人贊成咱們的想法,咱們必須得知彼知己,才能百戰百勝。也就是說,海盜5要給出分配方案,必須基於海盜4的分配方案來;也就是說,海盜5得先假設本身被扔進海里的話,海盜4會如何分配呢?而後根據海盜4的分配方案,海盜5才能給出他的分配方案。

同理,海盜4的分配方法得基於海盜3,海盜3得基於海盜2,以此類推

聽不懂?不要緊,下面我舉個例子大家立刻就懂了

逐層擊破

一、只有 2 個海盜的狀況

如今,咱們假設只有兩個海盜:海盜1 和海盜2,這個時候你應該知道分配結果了吧?

很顯然,不管海盜2提出什麼方案,海盜1 都會直接拒絕,這樣海盜1就可能得到所有的金幣了,也就是說,當只有兩個海盜時,海盜2 不管怎麼討好海盜1,最終的結果都是到海里餵魚,因此分配結果以下

二、只有3個海盜的狀況

這個時候忽然跳出了個海盜3,也參與到這場分贓活動中,這個時候海盜3該如何分配?

其實也很是簡單,海盜3剛纔窺聽了海盜1和海盜2的對話,知道若是本身被扔進海里的話,海盜2必定也會被扔進海里,因此海盜3知道,本身不管提出什麼方法,海盜2都必須贊成,因此海盜3能夠提出以下的分配方案:

海盜3: 100 個金幣

海盜2: 0 個金幣
海盜1: 0 個金幣。

也就是,只要海盜2支持海盜3,就能夠造成 2:1的局面,海盜3就能夠穩贏,不須要兼顧海盜1是否支持。因此最終的分配結果以下

有人可能會說,咱們用不用給海盜2分配一點好處?例如分配給海盜2一個金幣,條件3有個規則:在收益相等的狀況下,海盜們會傾向把提出者扔到海,答是不須要的,雖然海盜2沒有分配到金幣,可是他並無被扔進海里,這就是最大的好處了

看到這裏,你是否是也知道若是是 4 個海盜或者 5 個海盜,你也會分配了?我相信你大機率知道怎麼分配了,不過我仍是要講一下,由於後面隨着人數的增長,也並無你想的那麼簡單,而且後面還會和遞歸算法串講一下。

三、只有4個海盜的狀況

這個時候又忽然蹦出個海盜4,而且海盜4是已經知道了海盜3的分配方案了,這個時候海盜4只須要得到其中兩我的的支持便可。

如何得到其中兩我的的支持?

這很容易,拿點錢給海盜1和海盜2就能夠了,海盜4能夠提出以下分配方案

海盜4:98個

海盜3:0個

海盜2:1個

海盜1:1個

注意,在收益相等的狀況下,海盜們會傾向把提出者扔到海里,因此海盜4必須在海盜3的基礎上,多給海盜1和海盜2一個金幣,這個時候海盜1和海盜2必定會支持海盜4,此時的局面是 3:1(支持:反對的人數),所以只有4我的的狀況下,分配方案爲:

有人可能會問,爲啥要拉攏賄賂海盜1和海盜2,咱能不能嘗試賄賂下海盜3?

答是咱賄賂不起,若是你有這樣的想法,只能說明你不是一個合格的海盜!

四、只有5個海盜的狀況

若是有5個海盜,其實海盜5和海盜4同樣,只須要拉攏兩我的就能夠了,那要拉攏誰呢?

這也不難,首先必須得賄賂海盜3,給他一個金幣就能夠了,其次咱們在海盜2或者海盜1之中拉攏一我的便可,想要拉攏哪個,隨你開心,因此海盜5能夠提出以下方案:

到這裏,就已經分配完畢了,是否是以爲很難以想象?本來還怕本身不管提出啥方案,都會被扔進海里,結果是如此出人意料。之後和別人分贓,是時候拿出這個規則了

問題的核心

我以爲這個問題,很是像咱們平時學算法中的遞歸,例如對於遞歸方式:f(n) = f(n - 1) + f(n - 2),而且給出初始條件 f(1) = f(2) = 1。

那麼若是一開始要你算 f(n),你也是無從下手的,f(n) 必須基於 f(n - 1) 和 f(n - 2),類比於這個海盜問題的話,

一、n 至關於海盜的個數。

二、只有兩個海盜時,咱們能夠很是容易着給出方案,至關於初始條件 f(1) = f(2) = 1

三、f(n) = f(n - 1) + f(n - 2) 至關於海盜之間定下的規則

因此呢,有時候遇到這種看似很複雜的博弈問題,不妨先從問題的規模儘可能小處理起,後面在逐一增長問題的規模。

不妨來個拓展

若是又忽然冒出了一個海盜呢?也就是在一共有 6 個海盜的狀況下,該如何處理呢?

有沒有以爲,從 5 個到 6 個,是一個分水嶺?由於從 5 個開始,就有多種分配方案,這個時候就更加考驗你的邏輯了。

不過,對於 6 個,我姑且給你們分析一下,固然,只是我認爲是這樣,其實我看過別人的也有不一樣的版本。下面我來分析下海盜6能夠給出的策略:

首先,咱們必須拉攏 3 我的,顯然,咱們是不可能會拉攏海盜5的,由於咱拉不起。由於咱們會從海盜1 ~ 海盜4中考慮。

一、首先咱們必須拉攏海盜4,由於他最容易賄賂,給他 1 個金幣便可。

二、接着,咱們拉攏海盜3,給他兩個金幣便可

此時,咱們已經拉攏了海盜3和海盜4,接下來咱們須要在海盜1和海盜2中選一個便可,那麼問題來了,該給海盜1和海盜2他們多少,他們才願意贊成你的方案?

顯然,若是咱們給海盜1分配 3 個金幣,海盜2分配 0 個,顯然海盜1必定會贊成。

可是,真的須要給海盜1分配 3 個嗎?若是我給他 2 個金幣,他會贊成嗎?

答是會的,爲何呢?由於在海盜5的方案中,要麼是海盜1得到2個,要麼是海盜2得到2個,因此對於海盜1來講,海盜5會不會賄賂他,存在不肯定性,所以做爲一個理智的海盜,海盜1是會贊成海盜6給他2個金幣的方案的。

所以海盜6能夠提出以下方案

事實上,也能夠從機率上來證實,在海盜5的方案中,因爲海盜1和海盜2存在不肯定性,咱們能夠進行折算,折算成海盜1和海盜2各自得到一個金幣,因此咱們給他兩個金幣,他必須得贊成

固然,若是海盜6要給海盜2分配2個金幣,而後給海盜1分配 0 個金幣,也是能夠的。**總的來講就是,咱們能夠從海盜1,海盜2,海盜3中選出兩我的,而後每人給他兩個金幣便可以,這樣的組合有三種,所以海盜6能夠由以下 3 種方案:

分析到這裏,就已經結束了,若是又蹦出一個海盜呢?也就是說一共有 7 個海盜呢?

剩下的就交給你了,鑑於篇幅,我就不繼續分析了。

最後

這麼多年以來,今年的春節,估計是最特殊的春節了,想必你們都在家裏呆着,今天這道題也是我花了整整一個上午寫的,但願可以讓你有所收穫,或者可以能夠給給解解悶,咱們下期再見!

老鐵,要不點個贊再走可好?麼麼噠

一、給俺點個讚唄,可讓更多的人看到這篇文章,順便激勵下我,嘻嘻。

二、老鐵們,關注個人原創微信公衆號「帥地玩編程」,專一於寫算法 + 計算機基礎知識(計算機網絡+ 操做系統+數據庫+Linux)。

保存讓你看完有所收穫,不信你打我。後臺回覆『電子書』送你一份精選電子書大禮包,包含各種技能的優質電子書。

做者簡潔

做者:你們好,我是帥地,從大學、校招一路走來,深知算法計算機基礎知識的重要性,因此申請了一個微星公衆號『帥地玩編程』,專業於寫這些底層知識,提高咱們的內功,帥地期待你的關注,和我一塊兒學習。 轉載說明:未得到受權,禁止轉載

相關文章
相關標籤/搜索