趣题:连接多个数字串时怎样避免歧义?

    今天碰上一个非常有意思的问题。有一条通信线路,每次可以发送一个由数字 0 到 9 组成的任意长的数字串。怎样巧妙地利用这条通信线路,构造一种一次能够发送两个数字串的协议?注意到,直接将两个数字串相连是不行的,因为这将会产生歧义。如果对方收到的数字串是 1234 ,他没法知道你发送的是数字串 12 和 34 ,还是数字串 123 和 4 ,抑或是 1 和 234。

    能否把第一个串的位数编码进去,比如把 12 和 34 编码成 21234 ,这样不就知道第一个数字串到哪儿截止了吗?不行,因为你不知道这个位数信息本身到哪儿截止,假如编码结果是 123456789012345 ,你就不知道第一个数字串是 1 位还是 12 位了。换一个思路,能否用几个非常特殊的数字当作分隔符呢?也不行,因为你要发送的数字串里有可能偏偏也包含了这几位数。怎么办呢?

Read more…

趣题:老鼠与毒药问题的推广

    今天的趣题来源于 IBM Ponder This 三月份的谜题

    大家应该都听说过这个老题目:有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

    这个问题的答案也堪称经典:把瓶子从 0 到 999 依次编号,然后全部转换为 10 位二进制数。让第一只老鼠喝掉所有二进制数右起第一位是 1 的瓶子,让第二只老鼠喝掉所有二进制数右起第二位是 1 的瓶子,等等。一星期后,如果第一只老鼠死了,就知道毒药瓶子的二进制编号中,右起第一位是 1 ;如果第二只老鼠没死,就知道毒药瓶子的二进制编号中,右起第二位是 0 ⋯⋯每只老鼠的死活都能确定出 10 位二进制数的其中一位,由此便可知道毒药瓶子的编号了。

    现在,有意思的问题来了:如果你有两个星期的时间(换句话说你可以做两轮实验),为了从 1000 个瓶子中找出毒药,你最少需要几只老鼠?注意,在第一轮实验中死掉的老鼠,就无法继续参与第二次实验了。

Read more…

Arrow不可能性定理:独裁是唯一完美的选举制度

    由于某些原因,最近在整理以前的日志。偶然翻到这篇日志时,顺便在 Wikipedia 复习了一下 Arrow 不可能性定理的证明,惊奇地发现这个定理的证明过程非常困难但又非常初等,是一个门槛很低、老少咸宜的思维游戏。虽然不少人都翻译过 Wikipedia 上的这段证明,但我也想自己写一个自己的理解,一来做个笔记,二来也锻炼一下自己的表达能力。

    Arrow 不可能性定理是一个与选举制度有关的定理。选举制度,说穿了就是把所有选民的意见综合成一个全体意见的算法。选民的意见,无非是候选对象在心目中谁优谁劣,完整地反应在选票上,就是候选对象们从优到劣的一个顺序;形式最完整的全体意见,也就是候选对象的这么一个排列。因此,我们可以把整个选举制度想像成一个函数,输入 n 个排列(相当于 n 张选票),将会输出一个排列(相当于选举结果)。对输入数据的任何一处小改变,都有可能导致输出结果随之变化。作为一个合理的选举制度,它必须满足一些起码的要求。我们提出两个最基本的选举制度要求:

      1. 如果每张选票都认为 X 比 Y 好,那么投票结果中 X 的排名也必须比 Y 更靠前;
      2. 如果每张选票中 X 、 Y 的相对排名都不改变,那么投票结果中 X 和 Y 谁先谁后也不能变。

    我们将证明,同时满足上述两个条件的选举制度只有一种,就是选举结果唯一地由其中某个选民的选票决定。也就是说,独裁是唯一一种完美的选举制度。为了简便起见,让我们假设候选人只有 A 、 B 、 C 三个人。你会发现,下面的证明过程很容易扩展到多个人的情况。

Read more…

趣题:能否把三维空间分成无穷个圆?

    这是一个非常经典的问题:是否存在无穷个互不相交的圆,它们并在一起就是整个三维空间?换句话说,能否用圆形既无重复又无遗漏地填满整个三维空间?

    我很早就见过这个问题。我第一次看到这个问题时,显然没能理解到这个问题的精妙之处。当时我在想,这不是显然可以吗?把三维空间想像成无穷个平行平面的并集,而每个平面又可以看作是由无穷多个同心圆组成的,这样一来整个空间不就划分成无穷个不相交的圆了吗?因此,我一直没有认真考虑过这个问题。

    直到今天我才想到,上面的方案显然有问题——那些同心圆的圆心不属于任何一个圆。这个最容易想到的构造其实是错误的。看来,这个问题似乎没那么平凡。问题重新摆在了我们面前:究竟能不能把三维空间分成无穷个圆?

Read more…

比Conway生命游戏更酷的Langton蚂蚁

不知道有多少人已经熟知 Conway 的生命游戏,但却从没听说过 Langton 的蚂蚁游戏?反正我是其中之一。直到今天我才听说了这个比生命游戏更酷的游戏—— Langton 的蚂蚁。这也是一个二维自动机形式的零玩家游戏,不过我觉得它比生命游戏有趣得多。这有两个理由:

1. 它的算法过程更简单。初始时,蚂蚁位于一张空白画布的某个方格里。如果当前蚂蚁在白色方格上,则对当前方格反色,左转 90 度,前进一格;如果当前蚂蚁在黑色方格上,则对当前方格反色,右转 90 度,前进一格。如此反复。

  

Read more…