二、分治與遞迴
阿新 • • 發佈:2019-02-15
分治法
設計思想:將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。
(1)對求解問題進行系統的分析
(2)之後將其分解成若干性質相同的子問題,所得結果為求解子集
(3)再對這些求解子集分別處理,如果某些子集需要分而治之,再遞迴使用上述的方法,直到求解子集不需要再細分為止
(4)最後歸併子集的解即得到原問題的解
分治法的適用條件
分治法所能解決的問題一般有四個特徵:
該問題的規模縮小到一定的程度就可以容易地解決;
該問題可以分解為若干個規模較小的相同問題,即該問題具有最優子結構性質
利用該問題分解出的子問題的解可以合併為該問題的解;
該問題所分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子問題。
遞迴法
遞迴與遞迴呼叫:
一個函式在它的函式體內呼叫它自身稱為遞迴(recursion) 呼叫。
使用遞迴要注意以下幾點:
遞迴就是在過程或函式裡呼叫自身;
在使用遞增歸策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口
分治與遞迴的聯絡
由分治法產生的子問題往往是原問題的較小模式,這就為使用遞迴技術提供了方便。
在這種情況下,反覆應用分治手段,可以使子問題與原問題型別一致而其規模卻不斷縮小,最終使子問題縮小到很容易直接求出其解。這自然導致遞迴過程的產生。
分治與遞迴像一對孿生兄弟,經常同時應用在演算法設計之中,並由此產生許多高效演算法。