毒鼠问题

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

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

1. 将全部的水肯定编号,并按照二进制的方式排序下去。

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

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

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

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

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

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

3. 因为操做的特殊性,即分组的两组之中,必然有一组有毒,(0 ~ 10) 只老鼠便可。
相关文章
相关标签/搜索