27個砝碼中,只有一個與其他26個砝碼重量不同且不知該砝碼是輕還是重,問最少需要稱多少次能找到該砝碼

一. 首先,遇到這種題目,第一反應就是二分,對半稱,再對半稱,所以有方法一:

  1. 先取出一個,剩餘26個對半稱(第1次),此時最優情況可能就出現了,剛好取出的那個砝碼就是重量不一樣的砝碼(下文直接用特殊砝碼代替重量不一樣的砝碼),於是13對13就平衡了。
  2. 如果取出的砝碼(記爲 i )是普通砝碼,就繼續往下稱。
    假設剛纔分的兩堆分別爲A(13)與B(13),則將A(13)中取出一個砝碼,記爲 j ,剩下的12個砝碼,對半稱(第2次),分別記爲 Aa’(6) 與 Ab’(6),同時對B(13)做同樣處理,取出的砝碼記爲 k ,對半稱(第3次)的兩堆分別爲 Ba’(6) 和 Bb’(6),此時有個特殊情況,就是剛好從堆 A(13) 與 B(13) 中取出的兩個砝碼中有一個是特殊砝碼。這樣就直接在已經取出的 i,j,k 三個砝碼中來找出特殊砝碼,因爲經過 1 中步驟,已經知道 i 是普通砝碼,則只需將 i 與 j、k 中任意一個砝碼稱一次(第4次),假設 i 與 j 稱,如果平衡,則 k 是特殊砝碼,如果不平衡,則 j 是特殊砝碼,這樣就一共稱了4次,這還是在第二次對半稱時出現最優的情況,如果 j 與 k 都不是特殊砝碼,則還需要稱更多次。

二. 實際上在解決這種不知道砝碼是輕還是重的問題時,三分更好。

將27個砝碼分爲3堆,每堆9個,分別記爲A(9)、B(9)、C(9)。

  1. 最優情況
    • 將A(9)與B(9)比較,此時平衡,則C(9)中包含特殊砝碼。
    • 將C(9)均分成3堆,每堆3個,分別記爲Ca’(3)、Cb’(3)、Cc’(3),將Ca’(3)與Cb’(3)比較,此時平衡,則Cc’(3)中包含特殊砝碼。
    • 將Cc’(3)中的3個砝碼分別記爲 i、j、k ,將 i 與 j 比較,此時平衡,則 k 爲特殊砝碼。這就是三分解的最優情況,稱了3次。
  2. 普通情況
    • A(9)與B(9)比較,此時不平衡(第1次),然後將A(9)與B(9)中任意一堆與C(9)比較(第2次),假設A(9)與C(9)比較,如果平衡,則B(9)中包含特殊砝碼,如果不平衡,則A(9)中包含特殊砝碼,並且此時我們知道特殊砝碼到底是輕還是重了
    • 假設經過上一步,得到A(9)中包含特殊砝碼,且特殊砝碼比普通砝碼重。
    • 此時如果對A(9)採用方法一中的方法,取出一個砝碼,然後4對4比較,且取出的砝碼即爲特殊砝碼,這樣也只稱3次,但如果取出的砝碼不是特殊砝碼,則需要繼續二分下去,共需要稱5次。
    • 如果繼續三分,則將A(9)三分爲 Aa’(3)、Ab’(3)、Ac’(3),將 Aa’(3) 與 Ab’(3) 比較(第3次),如果平衡,則 Ac’(3) 包含特殊砝碼,如果不平衡,則重的一堆中包含特殊砝碼(基於上面的假設)。
    • 假設 Aa’(3) 中包含特殊砝碼,其中的三個砝碼分別爲 i、j、k,任意比較兩個砝碼,即可得到特殊砝碼(第4次)。總共稱了4次。

這類型問題一般採用分治的思想解決,但知道輕重與不知道輕重的解決方法是有區別的,除去特殊情況,知道輕重,最少兩個比較對象就可以解決問題,不知道輕重,則至少需要3個比較對象來解決。

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