字:
關燈 護眼
元小說 > 神的模仿犯 > 第314章 第313章 拜占庭容錯算法

第314章 第313章 拜占庭容錯算法 (1/2)

第313章 拜占庭容錯算法

蔡志遠繼續解釋道:

“比如,現在一共有五名將軍,其中兩名將軍認爲應該進攻,而另外兩名將軍認爲應該撤退。

“這時候,第五名將軍是個叛徒,他告訴進攻的將軍『我也會進攻』,又告訴撤退的將軍『我也會撤退』。

“於是,想要進攻的將軍認爲,現在有三支軍隊同意進攻,超過了半數,所以明天應該進攻。

“而想要撤退的將軍認爲明天應該撤退。

“最後的結果,就是兩個將軍進攻,兩個將軍撤退,導致戰爭失敗。

“這就是『去中心化』所帶來的問題,因爲這五個將軍都是平級的,沒有一個擁有絕對權限的指揮者,所以在互相商量策略的過程中,就會產生這樣的問題。”

鄭傑恍然點頭:“原來如此!那這個辦法怎麼解決呢?也沒辦法驗證具體是哪個將軍在說謊吧?”

蔡志遠解釋道:“其實要解決這個問題很簡單:多問幾遍就行了。

“假設我是其中一名將軍A,而將軍B告訴我他要和我一起進攻。

“如果我信了,那就有可能會被騙,因爲將軍B有可能是叛徒,他可能只跟我說了進攻,跟別人說了撤退。

“所以,這時候我應該再去問將軍C,我問他:‘將軍B跟你說的是進攻還是撤退?’

“然後我再去挨個問其他所有的將軍,彙總將軍B給他們說的所有信息。

“其他將軍告訴我的『將軍B給他們的信息』也不一定真實,因爲其他將軍裏面可能也有叛徒,可能存在『將軍B跟他們說進攻,他們卻告訴我將軍B說了撤退』這種情況。

“所以,我挨個問一遍『將軍B對你們說了甚麼』,如果『進攻』比較多,那我就把將軍B的意見記爲『進攻』;

“然後再挨個問一遍『將軍C對你們說了甚麼』,如果『撤退』比較多,那我就把將軍C的意見記爲『撤退』。

“就這樣,我通過反覆套娃的方式,不斷地排除少數派答案,最後得出的結論,就是更準確的『多數派答案』。

“在滿足『拜占庭容錯』的情況下,我們強制要求所有將軍都遵守這一套策略,並且必須堅決執行最終的結論。

“那我們就可以確保大家一起進攻或者一起撤退。”

鄭傑有些困惑:“在滿足『拜占庭容錯』的情況下?也就是蔡哥你之前說過的,叛徒人數必須少於三分之一?”

蔡志遠點了點頭:“是的。

“我們用3名將軍的情況來舉個例子:

“假設3名將軍裏面,將軍C是叛徒,故意傳遞錯誤的信息。

“將軍A會首先向將軍B和C說『進攻』。

“但是將軍B接到命令之後無法確認將軍A是不是叛徒,所以他要先問將軍C,『將軍A給你的命令是甚麼』,而將軍C是叛徒,所以會故意說『將軍A給我的命令是撤退』。

“因爲只有三個將軍,所以將軍B就無法判斷將軍A和將軍C到底哪個是叛徒,因爲『進攻』和『撤退』的命令各一票,無法形成多數。

“同理,將軍B在執行這個策略的時候,也沒法判斷將軍A和將軍C哪個是叛徒。

“這是最簡單的一種情況,如果將軍的數量變多,比如同時有7個將軍,其中有2個是叛徒的話,情況會變得複雜很多,要套娃很多次才能最終得到結論。

“所以我才說,這種問題不需要自己真的推算,只要記住結論就行了。

“結論就是,當叛徒人數達到三分之一或者更多時,這個問題就不可解。

“反過來說,想要讓這個問題可解,就要把叛徒人數控制在少於三分之一的情況。

“套一下三個房間的人數,就一目瞭然了。 “『4人房間』,3人答題,所以只要有1名惡意自由人,這個問題就不可解。

“『8人房間』,7人答題,在房間中有3名惡意自由人的情況下,不可解。

“『13人房間』,12人答題,在房間中有4名惡意自由人的情況下不可解。”