㈠ 演算法設計與分析|5個演算法
1)分治法
對於一個規模為n的問題,若該問題可以容易地解決(比如說規模n較小),則直接解決;否則將其分解為k個規模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞歸地解這些子問題,然後將各子問題的解合並得到原問題的解。
2)回溯法(深度優先)
回溯法是一種選優搜索法,按選優條件向前搜索,以達到目標。但當搜索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇。這種走不通就退回再走的技術就是回溯法。
3)貪心法
總是做出在當前來說是最好的選擇,而並不從整體上加以考慮,它所做的每步選擇只是當前步驟的局部最優選擇,但從整體來說不一定是最優的選擇。由於它不必為了尋找最優解而窮盡所有可能解,因此其耗費時間少,一般可以快速得到滿意的解,但得不到最優解。
4)動態規劃法
在求解問題中,對於每一步決策,列出各種可能的局部解,再依據某種判定條件,舍棄哪些肯定不能得到最優解的局部解,在每一步都經過篩選,以每一判瞎步都是最優解來保證全局是最優解。
5)分支限界法(廣度優先)
分治演算法求出的子問題是互相獨立的。
動態規劃演算法具有最優子結構性質和重疊子問題性質。
貪心演算法不追求最優解,只求可森早行解,因此不具備最優子結構的特性。
回溯演算法把問題的解空間轉化成圖或者樹結構,然後使用深度優先搜索策略進行遍歷,遍歷的過程中記錄和尋找所有可此沖雀行解或者最優解。
分支限界演算法類似於回溯演算法,它以廣度優先方式搜索解空間樹。
㈡ 最通俗、簡單的分治演算法思想
分治演算法的基本思想是將一個計算復雜的問題分為規模較小,計算簡單的小問題求解 ,然後綜合各個小問題,而得到最終問題的答案。分治演算法的執行過程如下:
♦對於一個規模為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個為假幣!!