1. 程式人生 > >拜占庭將軍問題(四)——非全連線下的演算法演變

拜占庭將軍問題(四)——非全連線下的演算法演變

前面幾篇文章介紹瞭解決拜占庭將軍問題的演算法——OM(m)演算法和SM(m)演算法。但這個兩種演算法都是在一個將軍能夠直接與所有其他將軍通訊的情況下,進行討論的。這篇文章將移除這個假設,闡述並非所有的將軍都能直接通訊的情況下,拜占庭將軍問題演算法的演變。

拜占庭將軍問題

建模

所有將軍組成一個有限簡單無向圖,圖的兩個節點的邊以為著這兩個將軍可以直接發訊息。現在將OM(m)演算法和SM(m)演算法從全連線的圖擴充套件到多連線的圖。

正則鄰居集

為了擴充套件演算法,定義如下概念

定義 1.
(a) 節點的集合{i1,...,ip}被稱作節點i的正則鄰居集,如果滿足:

(i) 每個ij是節點i的鄰居;
(ii) 對於每個不同於i的節點k,存在開始於ij且不經過i的路徑rj,k,且任意兩個不同的路徑除了k之外沒有公共節點。

(b) 圖G是一個p-正則的,如果每個節點都擁有包含p個不同節點的正則鄰居集。

如下圖所示,圖6是一個3-正則圖,而圖7不是3-正則圖,因為中心的節點不存在包含3個節點的正則鄰居集。

OM(m)演算法擴充套件

現在將OM(m)演算法進行處理,來解決如果3m-正則的圖G中存在m個叛徒的情況。

注: 3m-正則的圖至少包含3

m+1個節點。

演算法描述

對於正整數mp,當圖Gp-正則的是,定義演算法OM(m, p)

演算法: OM(m, p)

(0) 選取司令的一個正則鄰居集N,其中N包含p個副官;
(1) 司令傳送他的值給N中的每個副官;
(2) 對於N中的每個i,令vi為副官i從司令接收到的值;如果沒有從司令收到指令,預設選擇RETREAT。副官i傳送vi給每個其他的副官k,如下:

(A) 如果m=1,按照路徑ri,k傳送值。其中,路徑的存在由定義1的(a)(ii)部分保證。
(B) 如果

m>1,副官i當作司令,在除去原來司令的圖中執行OM(m1,p1)演算法。

(3) 對於每個kN中的每個i,且ik,令vi為副官k在第(2)步中從副官i處收到的值;如果沒收到值,則為RETREAT。副官k使用majority(vi1,...,vip)作為他的值,其中N={i1,...,ip}

證明

接下來,要證明OM(m,3m)可以解決最多隻有m個叛徒的拜占庭將軍問題。證明過程和OM(m)演算法的證明過程類似。

引理 2 對於任意m>0p2k+m,當最多有