小白鼠與毒藥解題過程分析



轉載地址:http://blog.csdn.net/river_like/article/details/21412177

網上流傳着一題淘寶面試題,原題如下:

我們有很多瓶無色的液體,其中有一瓶是毒藥,其它都是蒸餾水,實驗的小白鼠喝了以後會在5分鐘後死亡,而喝到蒸餾水的小白鼠則一切正常。現在有5只小白鼠,請問一下,我們用這五隻小白鼠,5分鐘的時間,能夠檢測多少瓶液體的成分()。A:5, B:6, C:31, D:32。

+1只小白鼠

首先可以想象只有1只小白鼠的情況,毫無疑問,1只小白鼠五分鐘只能判斷1瓶液體的成分,喝兩瓶或以上如果是碰不到毒藥,則喝多少瓶也能確定多少瓶;但如果遇到有毒藥的瓶子,則不能判斷那1瓶是毒藥,這樣的檢測是不合理的。
  1. 死亡代表液體是毒藥
  2. 正常代表液體是蒸餾水
  • 結論:1只小白鼠可檢測1瓶液體成分。

+2只小白鼠

兩隻小白鼠可以檢測3瓶液體成分。從本節開始我們把小白鼠標號N1,N2。首先根據前述結論可知N1,N2小白鼠各喝1瓶液體(N1:1號液體,N2:2號液體)則能夠準確判斷2瓶液體成分。但是第三瓶的判斷可能需要大家稍微轉點彎。因爲採用的是每個老鼠獨立測試液體的方式,每個老鼠的死活並沒有任何關聯,每個老鼠測試的結果也就無法跟另外的老鼠測試的結果關聯。這樣做是一般做法,但有沒有可能把老鼠聯合起來測試來增大測試範圍呢?其實是可以的,那就是再拿一瓶3號液體讓N1,N2都喝一點。這樣有如下
  • 喝法(縱向表示液體瓶編號,橫向表示小白鼠編號,交叉部分表示小白鼠是否喝了相應的液體):
液體\小白鼠 N1            N2           
1  
2  
3
  • 死法(縱向表示N1小白鼠的測試結果,橫向表示N2小白鼠的測試結果,交叉部分數值是毒藥瓶編號或無毒藥。)
N1\N2 死       活     
3 2
1
  • 結論:2只小白鼠可檢測3瓶液體成分。

+3只小白鼠

由上一節的思維方式,我們可以想象3只小白鼠是否能測試遠比3瓶或4瓶更多的液體成分呢?思考2只小白鼠的測試方式,大家有沒有注意上面採取的方式是N1,N2各喝了1瓶不一樣的(N1:1、3號液體,N2:2、3號液體)。我們除了讓每隻小白鼠單獨喝1瓶不一樣的液體,另外讓N1,N2同時喝了1瓶一樣的3號液體。同樣,我們可以對3只小白鼠各自喝1瓶不一樣的液體後,在3只小白鼠再喝第4瓶一樣的液體。測試如下:

 順推思維

  • 喝法(縱向表示液體瓶編號,橫向表示小白鼠編號,交叉部分表示小白鼠是否喝了相應的液體)N1喝1號4號液體;N22號4號液體;N33號4號液體
液體\小白鼠 N1 N2 N3
1    
2    
3    
4
  • 死法
    1. N1活N2活N3活:1、2、3、4號液體均正常。
    2. N1活N2活N3死:1、2、4號液體均正常,3號液體有毒。
    3. N1活N2死N3活:1、3、4號液體均正常,2號液體有毒。
    4. N1死N2活N3活:2、3、4號液體均正常,1號液體有毒。
    5. N1死N2死N3死:1、2、3號液體均正常,4號液體有毒。
    6. 注意,這裏不會出現有2只小白鼠死了另外1只活着的情況,因爲只有1瓶液體是毒藥,而且我們給3個小白鼠喝的方法只有2種:單獨喝某1種液體,集體都喝某種液體。
  • 結論:3只小白鼠可檢測4瓶液體成分。

  • 思考:通過如上結論大家有沒有覺得怪怪的,或者是不甘心。
    • 1只小白鼠測試1瓶液體
    • 2只小白鼠測試3瓶液體
    • 3只小白鼠測試4瓶液體,根據學數學的增量直覺,是不是太少了?或者如上方法是否有值得發散思維的地方?

  發散思維

關於上面順推思維的解決方案,好奇的人就會問可不可以也讓3只小白鼠也像2只小白鼠測試的那樣兩兩都再喝1瓶一樣的液體呢?這樣又增加了3瓶(N1、N2再喝5號液體,N1、N3再喝6號液體,N2、N3再喝7號液體)。是不是就出現如上提到的2只死亡其領外1只活着的情況了?試想如果5號液體是有毒?或者6號液體有毒?7號液體有毒?這樣3只小白鼠就能檢測7瓶液體成分了。仔細想想之後你會發現這樣是可行的。測試情況如下:
  • 喝法(縱向表示液體瓶編號,橫向表示小白鼠編號,交叉部分表示小白鼠是否喝了相應的液體)
液體\小白鼠 N1       N2       N3       
1    
2    
3    
4
5  
6  
7  
  • 死法
    1. N1活N2活N3活:1、2、3、4、5、6、7號液體均正常。
    2. N1活N2活N3死:1、2、4、5、6、7號液體均正常,3號液體有毒。
    3. N1活N2死N3活:1、3、45、6、7號液體均正常,2號液體有毒。
    4. N1死N2活N3活:2、3、45、6、7號液體均正常,1號液體有毒。
    5. N1死N2死N3死:1、2、35、6、7號液體均正常,4號液體有毒。
    6. N1死N2死N3活:1、2、3、4、6、7號液體均正常,5號液體有毒。
    7. N1死N2活N3死:1、2、3、4、5、7號液體均正常,6號液體有毒。
    8. N1死N2死N3死:1、2、3、4、5、6號液體均正常,7號液體有毒。至此,所有可能情況已經被枚舉完畢。
  • 結論:3只小白鼠是可以檢測7瓶液體成分的。

歸納和發現

通過上述分析和思考,想必大家都很想知道這裏的原理和推論了。我們把剛剛得到的結論再次貼出:
    • 1只小白鼠測試1瓶液體
    • 2只小白鼠測試3瓶液體
    • 3只小白鼠測試7瓶液體
    • 4只小白鼠測試N瓶液體?
    • 5只小白鼠呢?
如果你學過數列,你會直接猜出4對應15(24-1=15)。因爲前面是
    • 1只小白鼠測試21–1瓶液體
    • 2只小白鼠測試22–1瓶液體
    • 3只小白鼠測試23–1瓶液體
事實上答案就是這樣。但是你要怎麼證明呢?
其實總結起來大家會發現,我們採用瞭如下策略進行測試:
  • 讓N只小白鼠每1只喝單獨的1瓶
  • 讓N只小白鼠任意中2只再同時喝1瓶新液體
  • 讓N只小白鼠任意中3只再同時喝另1瓶新液體
  • 。。。
  • 讓N只小白鼠任意中N只再同時喝1瓶格外新的液體
仔細想想你會發現這樣最大限度了利用了聯合測試結果,並且剛剛好所有的結果都不衝突。如果你有幸見到老練的實驗室工作者,你還會發現這個是他們做這種類型的檢測試驗的通用方法。


接下來考驗你數學功底的時候到了。
集合論學習比較過關的人會從上面總結出N個小白鼠可以測試液體瓶數爲:Cn1+Cn+ Cn3+…+ Cnn-1+Cnn
如果你集合論的公式不是很熟悉又比較懶,又稍有耐力,那你可以慢慢計算出當小白鼠數量N=10時的結果是1023.但是多了你就不想在浪費時間了。
現在想想另外一個問題:一個包含N個不同元素的集合包含的子集合總數是多少(空集合也是集合)?

查看高2(2004年)數學書你就知道:總數=Cn0+Cn1+Cn+ Cn3+…+ Cnn-1+Cn即從中取出0、1、2...3、N-1、N個元素組成的子集合的總數。並且這個問題還有一個很簡單的解答方式: 設想其子集合很多,但是每個集合對於元素的包含只有2種可能:包含、不包含。那麼N個元素的組合可能即2*2*2*...*2=2n

再來對照上面的N個小白鼠測試液體瓶數:Cn1+Cn2  + Cn3+…+ Cnn-1+Cnn= (Cn0+Cn1+Cn+ Cn3+…+ Cnn-1+Cnn )-Cn0

2nCn02- 1.至此

本題答案

5只小白鼠能測試的液體瓶數2- 1=31已經解答完畢了。

======================================================================================================

總結

回頭想想這個題目,因爲只有5小白鼠個,其實可以完全憑着你的發散思維和堅持不用靠集合論等高中以上數學知識搞定的,前提是你足夠會發散思維,會總結,推理能力較強。問題的關鍵處有3個,前2個能幫助你解答本題,後1個能幫助你做出總結和快速算法推論:
    1. 2個小白鼠能想到同時再喝1瓶新的。
    2. 3個小白鼠能想到分組在喝,多個小白鼠思考能有條不紊、不亂。
    3. N個元素集合子集數量的兩種表示法和證明過程


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