分享

“乌有国毒酒事件”的数学分析

 长沙7喜 2017-03-22
荟思

乌有国王如何才能在酒会举行前及时找到毒酒?原来利用非十进制表示法可以很方便地设计试酒方案。



今天我们来讨论一下最近大家都非常感兴趣的“乌有国毒酒事件”引发的数学问题。问题如下:

乌有国王要举行酒会,但为酒会准备的500桶酒中有一桶被下了毒。酒会48小时后就要举行,国王决定用囚犯来试毒,不介意死多少个囚犯,只要能在酒会前找到毒酒。已知毒酒喝下去后会在23-24小时之间发作,请问最少需要多少个囚犯才能保证在酒会举行前找到毒酒?

因为希望使用的囚犯人数要尽量少,容易想到的办法是让每个囚犯在允许的时间内试尽量多的酒。由于毒酒喝下后,最早会在23小时后毒发,所以囚犯只有23小时是可以试酒的。而同一个小时内喝下的酒无法分辨,所以每个囚犯可以安排试23桶酒。于是用除法可以算出用22个囚犯能保证找到毒酒。

上面这个解法是小学三年级的思路,因为用除法解决分配问题是二三年级的主要学习内容之一。不过足够聪明的小学三年级孩子可以把囚犯人数减少2人。注意到题目里有一个条件——毒酒只有一桶。所以每个囚犯可以分配25桶酒来试毒。如果囚犯在还没试完所有酒就已经毒发,虽然后面的酒还没试,但毒酒已经被找到了。于是用除法可以算出囚犯人数是20人。为什么每个人不能分配超过25桶酒?因为第26个小时喝下的酒是第48-49小时毒发,囚犯喝了也无法赶在酒会前判定酒是否有毒。

还有没有更聪明的办法能够进一步减少囚犯人数呢?有!而且使用的囚犯人数还可以大幅度减少。我们不妨称这种解决方案为“交叉检验法”,它只需要用2名囚犯就可以在规定时间内找到毒酒。把500桶酒每23桶作为一组,则一共可以分为22组(第22组不足23桶)。每组中的酒桶都从1到23编号。两名囚犯的试酒方法如下:第一名囚犯每个小时喝一组酒——第一个小时把第一组中的23桶酒都尝一遍,第二个小时把第二组中的23桶酒都尝一遍,等等。他只用22小时就可以完成整个过程。第二名囚犯每个小时尝对应编号的酒——第一个小时试每组中编号为1的酒,第二个小时试每组中编号为2的酒,等等。他需要23小时才能完成整个过程。

如何根据囚犯毒发的时间来定位毒酒呢?如果第一个囚犯在25-26小时的时段内毒发,说明毒酒在第三组的23桶酒里。然后再看第二个囚犯的毒发时间。如果他是在28-29小时的时段内毒发,则毒酒是来自第三组中编号为6的酒桶。

这种试酒方案如果以形象的方式来表述,就是把500桶酒排成22行23列的形状(不是刚好完整的长方形),第一个囚犯每个小时试一行酒,第二个囚犯每个小时试一列酒,然后根据他们各自的毒发时间确定毒酒所在的行和列,故谓之“交叉检验”。

从上面的分析中可以看出来,500桶酒显然不是使用两个囚犯可以检验的最大数量。由于每个囚犯最多可以有25次试酒机会,所以两个囚犯“交叉检验”的酒桶数量应该是25×25=625。

现在考虑一下增加囚犯数量时可检验的酒桶数量将如何变化。如果增加第三名囚犯,可检验的酒桶数量应当是625×25=15625,具体做法为:将这些酒桶每625桶分为一组,则共有25组。第一名囚犯每个小时尝一组酒,25个小时可将所有酒尝一遍。每组的625桶酒摆成25行25列,第二名囚犯第一个小时试各组中的第一行酒,第二个小时试各组中的第二行酒,等等。需要注意的是,他每个小时也会试625桶酒。第三名囚犯的试酒方式跟第二名囚犯类似,只不过是按列来试酒。

据此可以推测,如果使用n名囚犯,可检测的毒酒数量为25^n(25的n次方)。但具体如何制订试酒方案呢?为了更好地描述方案,我们可借助数的“25进制”表示。什么是25进制表示?我们现在使用的数的表示方法是十进制。由于已经太熟悉这种表示方法,大多数人已经理所当然地认为每个数就应该是现在看到的这个样子,就像每个人的长相一样,看到一张脸就能认出他是谁。嗯,我忘了现在的整容技术已经先进到可以把人变成完全不同的样子。那么在理解上面这个比喻时,请假设世界上还不存在整容技术。

事实真相与我们的想当然却正好相反。我们每天面对的数字——阿拉伯数字,相比其他更古老的数字都年轻得多。对古罗马人来说,数字三的长相应当是“III”而不是“3”,数字七的长相则是“VII”而不是“7”。同样地,在十进制表示法出现以前,二进制、八进制、十二进制、六十进制等记数系统就已经在不同地区出现过。

毕竟我们已经太习惯使用十进制的表示方式,为了更容易理解如何利用数的25进制表示方式来设计试酒方案,我们先以十进制为例做一次练习。不妨假设毒酒有100桶,而每个囚犯只有10次试酒机会(每次可以试多桶酒)。我们把100个酒桶从0到99编号,其中的一位数也理解为十位数为0的两位数,例如8表示成08。第一个囚犯在第一个小时试编号的十位数字为0的酒桶,第二个小时试编号的十位数字为1的酒桶,等等。第10个小时试编号的十位数字为9的酒桶,即90-99号酒桶。第二个囚犯的试酒方案为:第一个小时试编号的个位数字为0的酒桶,即00,10,20,30,40,50,60,70,80,90。第二个小时试编号的个位数字为1的酒桶,第10个小时试编号的个位数字为9的酒桶,即09,19,29,39,49,59,69,79,89,99。根据第一个囚犯的毒发时间,我们可以确定毒酒编号的十位数字,再根据第二个囚犯的毒发时间确定编号的个位数字,于是毒酒就被找到了。

如果使用25进制,意味着逢25才“进1”,所以“10”不是表示数字“十”而是“二十五”。而在“23”这个符号中,“2”是表示2个25,3表示3个1,所以它表示的是数字五十三。不难发现,基于25进制表示的两位数一共可以表示六百二十五个不同的数(允许首位数字为0)。于是,六百二十五桶酒就可以在25进制下用不同的两位数编号,而两名囚犯分别根据编号的第一位数字和第二位数字在不同的时间试酒,根据他们的毒发时间就可以把毒酒编号中两个位上的数字都确定下来。

需要说明的是,现在由于使用十进制表示,所以我们一共需要10个不同的数字,即现行的阿拉伯数字0,1,2,3,4,5,6,7,8,9。计算机中使用的16进制表示需要用16个不同的数字,除了直接使用已有的10个数字外,还要补充6个。我们通常用大写英文字母A-F来代表这6个数字,而没有另外创造6个新的符号。字母A代表数字十,B代表数字十一,...,F代表数字十五。假如有一天人类下决心使用25进制表示,那么就得增加15个新的数字符号了。

利用25进制表示来表述试酒方案,可以很方便地把更多名囚犯的安排说清楚。如果有n名囚犯,就用n位的(25进制)数来对酒桶进行编号,而每个囚犯用来确定毒酒编号的一位数字。因此,n名囚犯可以试的酒桶的最大数量就要看n位25进制数可以表示出多少个不同的数。

最后说一下原问题中一个容易被忽略的条件——“不介意死多少个囚犯”。从人道的角度说,多用一些囚犯来试酒没关系(因为参加试酒并不意味着一定会中毒),而因为参加试酒而可能中毒的囚犯人数应该要尽量少。但这样一来,这个问题就没有太多讨论意义了,直接用小学三年级的办法就可以得到答案,只有一名囚犯会因为参加试酒而中毒。甚至,直接使用500名囚犯,还可以在最短的时间内找到毒酒,中毒的也只有一个人。反之,如果使用“交叉检验法”,虽然参与试酒的囚犯人数很少,但他们都必定会中毒,而且这种试酒方案也必须根据两个人的毒发时间才能找到毒酒。

当然,如果将“乌有国毒酒事件”当做一个数学问题来讨论,我们不必将注意力都放在人道角度。数学作为一种应用工具的存在,更多的是提供解决方案和提供技术参考,而不是代替人们作出选择。



推送名家观点
反思教育理念
探讨教育问题
关注少儿数学教育
专业
欧拉数学荟
微信号:louwen1050

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多