演算法導論 第四章 分治策略 (6)分治策略概述

2021-09-03 08:08:46 字數 1147 閱讀 4276

當子問題足夠大,需要遞迴求解時,稱之為遞迴情況。當子問題變得足夠小,不再需要遞迴時,我們說遞迴已經「觸底」,進入了基本情況

遞迴式與分治方法是緊密相關的,因為使用遞迴式可以很自然的刻畫分治演算法的執行時間。乙個遞迴式就是乙個等式或不等式,它通過更小的輸入上的函式值來描述乙個函式。

子問題的規模不必是原問題規模的乙個固定比例。

求解遞迴式的方法:

世界中,我們會忽略遞迴式宣告和求解的一些技術細節。如果對 n

nn 個元素呼叫mergesort,當 n

nn 為奇數時,兩個子問題的規模分別為 ⌊n/

2⌋

\lfloor n/2 \rfloor

⌊n/2

⌋ 和 ⌈n/

2⌉

\lceil n/2 \rceil

⌈n/2

⌉,準確來說都不是 n/2

n/2n/

2,因為當 n

nn 是奇數時, n/2

n/2n/

2 不是乙個整數。遞迴式為:

t (n

)=

\theta(1) & n = 1 \\ t(\lceil n/2 \rceil) + t(\lfloor n/2 \rfloor) + \theta(n) & n > 1 \end \right.

t(n)

= \theta(1) & n = 1 \\ 2t(n/2) + \theta(n) & n > 1 \end \right.

t(n)={

θ(1)

2t(n

/2)+

θ(n)

​n=1

n>1​

常被表示為:

t (n

)=2t

(n/2

)+θ(

n)

t(n) = 2t(n/2) + \theta(n)

t(n)=2

t(n/

2)+θ

(n)去掉了 n

nn 很小時函式值的顯式描述。原因在於,雖然改變 t(1

)t(1)

t(1)

的值會改變遞迴式的精確解,但改變幅度不會超過乙個常數因子,因而函式的增長階不會變化。

演算法導論 第四章 分治策略 速記

在分治策略中,我們遞迴的求解乙個問題,在每層遞迴中應用如下三個步驟 分解 divide 步驟將問題劃分為一些子問題 子問題的形式與原問題一樣,只是規模更小.解決 conquer 步驟遞迴地求解出子問題,如果子問題的規模足夠小,則停止遞迴,直接求解.合併 combine 步驟將子問題的解組合成原問題的...

第四章 分治法例題

給定由n個整數組成的序列 a1,a2,an 最大子段和問題要求該序列形如 的最大值 1 i j n 當序列中所有整數均為負整數時,其最大子段和為0。例如,序列 20,11,4,13,5,2 的 最大子段和為 a1,an的最大子段和 a1,a 的最大子段和 a1,an的最大子段和 a 1,an的最大子...

第四章 分治策略 最大子陣列問題

最大子陣列問題 方法一 暴力求解方法 我們可以很容易地設計出乙個暴力方法來求解本問題 簡單地嘗試沒對可能的子陣列,共有o n2 種 includeusing namespace std define int min 0x80000000 int main int i,j int sum 0,maxs...