小朋友,排排坐

        128位小朋友带着帽子围坐一圈,帽子有红黄绿蓝四种颜色。每个小朋友只能看到其他小朋友的帽子颜色。现在老师要求小朋友猜测自己的帽子颜色,期间不准传递任何暗号。问是否有策略使128位小朋友全部猜中的可能性最大?

        答案揭晓——存在一个策略,无论有多少小朋友,他们全体猜对的概率都是1/4。

        其实静下心来仔细想想这个结论也没有什么可惊奇的——全体小朋友的帽子信息量有128*log(2)。小朋友们各自拥有的信息量为127*log(2),缺失了log(2)的信息量。如果有一种策略,可以用相同的信息补正小朋友各自缺失的部分。那么小朋友们只需事先约定好这个信息,猜对这个信息不正是1/4的概率吗?

        说了那么多废话,烂柯还是没有提到那个策略是什么。不过有了之前的提示,相信有朋友已经猜出这个策略了——很简单,用0123代替红黄绿蓝编号,然后小朋友们再约定所有编号之和除以四的余数。因为所有小朋友的帽子编号之和是相同的,所以只需要知道这个余数,就可以推测出缺失的任意一位的编号。比如说,五个小朋友帽子颜色依次为蓝蓝红黄绿,转换为数字就是33012,编号之和为9,除以4余1。绿帽子小朋友看到的颜色是蓝蓝红黄,即3301,和为7。如果绿帽子小朋友知道余数1这个信息,他就可以立马推算出自己的编号——7只有加上2才能使余数为1。同理,其它小朋友也都能根据“余数1”分别计算出自己的帽子颜色。

        所有小朋友所缺失的信息都能用一个相同的信息填补——余数。所以大家只需要在猜测前约定好一个余数就可以了。1/4的概率选中正确的余数,全体猜对;3/4的概率全体猜错。

        所以?知道了这个故事又如何?好吧确实不能怎样,但是这实际上就是一种hash的思想。它可以有一些有趣的应用。举个例子,给一篇文章的末尾添加一个字符,那么无论这篇文章中的哪个位置看不清了都可以纠正回来(不过关于纠错算法,有很多巧妙的手段如RS编码,BCH编码等,犯不着用这么原始低效的手段)。