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

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

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

Read more…

公平分割问题:均衡分割与免嫉妒分割

    大家或许都知道经典的两人分饼问题——为了实现公平性,只需要一个人切,另一个人选即可。不过,在现实生活中,情况远没有那么理想。如果把大饼换成蛋糕,问题就复杂了很多——你想吃奶油,我想吃巧克力,他想吃水果⋯⋯如果分蛋糕的人对蛋糕各部分的价值看法有分歧,还能实现公平的分割吗?如果分蛋糕的人不止两个呢?

    事实上,对于两个人分蛋糕的情况,经典的“你来分我来选”的方法仍然是非常有效的,即使双方对蛋糕价值的计算方法不一致也没关系。首先,由其中一人执刀,把蛋糕切分成两块;然后,另一个人选出他自己更想要的那块,剩下的那块就留给第一个人。由于分蛋糕的人事先不知道选蛋糕的人会选择哪一块,为了保证自己的利益,他必须(按照自己的标准)把蛋糕分成均等的两块。这样,不管对方选择了哪一块,他都能保证自己总可以得到蛋糕总价值的 1/2 。
    不过,细究起来,这种方法也不是完全公平的。对于分蛋糕的人来说,两块蛋糕的价值均等,但对于选蛋糕的人来说,两块蛋糕的价值差异可能很大。因此,选蛋糕的人往往能获得大于 1/2 的价值。一个简单的例子就是,蛋糕表面是一半草莓一半巧克力的。分蛋糕的人只对蛋糕体积感兴趣,于是把草莓的部分分成一块,把巧克力的部分分成一块;但他不知道,选蛋糕的人更偏爱巧克力一些。因此,选蛋糕的人可以得到的价值超过蛋糕总价值的一半,而分蛋糕的人只能恰好获得一半的价值。而事实上,更公平一些的做法是,前一个人得到所有草莓部分和一小块巧克力部分,后面那个人则分得剩下的巧克力部分。这样便能确保两个人都可以得到一半多一点的价值。
    但是,要想实现上面所说的理想分割,双方需要完全公开自己的信息,并且要能够充分信任对方。然而,在现实生活中,这是很难做到的。考虑到分蛋糕的双方尔虞我诈的可能性,实现绝对公平几乎是不可能完成的任务。因此,我们只能退而求其次,给“公平”下一个大家普遍能接受的定义。在公平分割 (fair division) 问题中,有一个最为根本的公平原则叫做“均衡分割” (proportional division) 。它的意思就是, 如果有 n 个人分蛋糕,则每个人都认为自己得到了整个蛋糕至少 1/n 的价值 。从这个角度来说,“你来分我来选”的方案是公平的——在信息不对称的场合中,获得总价值的一半已经是很让人满意的结果了。

Read more…