有n (n>=3)個硬幣,其中一個是假幣,已知假幣的重量比其他的要重一些,你有一架天平。現在要稱出那個是假幣來。
解析:
首先我們先來考慮最簡單的問題1.為了方便敘述,把n個硬幣按1,2...,n順次編號。
若n=3,把一號硬幣放在天平左邊,二號幣放在天平右邊。如果天平:
1.左偏,一號重,是假幣。
2.右偏,二號重,是假幣。
3.保持平衡,那么一二都是正常的硬幣,因此只有可能三號是假幣了。
因此n=3,至多一次就能稱出哪個是假幣,記作f(3)=1.
下面考慮n=9.把所有硬幣分成三組,a{1.2.3} B{4.5.6} C{7.8.9}。A組的硬幣放在左邊,B組放在右邊。如果天平:
1.左偏,則假幣在A里面。
2.右偏,則假幣在B組里面。
3.保持平衡,在C組。
無論在哪個組里面,我們已經把假幣的范圍從9縮小到3,也就是減少到了原來的1/3.之前我們研究過,3個硬幣1次就能稱出來,故而f(9)=2.
不難推廣到一般情況:
定理1.1 f(3n)=n
證明:n=1,2時,已證。設n=k成立,則f(3k)=k;下面考慮n=k+1的情況。
將3k+1個硬幣分成三堆,使得|A|=|B|=|C|=3k。把A放在天平左邊,B放在右邊。
天平:
1、左偏,假幣在A
2、右偏,假幣在B
3、平衡,假幣在C
無論哪種結果,我們都把假幣的范圍縮小到了3k個硬幣里面。而f(3k)=k,故而f(3k+1)=k+1。
綜上,定理1.1成立。
稍經分析不難得到:
定理1.2 f(n)=(log3n) 向上取整
這個證明和定理1.1完全類似,分n mod 3 = 0, 1, 2適當討論即可。
我們必須注意到(log3n) 向上取整是可行的,應為我們能構造出這樣一個方案。問題是它是不是最優的?
我們采取的方案是每次將硬幣盡量均勻的分成三份,這樣做的根據就是天平只有三種結果:左偏,右偏,平衡。於是就能保證無論假幣在哪一份都能將結果的范圍縮小到原來的1/3.從感性上認識,這應該是最優的了。
為了更加嚴格的證明最優性,我們引進判定樹的概念。
下圖就是n=9時的一種判定樹:

1、葉子節點代表一種可能的結果。
2、非葉子節點代表一次稱量。
3、非葉子節點至多有三個兒子,分別代表天平的左偏、右偏、平衡三種情況。
任意一種稱量方案都能唯一的表示成一棵判定樹;反過來一棵判定樹也唯一對應一種稱量方案。
容易看出判定樹的深度就是稱量次數。這就是我們之所以引進它的原因。
做出判斷之前,誰也無法預知哪個硬幣是假幣,每個都有可能是我們的目標;因此一個有意義的判定樹應該具有至少n個葉子節點。
n個葉子節點的樹的深度h ≥ log3上取證,故而可以證明,f(n)=log3 上取整是最優的。
我們的結論是:有n(n≥3次,就能找出那個假幣。)個硬幣,其中一個是假幣,假幣的重量比其他的要重一些。給一架天平,至少稱
次,就能找出那個假幣。
具體的方案是將硬幣每次都盡量均勻的三分。
讓我們總結一下。
“三分”是整個解法的核心。我們選擇三分,而不是二分或者四分是有原因的,它的本質是由判定樹的特殊結構——三叉樹——所決定的。
同時還必須注意一點,我們在三分的時候有兩個字很講究:“均勻”。實際上h ≥
中的‘=’當且僅當硬幣被均勻地分配時才能到達。
這里說的“均勻”是指“在最壞情況下獲得最好的效果”。因為一棵樹的深度是由它根節點兒子中深度最大的兒子決定的,為了使得整個樹深度最小,我們就要務必使得深度最大的兒子深度最小,這就是“均勻”分配的理論根據。
練習:第 12 屆全國青少年信息學奧林匹克聯賽初賽題 現有 80枚硬幣,其中有一枚是假幣,其重量稍重,所有真幣的重量都相同,如果使 用不帶砝碼的天平稱重,最少需要稱幾次,就可以找出假幣?你還要指出第1次的稱重方法。請寫出你的結果:
答案:4次 ;第一步,分成三組:27,27,26,將前2組放到天平上。
