大家應該都聽說過這個老題目:有 1000 個一模一樣的瓶子,其中有 999 瓶是普通的水,有一瓶是毒藥。任何喝下毒藥的生物都會在一星期之後死亡。現在,你只有 10 只小白鼠和一星期的時間,如何檢驗出哪個瓶子裡有毒藥?
這個問題的答案也堪稱經典:把瓶子從 0 到 999 依次編號,然後全部轉換為 10 位二進位制數。讓第一只老鼠喝掉所有二進位制數右起第一位是 1 的瓶子,讓第二隻老鼠喝掉所有二進位制數右起第二位是 1 的瓶子,等等。一星期後,如果第一只老鼠死了,就知道毒藥瓶子的二進位制編號中,右起第一位是 1 ;如果第二隻老鼠沒死,就知道毒藥瓶子的二進位制編號中,右起第二位是 0 ⋯⋯每只老鼠的死活都能確定出 10 位二進位制數的其中一位,由此便可知道毒藥瓶子的編號了。
答案:7 只老鼠就足夠了。事實上,7 只老鼠足以從 37 = 2187 個瓶子中找出毒藥來。首先,把所有瓶子從 0 到 2186 編號,然後全部轉換為 7 位三進製數。現在,讓第一只老鼠喝掉所有三進製數右起第一位是 2 的瓶子,讓第二隻老鼠喝掉所有三進製數右起第二位是 2 的瓶子,等等。一星期之後,如果第一只老鼠死了,就知道毒藥瓶子的三進製編號中,右起第一位是 2 ;如果第二隻老鼠沒死,就知道毒藥瓶子的三進製編號中,右起第二位不是 2,只可能是 0 或者 1 ⋯⋯也就是說,每只死掉的老鼠都用自己的生命確定出了,三進製編號中自己負責的那一位是 2 ;但每只活著的老鼠都只能確定,它所負責的那一位不是 2 。於是,問題就歸約到了只剩乙個星期時的情況。在第二輪實驗裡,讓每只活著的老鼠繼續自己未完成的任務,喝掉它負責的那一位是 1 的所有瓶子。再過一星期,毒藥瓶子的三進製編號便能全部揭曉了。
類似地,我們可以證明, n 只小白鼠 t 周的時間可以從 (t+1)n 個瓶子中檢驗出毒藥來。
老鼠與毒藥問題
偶然在社群上看到這個問題,看到了程式設計師的回答,饒有興趣,於是查詢了csdn後,終於看懂了。有1000瓶液體 正常,無毒 但是由於工作人員失誤,將毒藥滴到了其中一瓶中,從外觀和氣味上完全無法分辨出哪乙個是被汙染過的,我們只知道這個毒藥的毒發期是7天,實驗室有10只小白鼠,只有7天的時間,如何實驗才...
老鼠與毒藥問題
有1000瓶藥,其中有一瓶有毒,老鼠一旦喝一點毒藥就會在24小時後死亡,問最少要多少只老鼠才能在24小時後知道哪一瓶是有毒的。把所有的數轉換成二進位制,如最大的1000轉化成二進位制為1111101000 將所有第一位為1的取出一些混合在乙個瓶子裡 將所有第二位為1的取出一些混合在乙個瓶子裡 將所有...
老鼠與毒藥問題
有1000瓶藥,其中有一瓶有毒,老鼠一旦喝一點毒藥就會在24小時後死亡,問最少要多少只老鼠才能在24小時後知道哪一瓶是有毒的。把所有的數轉換成二進位制,如最大的1000轉化成二進位制為1111101000 將所有第一位為1的取出一些混合在乙個瓶子裡 將所有第二位為1的取出一些混合在乙個瓶子裡 將所有...