老鼠与毒药问题
大家應(yīng)該都聽說過這個(gè)老題目:有 1000 個(gè)一模一樣的瓶子,其中有 999 瓶是普通的水,有一瓶是毒藥。任何喝下毒藥的生物都會(huì)在一星期之后死亡。現(xiàn)在,你只有 10 只小白鼠和一星期的時(shí)間,如何檢驗(yàn)出哪個(gè)瓶子里有毒藥?
????這個(gè)問題的答案也堪稱經(jīng)典:把瓶子從 0 到 999 依次編號,然后全部轉(zhuǎn)換為 10 位二進(jìn)制數(shù)。讓第一只老鼠喝掉所有二進(jìn)制數(shù)右起第一位是 1 的瓶子,讓第二只老鼠喝掉所有二進(jìn)制數(shù)右起第二位是 1 的瓶子,等等。一星期后,如果第一只老鼠死了,就知道毒藥瓶子的二進(jìn)制編號中,右起第一位是 1 ;如果第二只老鼠沒死,就知道毒藥瓶子的二進(jìn)制編號中,右起第二位是 0 ??每只老鼠的死活都能確定出 10 位二進(jìn)制數(shù)的其中一位,由此便可知道毒藥瓶子的編號了。
????現(xiàn)在,有意思的問題來了:如果你有兩個(gè)星期的時(shí)間(換句話說你可以做兩輪實(shí)驗(yàn)),為了從 1000 個(gè)瓶子中找出毒藥,你最少需要幾只老鼠?注意,在第一輪實(shí)驗(yàn)中死掉的老鼠,就無法繼續(xù)參與第二次實(shí)驗(yàn)了。
?
????答案:7 只老鼠就足夠了。事實(shí)上,7 只老鼠足以從 37 = 2187 個(gè)瓶子中找出毒藥來。首先,把所有瓶子從 0 到 2186 編號,然后全部轉(zhuǎn)換為 7 位三進(jìn)制數(shù)。現(xiàn)在,讓第一只老鼠喝掉所有三進(jìn)制數(shù)右起第一位是 2 的瓶子,讓第二只老鼠喝掉所有三進(jìn)制數(shù)右起第二位是 2 的瓶子,等等。一星期之后,如果第一只老鼠死了,就知道毒藥瓶子的三進(jìn)制編號中,右起第一位是 2 ;如果第二只老鼠沒死,就知道毒藥瓶子的三進(jìn)制編號中,右起第二位不是 2,只可能是 0 或者 1 ??也就是說,每只死掉的老鼠都用自己的生命確定出了,三進(jìn)制編號中自己負(fù)責(zé)的那一位是 2 ;但每只活著的老鼠都只能確定,它所負(fù)責(zé)的那一位不是 2 。于是,問題就歸約到了只剩一個(gè)星期時(shí)的情況。在第二輪實(shí)驗(yàn)里,讓每只活著的老鼠繼續(xù)自己未完成的任務(wù),喝掉它負(fù)責(zé)的那一位是 1 的所有瓶子。再過一星期,毒藥瓶子的三進(jìn)制編號便能全部揭曉了。
????類似地,我們可以證明, n 只小白鼠 t 周的時(shí)間可以從 (t+1)n 個(gè)瓶子中檢驗(yàn)出毒藥來。
轉(zhuǎn)載于:https://www.cnblogs.com/hxsyl/archive/2012/08/22/2651418.html
總結(jié)
- 上一篇: Css2.0+Css3.0+jQuery
- 下一篇: NYOJ 469 擅长排列的小明 II