毒鼠問題

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

  • 1000瓶水,僅有一瓶有毒性,且毒性會在一天以內發做;則一天以內,最少須要多少個老鼠可找出有毒的水!
# 不一樣的整數,二進制表現形式也不一樣,此處是將[1,1000],利用二進制按位分組。

1. 將全部的水肯定編號,並按照二進制的方式排序下去。

2. 根據二進制排列,按不一樣位`0-1`分爲兩組,共執行 10 次,且任何一次不相關。

3. 分別讓 10 只老鼠試出,已經分好的 10 組的毒性。

4. 若第一組有毒,則說明有毒的水的編號的二進制的 第一位就是 1,以此計算其餘位 `0/1`。

5. 根據二進制編碼,便可求出有毒的水的編號。
  • 1000瓶水,僅有一瓶有毒性,毒性會當即發做,則最少須要多少個老鼠。
# 此處便是經典的二分法。

1. 將 1000 瓶水分爲兩組混合,用一隻老鼠試出哪一組有毒。(老鼠喝了第一組沒死,第二組就是有毒的)。

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

3. 因爲操做的特殊性,即分組的兩組之中,必然有一組有毒,(0 ~ 10) 只老鼠便可。
相關文章
相關標籤/搜索