A. 最通俗、簡單的分治演算法思想
分治演算法的基本思想是將一個計算復雜的問題分為規模較小,計算簡單的小問題求解 ,然後綜合各個小問題,而得到最終問題的答案。分治演算法的執行過程如下:
♦對於一個規模為N的問題,若該問題可以容易地解決(比如說規模N較小),則直接解決,否則執行下面的步驟。
♦將該分解為M個規模較小的子問題,這些子問題互相獨立,並且與原問題形式相同。
♦遞歸地解這些子問題。
♦然後,將各子問題的解合並得到原問題的解。
問:一個袋子里有30個硬幣,其中一枚是假幣,並且假幣和真幣一模一樣,肉眼很難分辨,目前只知道假幣比真幣重量輕一點。請問如何區分出假幣呢? 可以採用遞歸分治的思想來求解這個問題:
♦首先為每個銀幣編號,然後可以將所有的銀幣等分為兩分,放在天平的兩邊。這樣就將區分30個硬幣的問題,變為區別兩堆硬幣的問題。
♦因為假銀幣的分量較輕,因此天平較輕的一側中一定包含假銀幣。
♦再將較輕的一側中的硬銀幣等分為兩分,重復上述的做法。鄭念絕
♦直到剩下2枚高拆硬銀幣,可用天平直接找出假銀幣來。
運行結果
分治喊姿演算法求解假的銀幣問題!
請輸入硬幣的數量:13
請輸入每個硬幣的質量:
第1個:2
第2個:2
第3個:2
第4個:2
第5個:2
第6個:2
第7個:2
第8個:2
第9個:2
第10個:1
第11個:2
第12個:2
第13個:2
第10個為假幣!!