把乙個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題,直到最後子問題小到可以簡單的直接求解,原問題的解即子問題的解的合併。這個技巧是很多高效演算法的基礎,如排序演算法(快速排序,歸併排序),傅利葉變換(快速傅利葉變換),大資料中的mr,現實中如漢諾塔遊戲。
分治法對問題有一定的要求:
基本思想與分治法類似,也是將待求解的問題分解為若干個子問題(階段),按順序求解子階段,前一子問題的解,為後一子問題的求解提供了有用的資訊。在求解任一子問題時,列出各種可能的區域性解,通過決策保留那些有可能達到最優的區域性解,丟棄其他。依次解決各子問題,最後乙個子問題就是初始問題的解。
與分治法最大的不同在於,分治法的思想是併發,動態規劃的思想是分步。該方法經分解後得到的子問題往往不是互相獨立的,其下乙個子階段的求解往往是建立在上乙個子階段的解的基礎上。動態規劃演算法同樣有一定的適用性場景要求:
同樣對問題要求作出拆解,但是每一步,以當前區域性為目標,求得該區域性的最優解。那麼最終問題解決時,得到完整的最優解。也就是說,在對問題求解時,總是做出在當前看來是最好的選擇,而不去從整體最優上加以考慮。從這一角度來講,該演算法具有一定的場景侷限性。
回溯演算法實際上是乙個類似列舉的搜尋嘗試過程,在每一步的問題下,列舉可能的解決方式。選擇某個方案往深度**,尋找問題的解,當發現已不滿足求解條件,或深度達到一定數量時,就返回,嘗試別的路徑。回溯法一般適用於比較複雜的,規模較大的問題。有「通用解題法」之稱。
與回溯法類似,也是一種在空間上列舉尋找最優解的方式。但是回溯法策略為深度優先。分支法為廣度優先。分支法一般找到所有相鄰結點,先採取淘汰策略,拋棄不滿足約束條件的結點,其餘結點加入活結點表。然後從存活表中選擇乙個結點作為下乙個操作物件。
常見演算法思想
演算法 窮舉演算法思想 exhaustive attack method 窮舉演算法是最簡單的一種演算法,其依賴於計算機的強大計算能力來窮盡每一種可能的情況,從而達到求解問題的目的。窮舉演算法效率並不高,但是適應於一些沒有明顯規律可循的場合 窮舉演算法的基本思想就是從所有可能的情況中搜尋正確的答案,...
常見排序演算法思想
穩定的排序演算法有 1.氣泡排序 將小的數往前挪,將大的數往後挪。2.插入排序 移動第i 1的那個數,在此數之前的序列中,從後往前進行比較相鄰的兩個數,將更小的數放前面,保證每次第i 1個之前的子串行有序。3.歸併排序 利用分治的思想,將乙個無序的陣列分解若干以兩個數為一組的子陣列,然後將每個子陣列...
演算法 常見演算法分類和思想
演算法分類分為 1.基礎演算法 包括字串,陣列,正規表示式,排序,遞迴等。2.資料結構 堆,棧,佇列,鍊錶,矩陣,二叉樹等。3.高階演算法 貪心演算法,動態規劃等。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。void bubble ...