分治法

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

解決困難問題

    ~~~~分治法是一個解決複雜問題的好工具,它可以把問題分解成若干個子問題,把子問題解決,再組合到一起形成大問題的答案。

算法效率

    ~~~~人民發現有很多效率很高的分治算法,比如Karatsuba快速乘法算法、快速排序算法和並行算法、矩陣乘法的施特拉森算法、快速傅里葉變換等。

循環遞歸

在每一層遞歸上都有三個步驟:

1.分解:將原問題分解爲若干個規模較小,相對獨立,與原問題形式相同的子問題。
2.解決:若子問題規模較小且易於解決時,則直接解。否則,遞歸解決子問題。
3.合併:將各子問題的解合併爲原問題的解。

資料來源:維基百科-分治法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章