有1000个一模一样的瓶子,其中有999瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有10只小白鼠和一星期的时间,如何检验出那个瓶子里有毒药?

浅谈一下1000瓶水有关思路(图解)与用java代码具体解决方案

1,原题

     面试题:有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有10只小白鼠和一星期的时间,如何检验出那个瓶子里有毒药?(1000瓶水,1瓶毒药,1星期死亡,10只老鼠)

2,四种思路

    今天老师说了如上这道题。自己感觉比较有趣。网上有各种奇思妙想,现在我把其中自己感觉最好的四种摘抄放在这里(主要参考网址链接:http://www.zhihu.com/question/19676641),最后附自己根据他们的想法用Java代码写的具体实现。

①决策树法:

    可能有人觉得,这多简单啊,用0.2秒联想一下卡诺图(或者3-8译码器),打个响指,答案不就出来了吗?但是我想说,这是需要天才的。可我认为好的解题思路,是不需要天才便可解答的思路。换句话说,依赖于天才的解题方法不是个好的方法。再者,即便对于天才,我想剥清那灵机一闪的背后,意识的水面下庞大的无意识洪流,是以什么为根据运行的。再延伸下去就要到很多大师都谈到过的知识与灵感的大问题了,不展开了。
说得简单点,我想回答的是,我没想到这个方法,凭什么他就想到。现在就来谈谈这个凭什么。
    首先,题目做了个巧妙的障眼,把1024改成1000。但根据经验,还是不难想到,要用这么少的老鼠分出这么大的任务量,肯定有指数爆炸的功劳。或者说,把问题对数分解。从而不难想到2^10=1024这个数量关系。
为了问题更容易理解,不妨把问题做一个变形:
    问题2:把原问题中的1000个瓶子改成8个瓶子,10只老鼠改成3只老鼠。其它一样。
这样,问题2肯定有了个解法。下面的问题是,这背后的数量关系的本质是什么?
按照职业和个人知识背景的不同,不同的人可能有不同的联想。如果你学过算法,不难从原问题的2^10=1024数量关系中想到二分查找算法思想。问题是这里只有单步(一个单位时间,或一个指令周期)计算时间。没错,老鼠负责做测试,就是一个处理机,符合计算的本质。于是,为了问题易于理解,不妨进一步做一次变形:
    问题3:把问题2中的3只老鼠改成1只老鼠,但是老鼠有3条命,并且时间限制从一个星期改成3个星期。其它一样。
于是,成了一个典型的二分查找问题,2^10=1024这个数量关系依然适用。这是按照程序员的思维走到二分查找的。但如果你不是程序员呢?或者说,自然而然想到变换到二分查找,这和一步联想卡诺图(或3-8译码器ÿ

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值