題設:有n瓶水,其中有一瓶水有劇毒,如果小白鼠喝了會在24小時的時候死亡。
問:用多少只小白鼠能夠檢測出哪瓶水有劇毒?
要求:用的小白鼠數量少並且用時要短,並給出合理的過程與結論。
我的解題思路如下:
這是乙個二進位制開關(0/1)問題,模擬于海明碼校驗演算法,將藥水進行二進位制編號(0000000,0000001,0000010,0000011...),算出至少多少位二進位制能夠將所有的小白鼠進行完全編號;
然後根據二進位制的位數選取小白鼠,將小白鼠對應於相應二進位制位,之後去依次遍歷不同小白鼠的相同位,如果此位為1則喝下一點此瓶的藥水,此位為0則不喝(至於怎麼喝不是我們考慮的範圍內,可以先按位進行藥水的混合,放到其他的瓶中,再讓小白鼠去喝混合後的藥水,當然混合後的藥水數量與選取小白鼠數量是相同的);
最後通過小白鼠的死活去鑑定哪瓶藥水有劇毒。
模擬例項分析:
1)假設共有6瓶藥水,其中1瓶有劇毒,其他無毒
2)通過計算 2^3 = 8 >= 6,可知3位二進位制數可以完全對所有藥水瓶進行編號,因此我們要選取3只小白鼠做實驗
3)對藥水瓶進行二進位制編號,並且讓小白鼠按位去喝藥水(遇見1喝,遇見0不喝),示意圖如下所示:
小白鼠二進位製碼
水瓶編號ab
c000
0100
1201
0301
1410
0510
1然後讓小白鼠a去喝編號為4、5瓶中的水;小白鼠b去喝編號為2、3瓶中的水;小白鼠c去喝編號為1、3、5瓶中的水
如果小白鼠a、b、c都沒死(
000),則編號為0的水瓶中的水有劇毒;
如果小白鼠a、b沒死,c死(
001),則編號為1的水瓶中的水有劇毒;
如果小白鼠a、c沒死,b死(
010),則編號為2的水瓶中的水有劇毒;
如果小白鼠a沒死,b、c死(
011),則編號為3的水瓶中的水有劇毒;
如果小白鼠a死,b、c沒死(
100),則編號為4的水瓶中的水有劇毒;
如果小白鼠a、c死,b沒死(
101),則編號為5的水瓶中的水有劇毒;
(實質上:我們可以保持小白鼠的位置不變,給沒死的小白鼠貼上標籤
0,死的貼上標籤
1,會得出一串二進位製碼,在將此段二進位製碼轉換成為十進位制,即得出有劇毒水瓶的編號)
4)隨著水瓶數量n的增加,我們通過 2^m >= n 計算出所需要的小白鼠的數量m即可
用小白鼠鑑別有毒藥水問題
題設 有n瓶水,其中有一瓶水有劇毒,如果小白鼠喝了會在24小時的時候死亡。問 用多少只小白鼠能夠檢測出哪瓶水有劇毒?要求 用的小白鼠數量少並且用時要短,並給出合理的過程與結論。我的解題思路如下 這是乙個二進位制開關 0 1 問題,模擬于海明碼校驗演算法,將藥水進行二進位制編號 0000000,000...
用小白鼠鑑別有毒藥水問題
題設 有n瓶水,其中有一瓶水有劇毒,如果小白鼠喝了會在24小時的時候死亡。問 用多少只小白鼠能夠檢測出哪瓶水有劇毒?要求 用的小白鼠數量少並且用時要短,並給出合理的過程與結論。我的解題思路如下 這是乙個二進位制開關 0 1 問題,模擬于海明碼校驗演算法,將藥水進行二進位制編號 0000000,000...
小白鼠鑑別有毒水問題
題目 有1000瓶水,其中有一瓶有毒,小白鼠只要嘗一點帶毒的水24小時後就會死亡,至少要多少只小白鼠才能在24小時時鑑別出哪瓶水有毒。將1000瓶水編號。準備10個盤子並編號。準備10只小白鼠並編號 2 10 1024,用二進位制表示為10000000000,一共有11位,因為1024 1000,所...