优化查找中毒cookie的天数

时间:2012-07-14 22:56:23

标签: algorithm

我的一位朋友被问到这个问题接受采访,当时无法解决。以为我会分享同样的。

  

有一千个巧克力饼干,其中一个中毒。您   每天可以接触10只实验室老鼠。每只老鼠都可以啃食任何数字   饼干和每个饼干可以被任何数量的老鼠啃食。后   一只老鼠啃着一个有毒的饼干,需要一天的时间才能看到它   如果它被中毒,对大鼠有影响。

优化天数。我能够在2天内找到一个算法来找到中毒的cookie,虽然我相信在1天内有一种方法可以做到这一点

2 个答案:

答案 0 :(得分:7)

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

  • 首先,让每只老鼠啃100个饼干。
  • 一天之后,让每只老鼠啃掉死老鼠吃掉的10个饼干。
  • 两天后,让每只老鼠啃食第二只死老鼠吃掉的一块饼干。
  • 三天后,您将知道哪个cookie中毒。

现在为一天的“硬”解决方案:

  • 以二进制方式编号所有Cookie。
  • 每只老鼠都会啃咬那些二进制表示在大鼠指数上有一个位的饼干。因此,例如,鼠标1将蚕食所有奇数编号的饼干。
  • 换句话说,第1,3和6只老鼠会啃食饼干37。所以如果第三天确实有三只老鼠死了,你知道饼干37是中毒的。

答案 1 :(得分:3)

我想我明白了。

想象一下以1024个cookie作为根的二叉树(这个数字更干净,但这适用于任何小于1024的数字)。将1024个cookie分成两组,每组512个,每个组都是root的子组。然后将512个这些组中的每个组分成256个组,让它们成为每个组的子组,依此类推。你最终应该得到11个级别的树。

将每只大鼠分配到除根之外的树的级别。每只老鼠只吃它们水平左侧分支上的饼干。第二天,遍历树和每只死亡的老鼠,按照左分支,对于每只活着的老鼠,按照右分支。生成的cookie应该是有毒的。