05 识别毒酒——几种算法和编码方式的分析和比较

0.说明

  • 本文是鸡年新年计划的内容之一:每周学习一个数学模型,写一篇总结,记录自己学到的东西和遇到的问题。
  • 这些文章并不是相关模型的全面介绍,也不是从最基础的开始,所以不一定适合数学模型的beginner,但都是些很实际的技术,希望能帮到你。
  • 这个问题可以使用多种方法(或模型)解决,本文给出了使用最优化模型和二维编码的方法,但彼此之间的效率差距很大,如果你还知道其他解决方法,欢迎你给我留言!我会不定期更新。

1. 问题 :识别毒酒

请诸位为乌有国王出个主意:有500桶酒,其中1桶是毒酒;毒酒喝下去会在之后的第23-24小时内读法身亡;48小时后要举行酒会;国王决定用囚犯来试酒。
不介意囚犯死多少,只要求用最少的囚犯来测试出哪一桶是毒酒,问最少需要多少囚犯才能保证找出毒酒?

2. 方法1: 视为一个有约束的最优化问题进行求解

添加一个假设:毒酒经充分稀释后仍然致命。
最容易想到的当然是n分法,既高数上的二分法的扩展,以下以三分法为例说明:

将500桶编号,每桶取一杯,将500杯平均分成三组,1-166号倒到一个大杯子里(记为A)、167-333杯(共167杯)倒到一个大杯子里(记为B)、剩下的167杯倒到一个大杯子(记为C),让两个囚犯随便喝两杯(比如A和B),23-24小时后根据囚徒的死亡情况就可以判断毒酒在哪一组。

然后将毒酒所在的组平分为3组,再次安排2个囚犯试喝就可以,……,如此几次就可以得知哪桶酒是毒酒。

需要说明的是,分三组,但并不需要3个囚徒试喝,只需要2个即可,如上例,若A死掉则毒酒在A组;B死掉则在B组;都没死则毒酒在C组。

以上是3分法的情况,对于n分法,识别毒酒就是求在满足(n-1)^m>=500的前提下(n-1)*m的最小值;另外一个约束条件是48小时,所以,最多只能尝试两轮,所以m最多取2

全部模型如下:

max
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
.版本 2 .如果真 (ItemID = 3020193) item.Name = “[魂玉]过关斩将” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020185) item.Name = “[魂玉]七星夺窍” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020188) item.Name = “[魂玉]五情七灭阵” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020187) item.Name = “[魂玉]捅劲” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020183) item.Name = “[魂玉]乾坤日月斩” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020179) item.Name = “[魂玉]分水斩” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020181) item.Name = “[魂玉]铁马残红” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020180) item.Name = “[魂玉]夺魂·双刀” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020173) item.Name = “[魂玉]强袭·离火式” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020182) item.Name = “[魂玉]易武·万华” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020174) item.Name = “[魂玉]五毒酒” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020163) item.Name = “[魂玉]流星飞坠” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3005005) item.Name = “[装备]红甲” item.Color = #红色 返回 (item) .如果真结束 .如果真 (ItemID = 3010053) item.Name = “[道具]锻造锤” item.Color = Color_4 返回 (item)翻译成c++ if源码
最新发布
05-24

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值