我的一个朋友在面试时被问到这个问题,当时无法解决。以为我会分享同样的。
有一千个巧克力曲奇,其中一个中毒了。您每天可以接触 10 只实验室老鼠。每只老鼠可以啃任意数量的饼干,每个饼干可以被任意数量的老鼠啃。老鼠咬了一块有毒的饼干后,需要一天的时间才能看到老鼠中毒后的后果。
优化天数。我能够想出一个算法在 2 天内找到中毒的 cookie,尽管我相信有一种方法可以在 1 天内做到这一点
我的一个朋友在面试时被问到这个问题,当时无法解决。以为我会分享同样的。
有一千个巧克力曲奇,其中一个中毒了。您每天可以接触 10 只实验室老鼠。每只老鼠可以啃任意数量的饼干,每个饼干可以被任意数量的老鼠啃。老鼠咬了一块有毒的饼干后,需要一天的时间才能看到老鼠中毒后的后果。
优化天数。我能够想出一个算法在 2 天内找到中毒的 cookie,尽管我相信有一种方法可以在 1 天内做到这一点
这是三天内的“简单”解决方案:
现在对于一天内的“硬”解决方案:
我想我明白了。
想象一棵以 1024 个 cookie 为根的二叉树(这个数字更清晰,但这适用于任何小于 1024 的数字)。将 1024 个 cookie 分成两组,每组 512 个,每组都是根的孩子。然后将这些 512 组中的每一个分成 256 组,并让它们成为每个组的孩子,依此类推。您应该最终得到 11 个级别的树。
将每只老鼠分配到除根之外的树的一个级别。每只老鼠只会吃掉他们关卡左边树枝上的饼干。第二天,遍历树,对于每只死去的老鼠,跟随左分支,对于每只活着的老鼠,跟随右分支。生成的 cookie 应该是有毒的。