对于此问题,一个思路是通过对问题分解: 首先一个猪在一个小时内的状态可以分为5种: 一.0分钟喝水,15分钟死去 二.15分钟活着再喝水,30分钟死去 三.30分钟活着再喝水,45分钟死去 四.45分钟活着再喝水,60分钟死去 五.60分钟还活着 对比于一个猪有5个状态,可以考虑状态机以及计算机二进制思想: 一个猪一个小时可以表示5个不同桶,两头猪可以表示5*5=25个不同的桶…… 根据题目总共1000个桶:至少需要多少头猪的话? 根据几个猪可以表达1000这个完整的数的状态: =3125>1000 所以至少5个猪可以实现这1000头猪的数值范围覆盖。 这是在思想的实现,是5头猪可以实现,但对于实际操作的理解该如何操作那? 把5头猪按照5进制的数据的排列5号,4号,3号,2号,1号(每个位可以有0,1,2,3,4状态值,只是对于值为0 的位,任何权值相乘都为0,对于实际的计算出那头猪没意义),把1000个桶按照5进制编号如01111=1+5+25+125=156,04444=624等 根据此编码可以实现1-1000个桶的编码,然后在前15分钟内, 可以分别让1号猪喝1号位为1的桶:00001,00011,00021,00031,00041,00101,00111……等等, 总共1+4+4*5+4*(1+4+4*5)+1*125=250个(在第五位只能取0和1,大于1之后已经超过1000的总桶数) 二号猪喝2号位为1的桶:00010,00011,00012,00013,00014等,类比一号猪,总共是250个个桶 三号猪喝00100,00101,00102,00103,00104等,类比以上,可得共250个桶 四号猪喝01000,01014,00024,00034,00044等,总共250个桶 五号猪只喝10000,10001,10002,10003,10004等,总共的桶数为625桶 总共喝过1625桶水,因为这里面猪喝的桶数是有重叠的,如1号和2号猪都喝过00011即3号桶,但其实前15分钟并不是所有的桶都喝过,如)02222,03333等,前15分钟可以根据5头猪的情况具体情况死还是活来判断,若只有2号猪死亡,因为只有一桶水有毒多以说明有毒的水在2号位编号为1的水桶中,因此2号猪未喝过的水可以排除(若M桶水中有N桶水都有毒,该问题就变的不一样,该问题提供大家思考解答),其他4个还活着的猪会继续喝水试毒,30分钟时,情况和15分钟时情况类似,一直到1个小时之后的情况。 第15分钟到30分钟,分别重复前15分钟的过程,活着的猪分别喝对应的位置号码为2的桶水,情况类似,但5号猪,其实已经不用再喝水了,因为第5位为2已经超过1000个桶了,所以5号猪目前休息,其实在实际动态分析的过程中,可以考虑如果5号位没有死亡的话,把他进行对剩下的未被喝过的水重新分配给这剩下的猪进行检验。不过对于该问题,静态分析就按照前面对应位喝对应位值为1的水。 重复此过程直到60分钟,根据5头猪在5个不同时间段的状态值(死,活)可以最终计算出有毒的水桶。如下图: 该表中的,猪的位号代表编号1,2 ,3,4,5的5头猪,状态的一二三四五代表其最终的状态表,每个猪的状态只能是一二三四五中的一个且必须有一个,如表中 的猪状态用1表示,如果为该结果可以分析:1号猪检测出尾码为2的水中有一个有毒,2号猪检测第二位3号有一个有毒,依次可得有毒的水为:12431,5进制转换为十进制:1+2*5+4*25+3*125+0*625=486号,即486号桶是毒水。 同时可以参考信息熵的思路:1000桶水,其中一桶有毒,猪喝毒水后会在15分钟内死去,想用一个小时找到这桶毒水,至少需要几头猪? – 知乎
猪的位号
猪的状态1
2
3
4
5
一
二
1
1
三
1
四
1
五
1
https://www.zhihu.com/question/60227816/answer/1274071217
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算