分治法

在計算機科學中 ， 分治法 （ Divide and conquer ） 是建基於多項分支遞歸的一種很重要的算法範式 。 字面上的解釋是 “ 分而治之 ” ， 就是把一個複雜的問題分成兩個或更多的相同或相似的子問題 ， 直到最後子問題可以簡單的直接求解 ， 原問題的解即子問題的解的合併 。 這個技巧是很多高效算法的基礎 ， 如排序算法 （ 歸併排序 、 快速排序 ） 、 傅立葉變換 （ 快速傅立葉變換 ） 。 另一方面 ， 理解及設計分治法算法的能力需要一定時間去掌握 。 正如以歸納法去證明一個理論 ， 爲了使遞歸能夠推行 ， 很多時候需要用一個較爲概括或複雜的問題去取代原有問題 。 而且並沒有一個系統性的方法去適當地概括問題 。 分治法這個名稱有時亦會用於將問題簡化爲只有一個細問題的算法 ， 例如用於在已排序的列中尋找其中一項的折半搜索算法 （ 或是在數值分析中類似的勘根算法 ） 。 這些算法比一般的分治算法更能有效地執行 。 其中 ， 假如算法使用尾部遞歸的話 ， 便能轉換成簡單的迴圈 。 但在這廣義之下 ， 所有使用遞歸或迴圈的算法均被視作 「 分治算法 」 。 因此 ， 有些作者考慮 「 分治法 」 這個名稱應只用於每個有最少兩個子問題的算法 。 而只有一個子問題的曾被建議使用減治法這個名稱 。 分治算法通常以數學歸納法來驗證 。 而它的計算成本則多數以解遞迴關係式來判定 。