分治法

介绍分治法的基本思想、时间复杂度分析以及主定理的应用

分治法

分治法的时间复杂度分析

分治法的时间复杂度表达式

$$T(n) = aT(n/b) + f(n)$$
  • 其中
    • a:子问题的个数
    • n/b:每个子问题的规模
    • f(n):分解问题和合并结果的时间复杂度

主定理

  • 主定理是解决分治算法时间复杂度的强大工具,设$T(n) = aT(n/b) + f(n)$,其中$a \geq 1, \space b > 1 $,则
    • 情况1:$f(n) = O(n^c)$,其中$c < log_b(a)$
      • 此时$T(N) = \Theta(n^{log_b(a)})$
      • 即此时递归树的叶子节点主导了时间复杂度
    • 情况2:$f(n) = \Theta(n^c)$,其中$c = log_b(a)0$
      • 此时$T(n) = \Theta(n^c \times log \space n)$
      • 每层的工作量相同,总共有$log \space n$层
    • 情况3:$f(n) = \Omega(n^c)$,其中$c > log_b(a)$
      • 此时$T(n) = \Theta(n \space log \space n)$

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计