算法系列之分治法

分治法

分治算法的核心思想是将原问题划分为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)。

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