算法系列之分治法

分治法

分治算法的核心思想是將原問題劃分爲n個規模較小而結構與原問題相似的子問題;遞歸的解決這些子問題,然後再合併其結果,就得到原問題的解。
分治法分爲三個階段:

  1. 分解:將原問題分解爲一系列子問題,如果子問題的規模任不夠小則再繼續劃分,如此遞歸下去,直到子問題規模足夠小很容易求出解爲止。
  2. 解決:求解規模足夠小的子問題。
  3. 合併:將求出的小規模的問題合併爲一個更大規模問題的解,自底向上逐步求出原問題的解。

分治算法框架程序:
在這裏插入圖片描述

設計劃分策略,把原問題P劃分爲k個規模較小的子問題,這是分治法的關鍵步驟,一般遵循以下原則:

  1. 平衡子問題原則:分割出的k個子問題規模最好大致相當。
  2. 獨立子問題原則:分割出的k個子問題重疊越少越好,最好k個子問題相互獨立,不存在重疊子問題。
master定理

分治算法的時間複雜度分析一般需要藉助master定理,先給出master的一般表達:
在這裏插入圖片描述

主定理的應用
已知T(n) = 2T(n/2) + n^2,求T(n)得時間複雜度。
使用主定理可以推出:k = 2, m = 2, d = 2,又2 < 2^2, 所以時間複雜度爲O(n^2)。

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