链接毒酒问题中给出如下问题:

国王为10天后的生日宴会准备了1000桶酒,不幸的是,其中两桶被下了毒。为了确定两桶毒酒,有人提议用死刑犯试毒。毒的潜伏期为10天。 
问:至少需要多少个死刑犯才能确保找出毒酒?方案如何实行?

这个题目看上去是1000桶酒中含一桶毒酒问题的简单扩展,但是实际上难度远远大于一桶毒酒问题的情况.

利用信息论容易得出至少需要19个死囚才有可能找出所有毒酒.但是这只是一个粗糙的下界.

方案一:链接7#中六边形鸡尾酒构图使得使用6a+3个囚犯可以识别3a^2+3a+1桶酒(至多两桶毒酒)

方案二:Constant-weight code中利用别人现成的一些的结果得出一个41个囚徒解决1095桶酒的方案(正好两桶毒酒)

其中:A(n,d,w)表示那些长度为n比特的二进制数的集合的最大元素数目,其中集合中任何两个元素不同比特位数目不小于d,而每个二进制数正好有w比特为1.
那么对于A(n,w+1,w)中的方案(w为奇数),任何两个比特1数目为w的二进制数,不同的位置至少有w+1;也就是相同的比特1最多(w-1)/2个. 对应到本题,让A(n,w+1,w)桶酒让n个囚徒喝,其中n个比特位分别对应n个囚徒.每个二进制数对应一桶酒.每个二进制数上比特1对应的囚徒要喝掉对应的酒.
那么如果某桶酒有毒,那么那个对应的二进制数所有比特1对应的囚徒必然死去.反之如果某桶酒无毒,那么由于只有两桶毒酒,所以这个对应的二进制数最多有2*(w-1)/2=w-1个囚徒死去.
也就是我们可以根据每桶酒对应的二进制数所有比特1对应的囚徒是否全部死去来判断酒是否有毒.

链接25#给出一个复杂度的上界O(log^2(n)),而链接30#给出方法二在n充分大时可以到达复杂度O(log(n)),所以是非常不错的方法.

方案三:Union-free Hypergraphs and Probability Theory利用2^n阶有限群中的一个构造达到了4n个囚犯解决2^n桶酒的问题,从而利用40个囚徒解决了1024桶酒的方案(正好两桶毒酒)

方案四:令人惊奇的是通过google找到了一种概率方法,竟然可以优化到了33个囚徒.链接中的附件给出了33个囚徒和34个囚徒解决1000桶酒问题的一个方案(两桶毒酒)

链接65#通过计算机搜索找出一些在酒桶数目较小时的较优方案,得出囚徒数目不超过5时只能识别n+1桶酒,6人可以识别8桶,7人识别10桶.

而8人能够识别13桶(但是不知道是否最优,更多人时同样无法确保最优),9人16桶,10人20桶,11人26桶,12人32桶,13人39桶,14人47桶

方案五:但是没想到tannis_jin通过给出将类方案一方案进行改善也取得非常好的效果.实际上,比如方案一中六边形构图中,由于我们可以将问题划分成3组不同的每组2a+1种鸡尾酒的方案,其中2a+1种鸡尾酒有一种或二种是毒酒的识别问题.对这2a+1种鸡尾酒,我们不需要2a+1个囚徒,而只需要h(2a+1)个人,其中h(2a+1)是可以识别2a+1桶含最多两桶毒酒情况的最小人数.比如h(12)<=8,h(15)<=9,h(19)<=10,h(25)<=11,h(31)<=12,h(46)<=13于是我们得到3h(2a+1)个人可以识别3a^2+3a+1桶酒.所以根据前面计算机搜索的h(46)<=13可以得出39个人可以识别1519桶酒

方案六:在73#种tannis_jin进一步指出正方形方案可以做的比六边形方案更加好,于是a^2桶酒只需要2h(a)+h([a/2])个囚徒.而74#为此专门用计算机搜索12个人的方案结果找到了12个人识别33桶酒(包含两桶毒酒)或32桶最多包含两桶毒酒的方案.由此我们得到h(32)<=12

于是1024桶酒只需要2h(32)+h(16)<=2*12+10=34个囚徒.而其中h(16)非常有可能可以达到9,只是现在计算机没有搜索出来(计算机搜索出9个囚徒可以识别正好包含两桶毒酒的16桶酒,但是如果16桶中可能两桶毒酒或一桶毒酒,那么没有搜索成功).也就是34个囚徒识别了1024桶酒(其中正好两桶毒酒)

同样,tannis_jin把正方形方案扩展成10*10*10的立方体方案,也得出一个34个囚徒的方案.这个方案也可能可以改进(主要对角线方向的识别),即34人识别1000桶酒(正好两桶毒酒)的方案

而到现在为止,我们找到的最好的方案还是通过方案四中的概率方法得出的33个囚徒解决1000桶正好包含两桶毒酒的问题,次优方案是方案六中可以得出的34个囚徒的方案.当然我们还是无法知道最优方案是多少,可以确定的其范围在19个囚徒到33个囚徒之间

1000桶酒中含两桶毒酒问题相关推荐

  1. 1000桶酒中寻找一桶毒酒算法

    有1000桶酒,其中1桶有毒.而一旦吃了,毒性会在1周后发作. 现在我们用小老鼠做实验,要在1周后找出那桶毒酒,问最少需要多少老鼠, 如何检测(老鼠的使用量越少越好,注意,毒性1周后才会发作,而且一周 ...

  2. 【逻辑】500桶酒,其中1桶是毒酒,找毒酒

    题目 500桶酒,其中1桶是毒酒:48小时后要举行酒会:毒酒喝下去会在之后的第23-24小时内毒死人:国王决定用囚犯来试酒,不介意囚犯死多少,只要求用最少的囚犯来测试出哪一桶是毒酒,问需要最少需要多少 ...

  3. 10只老鼠10只杯检测1000瓶酒中的毒酒

    二进制真是好东西..... 现有1000瓶葡萄酒,只知道其中有一瓶是毒酒,但不知道是哪瓶,喝一点点毒酒,就会致命.不想因此浪费这1000瓶酒. 故给出10只老鼠,10只杯,一次性找出那瓶酒. Solu ...

  4. 智力题:一次测试找出1000瓶酒中的唯一一瓶毒酒

    题目(这是一道面试的智力题目):1000瓶酒.10只老鼠.有一瓶酒有毒,每只老鼠可以喝无限多的酒,如何测一次就找出哪瓶酒有毒? 方法: 每瓶给一个编号,把编号做成二进制. 2的10次方=1024 (最 ...

  5. 毒酒问题---1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。问最少需要多少只老鼠可在一周内找出毒酒

    如题. 本题考查的是二进制编码问题. 如对1000桶按1~1000编码,需要10位二进制数. 因此只需要取10只老鼠,每只老鼠只喝其对应位数为1的编号的酒. 即10只老鼠按以下编码: 第一只 0000 ...

  6. java国王毒酒答案,换换脑子500桶酒国王用囚犯找毒酒答案-500桶酒其中1桶是毒酒找毒酒答案最新版【附公式详解】-东坡下载...

    烧下脑子,请诸位为国王出个主意:500桶酒,其中1桶是毒酒:48小时后要举行酒会:毒酒喝下去会在之后的第23-24小时内毒死人:国王决定用囚犯来试酒,不介意囚犯死多少,只要求用最少的囚犯来测试出哪一桶 ...

  7. java国王毒酒答案,500桶48小时国王囚犯答案解析-奥数500桶酒其中1桶是毒酒试题及答案【附原题】完整打包下载-东坡下载...

    最近一道500桶酒的奥数试题让许多小伙伴感到为难,不知道答案到底是多少,小编为各位收集整理了奥数500桶酒其中1桶是毒酒试题及答案,为你详细解析,还有图文解答,想查看答案的小伙伴赶紧来下载吧! 奥数5 ...

  8. 有1000桶酒,其中1桶有毒.而一旦吃了,毒性会在1周后发作.现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠.

    有1000桶酒,其中1桶有毒.而一旦吃了,毒性会在1周后发作.现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠. 很老的笔试题了. 答案是10只. 把十只老鼠看成二进制的位数,把酒桶 ...

  9. 程序员如何赚到自己人生中的第一桶金?是100万还会是1000万,大家不妨一起探讨一下!...

    伴随着多年的java开发经验,越来越想着自己出去独立门户要不创业要不干点别的,反正总觉得一直打工么有什么出路,那么作为一个程序员出身的人怎样才能够转到自己人生中的第一桶金那?好多的程序员可能想到的多数 ...

最新文章

  1. android展示gif循环,android:GIF动画循环完成听众
  2. jdk 中英对照 百度网盘_Hadoop部署一jdk与MySQL
  3. AcWing 756. 蛇形矩阵
  4. 用注解方式写定时任务
  5. php js offset,获取元素的偏移量offset实例详解
  6. centos7 开启防火墙端口 firewalld
  7. AndroidUtilCode框架 fileutils学习总结
  8. 唯品会等被纳入MSCI指数,中概股迎来春天
  9. 性能和成本的综合架构:单元化架构
  10. 形态学空间格局分析(MSPA)—ArcGIS结合Guidos软件
  11. win10服务器怎么连接显示器不亮,Win10检测不到第二个显示器怎么解决?Win10外接显示器黑屏解决方法...
  12. win10添加计算机语言,win10输入法,详细教您怎么在win10里添加输入法
  13. 过往云烟~如梦随风飘!!!
  14. 第一讲:计算机基本结构
  15. 戏剧专业毕业论文题目
  16. 美式期权、欧式期权比较分析——定价与风险管理
  17. linux系统日志怎么退出,linux系统日志的清除
  18. NAT-T下的端口浮动
  19. 1939 Users That Actively Request Confirmation Messages
  20. 如何迁移outlook邮件到另一个硬盘_急!如何转移outlook本地邮件

热门文章

  1. 微信大更新:最全最靠谱的微信说明书
  2. js 获取get参数方法
  3. python对平面设计有用吗_现在还有学平面设计的必要吗?
  4. linux脚本求命令行上整数和,《Linux命令行与shell脚本编程大全》 第二十二章 学习札记...
  5. (转)刚毕业的大学夫妻
  6. 巴巴数据恢复从iOS恢复联系人
  7. 视觉显著性发展与现状——本科毕业设计总结
  8. 基于51单片机的电子秒表设计
  9. 择校秘籍|浙大工程师、华科机械 和 南开人工智能 应该怎么选?
  10. 【casnode】(3):切换回默认证书,解决casnode论坛的登陆跳转问题,可以正常登陆/注册了。