转换到繁體中文

您的位置 : 首页 > 报刊   

[智]死亡游戏
作者:余般石

《青年文摘(彩版)》 2005年 第04期

  多个检索词,请用空格间隔。
       
       □编著/余般石
       □提示撰写/刘一哲
       琼斯上尉对着他疲惫不堪的七名部下说:“我们中间出了一个奸细,我们必须把他除掉!”
       特种兵小队自从进入丛林以来,处处受阻,进展很不顺利,已经有四位兄弟阵亡。现在只剩下八个人,大家都已经到了崩溃的边缘。听到琼斯队长突然这么说,大家都很诧异:“那么他是谁呢?奸细又不会自己承认。”
       上尉冷冷地一笑:“虽然我不知道他是谁,但上帝一定知道。而且,上帝很乐意指明谁是告密者!上帝告诉我一个方法,很快就能把奸细找出来。”
       上尉说:“从我开始是1号,以顺时针的方向,2号是费舍,3号是加里,依此类推是哈维、伊恩、卡尔、李、马休,大家站成一个圈子。上帝给我两颗骰子,我同时将两颗骰子掷出,看掷出的是几点,把两个点数加起来,记住这个数,并一直按这个数数下去。从我开始以顺时针方向数起,每当数到这个点数时,这个人就离开,然后继续,再有一个人离开……直到剩下最后一个人,那么这个人就是清白的。然后再掷,我们再用这个方法鉴别出下一个清白者——直到七个清白者都被鉴定出来,剩下的那个就是叛徒,我们要处决他!”
       “你疯了?”副队长费舍中尉喊道,“怎么能开这种玩笑?”
       队长很坚定地说:“我没开玩笑。不这样大伙儿都得死!现在说不定只死一个,其他的七个人都能活下去!”
       马休问:“被上帝证明是清白的人就不必继续参加这个游戏了吧?”
       队长回答说:“不,他还是要参加,因为清白者有义务为其他的清白者作证。”
       其他人默默无语,游戏就这样开始了。但没有人知道,队长早有预谋:站在某个位置上是必死的,因为他已经怀疑到其中一个人了。那么请问:队长怀疑谁是奸细?
       (方华摘自《国内外数学趣题集锦》,上海科技教育出版社)
       提示:
       这道题是所谓的约瑟夫斯问题的变形。
       约瑟夫斯是公元一世纪的犹太历史学家,他领导了反抗罗马帝国的武装起义,但是失败了。弹尽粮绝之时,他和四十名犹太士兵被困在一个山洞里。这四十名犹太勇士宁死不屈,决定杀身成仁,但约瑟夫斯却另有想法。
       于是,他对四十个同伴说:“上帝是不允许自杀的。但我这里有一个不用自杀又可以殉国的方式——我们大家围成一个圆圈,从某个人开始,一二三一二三地数,凡是数到三的人,就由旁边的人成全他,让他升天,直到剩下最后一个人。虽然这个人仍然要自杀,但总比大家都自杀要好得多。”
       一心赴死的犹太士兵当然不会反对,于是便随便指了一个人开始,反正都是要死,谁先死已经不再重要了。约瑟夫斯有意地站在了31号的位置上,结果他就是剩下的那个人,他没有选择自杀,而是投降了罗马人,作为事件的记录者活了下去。
       而这道题中,队长要找出七个“约瑟夫斯”,把另外那个“倒霉鬼”干掉。
       这类问题,初看很简单,但实际上却涉及到一些让人脑感到棘手的问题,直到发明了计算机,这类问题在计算上的障碍才得以解除。而现在,约瑟夫斯问题已经成为计算机编程的典型练习题。想知道人脑和电脑的区别在哪里吗?来看看这道题吧。
       首先我们复习两个概念。
       第一个是整除求余数,数学符号是mod。如果你觉得用字母眼晕,也不要紧,反正不是正式场合,我们可以换个符号,比如“→”;如果你不介意自己的英语有口音,也可以把它称为“猫的”。举个例子: 4÷5=0余4,则4猫的5就等于4。6÷4=1余2,则6→4=2。
       第二个概念是映射,说白了就是一个萝卜对着一个坑,我们要往坑里填萝卜。
       概念介绍完,我们不妨试做一下。八个人,假设我们投出骰子点数和是10。那么2号首先出局,用算式表示就是10→8=2。
       然后剩下的七个人重新排队,最初8个萝卜各司其位,号码数与坑号相同,现在2号被剔除,那么3号萝卜要栽进2号坑、4号萝卜栽进3号坑……一直到8号萝卜占上7号坑,8号坑空着。这时你就会发现一个萝卜一个坑的好处,不然很容易搞乱。
       这时开始第二轮挑选,我们要从2号坑开始数(现在里面装的是3号萝卜)再数10个,结果好像应该是(2+10)→7=5,可是如果一个一个查,查到的明明是4号坑。哈哈,出问题了吧,我们退回第一步,10→8=2那里,结果虽然正确,但实际上省略了两个步骤——我们没有考虑从哪个人开始查。我们从第一个人开始查,查“到”第10个,所以实际经过了9个,是(1+10-1)→8=2,所以第一轮结果虽然是正确的,但用做通项就不行了。这个问题虽然简单,但确实有很多人查数时会犯这种错误。
       所以第二轮正确的式子应该是 (2+10-1)→7=4。
       4号坑,栽的是5号萝卜。
       这时你会发现,我们数的不是萝卜号,而是填满的坑;算式里说的也不是萝卜号,而是填满的坑号。有时候结果会出现0,但聪明的你应该会知道,余0就是整除,那么坑号当然就是该轮的倒数第一个坑。
       剩下的6个人再重新排序——1号不变;3号进2坑;4号进3坑;6号进4坑;7号进5坑;8号进6坑。第三轮从4号坑开始数,得出的算式是(4+10-1)→6=1,1号坑,是原装的1号萝卜,那么1号又被挑了出去。
       接下来,剩了5个人,分别是3号、4号、6号、7号、8号。重新排序,不难算出,先后出局的分别是8、4、6、3,剩下的是7号。
       当骰子掷出10的时候,7号被“证明”是清白的。
       还要继续用这个方法找出其他的“约瑟夫斯”吗?不必了吧,因为你也该发现了,重新排序是多么让人抓狂的事。这是电脑的算法,因为在电脑计算中,给坑里插萝卜却是最简单不过的——电脑的储存空间和计算频率要远远大于人脑,而且电脑不会因重复同样的过程而感到厌烦。
       人脑的优势就完全不同。人脑适合于直观的感觉,并且富于创造性——至今都没有哪台电脑能下好围棋,也没有哪台电脑能听出什么叫讽刺。
       这里有种更适合人脑的求值方法:拿一张纸,画上8×20的格子,每行保证8个格,行数则多多益善,如果20行不够,还可以继续添加。然后一行一行往里填数,比如1、2、3……填到10的时候,把这个格子涂黑,这个格子对应的是2号,那么把2号这一竖列都涂黑【图1】,然后继续填,1、2、3、4……遇到黑格子就跳过去,又数到10,再涂黑【图2】,然后把这一列也都涂黑;重复这个过程,最后当你发现只剩一列格子没有涂黑了,恭喜你,这列格子的号码就是你要的答案!【图3】
       这种方法直观得令人发指,不需要计算,也不需要公式,直接拿眼睛看就行了。虽说这种涂格子要比计算机算法计算量大,但它却绝对比计算机算法容易理解。
       越好学的方法越难用,越难理解的方法计算越方便!这种现象已经渗透到生活的各个领域,比如五笔和拼音输入法之争,苏式武器和美式武器之争。双方各有各的优势,当你要采集你所需的复杂信息时,总不可能一切如你所愿,不是把成本花在学习方法上,就是把成本花在烦琐的计算上。
       死亡游戏已经开始,你能帮琼斯队长把那个嫌疑人找出来吗?