毒鼠问题

核心算法就是二分查找法。

  • 1000瓶水,仅有一瓶有毒性,且毒性会在一天之内发作;则一天之内,最少需要多少个老鼠可找出有毒的水!
# 不同的整数,二进制表现形式也不同,此处是将[1,1000],利用二进制按位分组。

1. 将所有的水确定编号,并按照二进制的方式排序下去。

2. 根据二进制排列,按不同位`0-1`分为两组,共执行 10 次,且任何一次不相关。

3. 分别让 10 只老鼠试出,已经分好的 10 组的毒性。

4. 若第一组有毒,则说明有毒的水的编号的二进制的 第一位就是 1,以此计算其他位 `0/1`。

5. 根据二进制编码,即可求出有毒的水的编号。
  • 1000瓶水,仅有一瓶有毒性,毒性会立即发作,则最少需要多少个老鼠。
# 此处即是经典的二分法。

1. 将 1000 瓶水分为两组混合,用一只老鼠试出哪一组有毒。(老鼠喝了第一组没死,第二组就是有毒的)。

2. 最多重复以上操作 10 次,即可找出有毒的水是哪一瓶。

3. 由于操作的特殊性,即分组的两组之中,必然有一组有毒,(0 ~ 10) 只老鼠即可。
posted @ 2020-10-29 15:16  我去吃饭了  阅读(470)  评论(0)    收藏  举报