奇偶校验——黑白棋通信

先看一个黑白棋通信游戏:

需要知道这个游戏规则背景:

魔术师和他的徒弟上台表演,下面有三个观众,魔术师蒙住眼睛。

  1. 桌子上随机排列七个黑白棋子,魔术师蒙着眼睛,看不到棋子。

  2. 徒弟才看完这个七枚棋子后,在最右面也添上一个棋子,与其他棋子并排,这时有八枚棋子,魔术师依然蒙着眼睛。

  3. 此时观众可将一枚棋子翻转(规定第八个不可动),或不反转任何棋子,此间,徒弟观众一言不发,魔术师还是蒙着眼睛,并不知道观众有没有反动棋子。

  4. 魔术师摘下眼罩,观察八枚棋子,然后马上就能说出观众翻转了棋子没有翻转棋子

TIPS,思考一下魔术师怎么识破观众的行为呢?

  • 徒弟只放了一个棋子,而且放旗子的动作在观众的动作之前,那么,徒弟是如何向魔术师传递有没有翻转棋子的信息呢?

  • 魔术师和徒弟虽然没有用语言交流,但是仅仅通过一枚棋子进行交流。思考一下交流的方法。

答案:

  • 徒弟在观众摆放的7枚棋子中,数出黑棋子的个数,如果黑棋子是奇数,在最后一位添加一颗黑棋子。如果黑棋子是偶数,则添加白棋子。

  • 所以观众只要翻了棋子,黑棋子的奇偶性一定会发生改变,如不翻动,奇偶性不变。

  • 所以魔术师摘下眼罩,数一数黑棋子的个数就好啦。

奇偶校验

  • 将这个戏法的黑白棋子看做是二进制的0和1,黑棋子看成1,白棋子为0。那么他就和计算机中的奇偶校验方法是一样的。

  • 徒弟是发送方,魔术师是接收方,中途翻动棋子的观众就是干扰通信的噪音。

  • 徒弟作为发送方放置的一枚棋子,在通信领域中被称为奇偶校验位。魔术师作为接收方,通过检查奇偶性来判断是否因为噪音发生了通信错误。至于奇偶校验位是设为奇数还是偶数,那个是发送方和接收方先前商定好的。

建模:

奇偶校验是一种简单的错误检测方法,通过在数据末(奇偶校验位)尾添加一个校验位,使数据中 1 的个数满足奇数(奇校验)或偶数(偶校验)。

计算数据中 1 的个数:

数据:1 0 1 0 0 1 0

1 的个数:1 + 0 + 1 + 0 + 0 + 1 + 0 = 3(奇数)。

事先约定校验奇数即可。

最后一位加上1,表明前面的黑棋子有奇数个,

或者 最后一位加上0,表明前面的白棋子有奇数个,

最后根据校验位去做计算1或者0是否为奇数即可。

这个校验算法的优点:

  • 实现简单,计算速度快。

Reference

https://www.w3cschool.cn/dqa2du/d3ib12j6.html