分治

把大問題拆成數個小問題

合併排序

先把要排序的數列切一半,然後分別排序好

直接假設你有兩個排序好的陣列了,怎麼把它合併在一起?

把比較小的拿出來

1 5 7 8

2 3 6 9

2比較小,拿2, array = [1, 2]

5 7 8

2 3 6 9

1比較小,拿1, array = [1]

3比較小,拿3, array = [1, 2, 3]

5 7 8

3 6 9

......

怎麼估複雜度

畫一下遞迴樹

每一層要花\(O(n)\)的時間

總共\(\log n\)層

複雜度\(O(n\log n)\)

最大連續和

一樣先切一半,可以分別計算左右兩邊的最大連續和

現在只要處理會跨過中間的最大連續和

可以找到從中間往左的最大連續和

還有從中間往右的最大連續和

把兩邊加起來就可以得到跨過中間的最大連續和了

複雜度分析跟合併排序一樣

\(O(n\log n)\)

分治的複雜度

主定理

分治

By scottchou

分治

  • 87