Algorithm 优化查找有毒饼干的天数

Algorithm 优化查找有毒饼干的天数,algorithm,Algorithm,我的一个朋友在面试时被问到这个问题,但当时无法解决。我想我也会和你一样 有一千块巧克力饼干,其中一块中毒了。你 每天可以接触10只实验鼠。每只老鼠可以啃任何数字 每一块饼干都可以被任意数量的老鼠吃掉。之后 一只老鼠啃着一块有毒的饼干,一天之后才能看到它 中毒对大鼠的影响 优化天数。我能够想出一个算法,在2天内找到有毒的饼干,尽管我相信有一种方法可以在1天内找到它 想象一个以1024个cookies作为根的二叉树(这个数字比较干净,但对于小于1024的任何数字都有效)。将1024个cookie分成

我的一个朋友在面试时被问到这个问题,但当时无法解决。我想我也会和你一样

有一千块巧克力饼干,其中一块中毒了。你 每天可以接触10只实验鼠。每只老鼠可以啃任何数字 每一块饼干都可以被任意数量的老鼠吃掉。之后 一只老鼠啃着一块有毒的饼干,一天之后才能看到它 中毒对大鼠的影响

优化天数。我能够想出一个算法,在2天内找到有毒的饼干,尽管我相信有一种方法可以在1天内找到它

想象一个以1024个cookies作为根的二叉树(这个数字比较干净,但对于小于1024的任何数字都有效)。将1024个cookie分成两组,每组512个,每个组都是根的子级。然后将512个组中的每一个分成256个组,让这些组成为每个组的子组,依此类推。你应该得到11个层次的树

将每只老鼠分配到树的某个级别(根除外)。每只老鼠只吃他们水平线左边树枝上的饼干。第二天,在树上迭代,对于每只死去的老鼠,按照左分支,对于每只活着的老鼠,按照右分支。产生的曲奇应该是中毒的曲奇。

这是三天内的“简单”解决方案:

  • 首先,让每只老鼠咬100块饼干
  • 一天后,让每只老鼠啃食死老鼠吃的10块饼干
  • 两天后,让每只老鼠吃掉第二只死老鼠吃的饼干
  • 三天后,你就会知道哪块饼干中毒了
现在,一天内的“硬”解决方案:

  • 用二进制对所有cookie进行编号
  • 每个rat都要啃食那些二进制表示在rat索引处有一个设定位的cookie。例如,老鼠1会吃掉所有奇数饼干
  • 换句话说,饼干37会被老鼠1、3和6吃掉。所以如果第二天那三只老鼠死了,你就知道cookie 37是中毒的那只

相当病态的面试问题(除非我猜他是否正在申请一家虫害控制公司的工作)。Boomsoffire和Neil都有这个问题(他们是同一算法的替代描述)。我几乎要把这个问题标记为虐待动物……为了完整起见,你能写下你的两天解决方案吗?(现在答案中既有3天的解决方案,也有1天的解决方案?)@SimonAndréForsberg事实上,“简单”解决方案的优点是只需测试人员付出最小的努力。