OM(3)前奏
10 位将军,其中3位是奸细,7位忠诚将军要达成关于“攻” 和 “退” 的一致且正确的结论。
这 10 位将军是平等的,于是,他们开始疯狂的传递消息,每人都给其他所有人发消息。此时,所发消息是“自己的意见”。这是第一轮“疯狂群发”。

有点像是投票。如果10位全是忠诚将军,那就简单了。
比如对于将军 1, 只要统计下 10 张票就行了,其中 1 张是自己的,9张来自其他9位将军,然后统计出最大票数,执行即可。由于所有将军都是忠诚的,所以每位收到的票,都完全一样,大家一定得到一致的结果。
但可惜,有奸细,而且,忠诚的将军不知道谁是奸细。于是,票就乱了,因为一个奸细,可能给忠诚将军 1 的票是“进攻”,给2是“后退”。所以,忠诚将军有的得到结论是进攻,有的结论是后退,完蛋。
兰伯特说,好,我来帮你们戳穿奸细。对每位将军,不论忠奸,忠诚将军们都要对他的意见,形成统一的认识。换句话说,在上图中,将军们发出的投票,不算数了,要大家算出来的,才算数,要为每一位将军:1,2,3,4,5,6,7,8,9,10,都算出一个他的意见来。最后,按照 Majority(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10)做结论。
注意,此处 v1 可不是每一位将军原始发出来的投票,而是算出来的投票。
好,先从 1 开始。于是,我们进入 “司令-副官”模式。此时,1是司令,其他9位是副官。之后,2是司令,1,3....10是副官。所以下面的步骤一共要执行 10 轮。
从 1开始执行的 “司令-副官”模式,是要所有忠诚将军们,对将军 1 的意见,形成统一的结论。
此时,进入 OM(3),其实上面的前奏步骤,也可归入 OM(3),只是多数文章中都省略了。
OM(3)

如前,OM(3)前奏中,每位将军互相都发了各自的意见。所以,将军 1 也向其他 9 位将军发了自己的意见。
好,用将军 1 为司令,我们先对将军 1 的命令达成一致。这是第一层“司令-副官”。
注意,前面两张图,都是从 10 位将军整体的视角看待全局。
现在,我们从将军 2 的角度来看,他在 OM(3)前奏中收到了 9 张来自其他将军的意见,其中一张是将军1的意见。(将军2自己在前奏中也发出了9张意见,但那是搞他的时候才会用到,此处不表)
但将军 2 不能相信将军1的意见,因为将军1可能是奸细,将军1可能给他是“进攻”,但给别人是“后退”,这可不行。对于将军 3,将军 4,等等忠诚将军,都一样,大家都收到了将军 1 的意见,但都不敢相信。
那怎么办呢?好办,2-9位将军,发起一轮投票,这一轮投票不是关于自己的意见,也不是关于“进攻”和“后退”的。这一轮投票是关于 “将军 1 的意见是什么”。
这9位将军是平等的,于是,他们开始疯狂的传递消息,每人都给其他所有人发消息。这是第二轮“疯狂群发”。此时,所发消息是“将军1 给自己发的意见”,是原始意见,而非运算出的意见。进入 OM(2)
OM(2)

忠诚将军发的是将军1的原始意见(不论将军1是否奸细),而奸细胡乱发。
如果9位将军都是忠诚的,那就简单了,统计下票数即可。因为,即便将军 1 是奸细,但经过统计,9位将军得到总的(v2-1,v3-1,v4-1,v5-1,v6-1,v7-1,v8-1,v9-1,v10-1)都一样。
但可惜有奸细,如 OM(3)前奏一样,大家都不敢相信别人告诉自己的“将军1 给自己发的意见”,因为有奸细。
怎么办? 办法是,好,我来帮你们戳穿奸细。对9位将军中的每一位,不论忠奸,忠诚将军们都要对他关于“将军1 给自己发的意见”的意见,形成统一的认识。换句话说,在上图中,将军们关于“将军1 给自己发的意见”发的投票,这些原始意见,不算数了,要算出来的的,才算数,要为每一位将军:2,3,4,5,6,7,8,9,10,都算出一个他的“关于将军1给自己发的意见”的意见来。最后,按照 Majority(v2-1,v3-1,v4-1,v5-1,v6-1,v7-1,v8-1,v9-1,v10-1)做结论。
注意,此处 v2-1 可不是将军1给将军2原始发出来的投票,而是算出来的投票。
好,先从 2 开始。于是,我们再次进入 “司令-副官”模式。此时,2是司令,其他8位是副官。之后,3是司令,4....10是副官。这是第二层“司令-副官”。所以下面的步骤一共要执行 9 轮。算出:
v2-1,v3-1,v4-1,v5-1,v6-1,v7-1,v8-1,v9-1,v10-1 一共9个值来。(当然,之后还要算出 vx-2,vx-3....vx-10)
从 2 开始执行的 “司令-副官”模式,是要所有忠诚将军们,对将军 2 “关于将军1给自己发的意见”的意见,形成统一的结论。

现在,我们从将军 3 的角度来看,他在 OM(2)中收到了 8 张来自其他将军“关于将军1给自己发的意见”的原始意见,其中一张是将军2的意见。
但将军 3 不能相信将军2的意见,因为将军2可能是奸细。都一样,大家都收到了将军 2 的意见,但都不敢相信。
那怎么办呢?好办,3-10,8位将军,发起一轮投票,这一轮投票不是关于自己的意见,也不是关于“进攻”和“后退”的。这一轮投票是关于 “将军 2 关于将军1给自己发的意见是什么”。
这8位将军是平等的,于是,他们开始疯狂的传递消息,每人都给其他所有人发消息。此时,所发消息是 “将军 2 关于将军1给自己发的意见是什么”。进入 OM(1)。

轮回啊轮回,不再赘述。这是第三轮“疯狂群发”。
继续进入 “司令-副官”模式。这是第三层“司令-副官”。

最后进入 OM(0)
OM(0)

到了 OM(0),这是第四轮“疯狂群发”,但却不用构建第四层“司令-副官”了。
为什么不用构建第四层了?因为一共3个奸细,前面三层给他们都消除掉了。这个需要费脑琢磨,看兰伯特的证明。
从将军 4 的角度看,他收到了7个“将军3关于将军2关于将军1的意见”的原始意见,他直接做一个 Majority (v3-2-1, v5-3-2-1, v6-3-2-1, v7-3-2-1, v8-3-2-1, v9-3-2-1,v10-3-2-1),就得出了将军 4 对于“将军3关于将军2关于将军1的意见”的结论意见,而这意见与 5,6,7,8,9,10的结论意见一致。
回到 OM(1)中,我们有了“将军3关于将军2关于将军1的意见”、“将军4关于将军2关于将军1的意见”、“将军5关于将军2关于将军1的意见”、“将军6关于将军2关于将军1的意见”、“将军7关于将军2关于将军1的意见”、“将军8关于将军2关于将军1的意见”、“将军9关于将军2关于将军1的意见”、“将军10关于将军2关于将军1的意见”,这些都是结论意见。于是,做 Majority, 3 - 10 位将军对 “将军2关于将军1的意见”就达成了一致,在 OM (2)中获得了“将军2关于将军1的意见”的结论意见。
OM(1)中省略的,还有 “将军x关于将军y关于将军2的意见”、“将军x关于将军y关于将军2的意见”、“将军x关于将军y关于将军3的意见”.......“将军x关于将军y关于将军10的意见”。
在 OM(2)中由此获得“将军x关于将军y的意见”的结论意见。
回到 OM(2)中,我们有了“将军2关于将军1的意见”、“将军3关于将军1的意见”、“将军4关于将军1的意见”、“将军5关于将军1的意见”、“将军6关于将军1的意见”、“将军7关于将军1的意见”、“将军8关于将军1的意见”、“将军9关于将军1的意见”。
OM(2)中省略的,还有 “将军x关于将军2的意见”、“将军x关于将军3的意见”、“将军x关于将军4的意见”.......“将军x关于将军10的意见”。
于是,做 Majority,OM(3) 中 2 - 10 位将军对 “将军1的意见”就达成了一致。
OM(3)中省略的,将军2-10作为司令,还将获得 “将军2的意见”、“将军3的意见”、“将军4的意见”、“将军5的意见”、“将军6的意见”、“将军7的意见”、“将军8的意见”、“将军9的意见”、“将军10的意见”.
回到 OM(3)前奏中,我们有了“将军1的意见”、“将军2的意见”、“将军3的意见”、“将军4的意见”、“将军5的意见”、“将军6的意见”、“将军7的意见”、“将军8的意见”、“将军9的意见”、“将军10的意见”。于是,做 Majority,最终每一位忠诚将军都得到一致的结论。
网友评论