經典演算法 分治策略

2022-10-11 05:42:11 字數 1267 閱讀 6799

一、什麼是分治  

有很多演算法是遞迴的:為了解決乙個給定的問題,演算法要一次或多次遞迴呼叫其自身來解決的子問題。這些演算法通常採用分治策略:將原問題劃分為n個規模較小而結構與原問題相似的子問題;遞迴地解決這些子問題,然後再合併其結果,就得到原問題的解。

習慣上,在正文中至少含有兩個遞迴呼叫的例程叫作分治演算法,而正文中只含有乙個遞迴呼叫的例程不是分治演算法。

二、分治演算法的三個步驟

分治模式中,我們遞迴地求解乙個問題,在每層遞迴中應用如下三個步驟:

分解(divide)步驟將問題劃分為一些子問題,子問題的形式與原問題一樣,只是規模更小。

解決(conquer)步驟遞迴地求解出子問題。如果子問題規模足夠小,則停止遞迴,直接求解。

合併(combine)步驟將子問題的解合併為原問題的解。

當子問題足夠大,需要遞迴求解時,我們稱之為遞迴情況(recursive case)。當子問題變得足夠小,不再需要遞迴時,我們說遞迴已經」觸底「,進入了基本情況(base case)。有時,除了與原問題形式完全一樣的規模更小的子問題外,還需要求解與原問題不完全一樣的子問題。我們將這些子問題的求解看做合併步驟的一部分。

三、分治演算法的應用場景

1、該問題的規模縮小到一定的程度就可以容易的解決;

2、該問題可以分解為若干規模較小相同的問題,即該問題具有最小最優子結構。

3、該問題分解出的子問題的解可以合併成為該問題的解。

4、該問題所分解出的各子問題是相互獨立的,即子問題之間不包括公共的子問題。

第一條特徵是絕大多數問題都可以滿足的,因為問題的計算複雜性一般是隨著問題規模的增加而增加;

第二條特徵是應用分治法的前提,它也是絕大多數問題可以滿足的,此特徵反映了遞迴思想的應用

第三條特徵是關鍵,能否利用分治法完全取決於問題是否具有第三條特徵,如果具備了第一條和第二條而不具備第三條,則可以

考慮用貪心法或動態規劃法。

第四條特徵涉及到分治法的效率,如果各子問題是不獨立的則分治法要做許多不必要的工作,重複地解決公共的子問題,此時雖然可用分治法,但一般用動態規劃法要好。

四、可使用分治法解決的問題

(1)二分搜尋

(2)大整數乘法

(3)strassen矩陣乘法

(4)棋盤覆蓋

(5)合併排序

(6)快速排序

(7)線性時間選擇

(8)最接近點對問題

(9)迴圈賽日程表

(10)漢諾塔

五、其他比較好的資料

演算法導論 分治策略

最大非空陣列問題 1.分解 將問題劃分為規模更小的自問題。2.解決 遞迴的地解出子問題。3.合併 將子問題的解組合成原問題的解。1.代入法 2.遞迴樹法 3.主方法找出陣列的最大連續非空子陣列複雜度 n 2 偽 max subarry a max infinity for i 0 to a.leng...

遞迴演算法與分治策略

關於遞迴的學習 1 遞迴演算法的基本思想是 把規模大的 較難解決的問題變成規模較小的的問題。規模較小的問題又變成規模更小的問題,並且小到一定程度可以直接得出它的解,從而得到原來問題的解。遞迴是一種直接或間接呼叫自身的函式的一種演算法,很常用,一般用於解決三類問題 資料的定義按遞迴定義的。fibona...

演算法思想之分治遞迴策略

摘自 鄒恒明 演算法之道 採取分治策略解決問題有三個步驟 1 將問題分解為若干個小的子問題。每個子問題和大問題同型,但規模更小。2 遞迴解決這些問題。3 將子問題的解答合併,並獲得大問題的解答。第二步中 遞迴解決這些子問題 指的是按照同樣的分治策略進行求解,即通過將這些子問題分解到更小的孫子問題來進...