前面几篇文章介绍了解决拜占庭将军问题的算法——**OM(m)算法和SM(m)**算法。但这个两种算法都是在一个将军能够直接与所有其他将军通信的情况下,进行讨论的。这篇文章将移除这个假设,阐述并非所有的将军都能直接通信的情况下,拜占庭将军问题算法的演变。
建模
所有将军组成一个有限简单无向图,图的两个节点的边以为着这两个将军可以直接发消息。现在将**OM(m)算法和SM(m)**算法从全连接的图扩展到多连接的图。
正则邻居集
为了扩展算法,定义如下概念
定义 1.
(a) 节点的集合 { i 1 , . . . , i p } \{i_1, ..., i_p\} { i1,...,ip}被称作节点 i i i的正则邻居集,如果满足:(i) 每个 i j i_j ij是节点 i i i的邻居;
(ii) 对于每个不同于 i i i的节点 k k k,存在开始于 i j i_j ij且不经过 i i i的路径 r j , k r_{j,k} rj,k,且任意两个不同的路径除了 k k k之外没有公共节点。(b) 图 G G G是一个***p-正则***的,如果每个节点都拥有包含 p p p个不同节点的正则邻居集。
如下图所示,图6是一个3-正则图,而图7不是3-正则图,因为中心的节点不存在包含3个节点的正则邻居集。
OM(m)算法扩展
现在将**OM(m)**算法进行处理,来解决如果 3 m 3m 3m-正则的图 G G G中存在 m m m个叛徒的情况。
注: 3 m 3m 3m-正则的图至少包含 3 m + 1 3m+1 3m+1个节点。
算法描述
对于正整数 m m m和 p p p,当图 G G G是 p p p-正则的是,定义算法OM(m, p)
算法: OM(m, p)
(0) 选取司令的一个正则邻居集 N N N,其中 N N N包含 p p p个副官;
(1) 司令发送他的值给 N N N中的每个副官;
(2) 对于 N N N中的每个 i i i,令 v i v_i vi为副官 i i i从司令接收到的值;如果没有从司令收到指令,默认选择RETREAT。副官 i i i发送 v i v_i vi给每个其他的副官 k k