位運算-老鼠試毒

Q:老鼠試毒
有1000瓶水,其中有一瓶有毒,小白鼠只要嘗一點帶毒的水24小時後就會死亡,問至少要多少隻小白鼠才能在24小時內鑑別出哪瓶水有毒?

A:

我們先將問題簡化一下:假設只有8瓶水,其中1瓶有毒。

將該矩陣轉置,得:

依上述場景,取4只容器,轉置後的矩陣數列配組合溶液:
取數位上爲1的水,放入相應的容器,即:
第一杯:只包含8號水
第二杯:包含4、5、6、7號水
第三杯:包含2、3、6、7號水
第四杯:包含1、3、5、7號水

取4只老鼠,編號1、2、3、4,分別喝下第一杯...第四杯水,
4只老鼠的生死狀態依次記爲 w x y z,(w,x,y,z = {0,1})
死亡記作1,非死亡記作0
將二進制數列wxyz轉爲十進制,則得到有毒水的號碼。
假設6號水有毒,那麼往回推算,不難看出,第2、3只老鼠會死亡,
得到的wxyz的數列就是0110,轉十進制後就是6。

將1000瓶依次編號:1,2,3,4,...,1000; 且都記作二進制;
那我們要用多少位來表示呢?
總數是1000,2^9=512, 2^10=1024,於是至少要10位纔夠表示,
也就是:0000000001,0000000010,0000000011,...,1111101000;

分析:

問題可以轉換爲N只老鼠可以在24小時內

鑑別出最多M瓶水中的一瓶有毒?

2^N>M,已知M求最小N。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章