小白鼠試毒酒的升級版
昨日參加某大資料公司的筆試,最後一題是:有9瓶酒,其中一瓶有毒,可以使用小白鼠進行試驗,但是毒發需要8小時,問最少需要幾隻小白鼠才可以在16小時內知道哪瓶酒是毒酒。
這道題的原型是一道經典的微軟面試題:最少多少隻小白鼠可以一次判斷出1024(一說是1000)瓶酒中哪瓶是毒酒?
我們首先從這道題的做法開始說起:
可以將1024瓶酒依次編號為0到1023。編號轉為2進製表示。將編號中bit0位置為1的酒取出混合給第一隻小白鼠喝;bit1位置為1的酒取出混合給第二隻小白鼠喝;…….bit9位置為1的酒取出混合給第十隻小白鼠喝。將這十隻小白鼠從右到左依次排開,死了的小白鼠的位置為1,否則為0,就得到10bit的二進位制數,將這個二進位制數轉成十進位制,這就是毒酒的編號。
上面的解法可以得到這樣的結論:使用
其實更一般的說法應該是:使用
使用動態規劃可以很快速地得到結果。
最後順便提一下,如果沒有試驗次數的限制,答案又是什麼?因為沒有時間限制,只需要使用一隻小白鼠一瓶一瓶試吃就行了,吃了哪瓶死了那瓶就是毒酒。
暫時沒想到解析解,因此無法直接根據瓶數直接得到需要的小白鼠的個數。