千杯酒中检测那一杯毒酒的问题及思考

曾经看到过有这样一个问题,据说是某大公司的面试题现有1000瓶葡萄酒,只知道其中有一瓶是毒酒,但不知道是哪瓶,喝一点点毒酒(发作时间为一周)就会致命。不想因此浪费这1000瓶酒。一周时间,故给出10只老鼠,10只杯,一次性找出那瓶酒。亦或是另一个版本:现有1000瓶葡萄酒,只知道其中有一瓶是毒酒,但不知道是哪瓶,喝一点点毒酒,就会致命。不想因此浪费这1000瓶酒。问最少用几只鼠能够检测出那杯毒酒。

两种提问方式没有本质区别。你可能之前看过相关的答案,但好像都没有具体的思路分析。不知道大家是不是跟我一样在看完答案之后一直在想为什么是这样的思路呢?为什么要这样想?这个问题我想了两三天,终于想出了能说服自己的思路。这里分享一下:

首先确定大的想法是:二进制,对,是神奇的二进制。那么问题来了,二进制又怎么去想解决这个问题呢,这里就是用到“抽象”,这里的“抽象”是指将0和1抽象成鼠对于酒喝与不喝两种状态,即对于任意一杯酒来说,鼠喝之为1,不喝为0。那么一只鼠可以唯一的描述两瓶酒:不喝第一瓶酒为0,喝第二瓶酒为1,或者相反亦可。以此类推,两只鼠可以唯一的描述四瓶酒:00 01 10 11,那有人可能会问了,这样就可以判断哪瓶酒是毒酒吗?没错!! 我们来继续分析:我们现在可以用鼠来唯一的描述每瓶酒了,题目说只有喝了毒酒的鼠才会死,而且只要喝了就会死(一周后发作)。一周过后观察鼠的死亡情况,我们可以肯定的是,死的鼠一定喝了毒酒,那么死鼠对于毒酒的描述就是1,活鼠则为0。问题解决了。。。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值