小白鼠試毒葯問題


  題目如下:

    實驗室里有1000個一模一樣的瓶子,但是其中的一瓶有毒。可以用實驗室的小白鼠來測試哪一瓶是毒葯。如果小白鼠喝掉毒葯的話,會在一個星期的時候死去,其他瓶子里的葯水沒有任何副作用。請問最少用多少只小白鼠可以在一個星期以內查出哪瓶是毒葯:
    a. 9
    b. 10
    c. 32
    d. 999
    e. 以上都不對

    這個題目很簡單,拿來復習信息論和二進制編碼的粗淺知識剛好合適。

    首先呢,如果讓我使用我的LabTop解題,那么簡單了,用1000只小白鼠去試驗,將瓶子和白鼠編號一一對應,哪只死了便是哪個瓶子里有毒啦!畢竟電腦資源很充裕,平時CPU利用率不到1%,實在是太清閑啦!在上面開辟1000個小白鼠出來還不簡單!再說,這種方法雖然簡單粗暴,卻是最流行的用得最多的辦法。不過我猜出這個題目的人是不希望看到這個答案的,因為不管是人還是小白鼠都不願意看到小白鼠們橫屍遍野的場面。記得我高中一位考上了醫學院的同學說,小白鼠是很脆弱的,你拿一顆大頭釘就可以把它釘到牆壁上面去。它們的腿骨輕輕一折也就斷了。真是可憐啊!所以得繼續分析下去。

    那么讓我們先看看理論上最少得用多少小白鼠好了:1000個瓶子里只有1個是有毒葯的,其它的都是好的,那問題又簡單了:將瓶子依次排列起來,無毒的用0表示,有毒的用1表示,一共只可能出現1000種不同的狀態。這下好了,對1000求以二為底的對數,結果小於10,但是卻大於9。看來b是一個很有前途的答案!

    說到這里先打住,我們回過頭看看用1000只小白鼠去試驗的方法為什么不科學。隨便從那1000個瓶子里取出一個來,問你是有毒的還是沒有毒的,你說沒有毒,那么恭喜你,極有可能你答對了!你犯錯誤的可能只有0.1% 。一只小白鼠的生死本身有兩種完全獨立的狀態,可以表示1bit的信息;而隨便拿出來一個瓶子,它極有可能是沒有毒的,信息量只有對1000求以2為底的對數所得數值的千分之一bit那么大!即:ln(1000)/1000ln(2) bit。這個數很小,還不到0.01,看來用一只小白鼠去對付它實在太浪費了!

    也許上一段文字里面有一些你不明白的東西,其中最不明白的就是信息量怎么是那樣計算的。我知道你沒有學過這東西所以原諒你,但是請你相信我說的是大致正確的,並且我也不會欺騙你。小事情嘛,干嗎騙人呢!要騙就在大事情上騙。其實這個算法最初是香農那家伙說的,有錯誤你去找他好了。

    剩下的,我們最關心的是用10只小白鼠能不能找出那個有毒的瓶子來,或者怎么才能找出來。答案是能夠找出來的!用二進制編碼的辦法。我先說兩句這個編碼問題。我們小學的時候數數,從1數到9,再往下數,便是一個突破。進位了!二進制里面,你數到1,再往下數,困難了,因為里面只有0和1,連2都沒有。麻煩了,到這里就得進位。好了,我們來數一數:0,1,10,11,100,101,110,111,1000,……看明白了嗎?這樣數下去,數到1111111111,10位,再加1就又要進位了就大於10位了,我們的小白鼠就不夠用了。其實已經夠了,你回頭看看,我們從0到1111111111已經數了1024個數字。對付1000個瓶子還是夠了的。

    現在開始解題!把上面數過的數字,長度短於10的,前面全都加上0補夠10位數字。比如1101就變成了0000001101。不過它只有1+4+8=13那么大,遠遠沒有1000大呢!哪個數字對應十進制里面的1000呢?應該是1111111111(1023)-10000(16)-100(4)-10(2)-1(1)=1111101000(1000),這個就是十進制里面的1000。讓瓶子和小白鼠都排成一列,站好了不准動,對瓶子從1到1000編號,然后把號碼轉化成10位長的二進制串,剛好和10只小白鼠一位對一位。一個瓶子里的二進制編號有哪幾位是1,就讓那些小白鼠喝下去其中的一點兒東西好了。將來那些喝了的小白鼠剛好都死了而沒喝它的一只都沒有死,我們就指定它有毒好啦!

    如此簡單的一個問題被我說到了這個地步,不禁心中大樂,哈哈哈哈,我也會瞎扯啦!不過問題還沒有完全搞定。如果告訴你有1024個瓶子,用10只小白鼠能否測出來呢?你也看到了,1111111111才有1023那么大,不到1024。其實是可以的,因為我們對瓶子是從1開始編號的,而留下了0沒有使用。從0到1023可是1024個數字。

    那么,留一個家庭作業,呵呵:如果題目給的是1024個瓶子里面最多有一個瓶子有毒,還能夠用10只小白鼠檢測出來嗎?這好像跟正零與負零有點兒關系。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM