分治法及遞迴演算法的分析方法

2021-07-11 11:46:11 字數 476 閱讀 6952

1.什麼是分治法?

當求解的問題較複雜或者規模較大時,不能立即得到原問題的解。但是這些問題可以分解為若干個與原問題性質相類似的子問題,而這些子問題較簡單可方便得到他們的解,因此通過合併這些子問題的解可得到原問題的解。

2.應用分治法的三個步驟:

分解問題——>求解子問題——>合併子問題的解

3.歸併排序

由分治法三個步驟可方便得到解此問題的演算法:

merge-sort(a,p,r)

if p2┘

merge-sort(a,p,q)

merge-sort(a,q+1,r)

merge(a,p,q,r)

merge(a,p,q,r)

n1<-q-p+1

n2<-r-q

for i<-

1to n1

//明天再寫

演算法複雜度的分析 遞迴分治法

f n o g n c 0,n0 n,n n0,f n cg n c 0,n0 n,n n0,f n cg n f的階不高於g的階。f n g n c 0,n0 n,n n0,f n cg n c 0,n0 n,n n0,f n cg n f的階不低於g的階。f n g n f n o g n f ...

常見演算法設計方法 分治法

歸併排序就是常見的一種採用 分治法 進行設計的演算法,以下先給出具體的c 版 示例 對列表進行遞迴排序 待排序陣列 public static listsort listlist 合併已經排序好的兩個list left list right list private static listmerge...

演算法設計與分析基礎 分治法

1.將乙個問題劃分為同一型別的若干子問題,子問題最好規模相同 2.對子問題求解 一般使用遞迴方法 3.有必要的話,合併子問題的解,得到原始問題的答案 下圖描述的是將乙個問題劃分為兩個較小子問題的例子,也是最常見的情況 1.主要思想 對於乙個需要排序的陣列a 0 n 1 將其一分為二 a 0 n 2 ...