zoukankan      html  css  js  c++  java
  • 递归时间复杂度分析-主定理分析

    标签: 算法 复杂度分析


    1. 主定理定义

    以下是评估递归时间复杂度的主定理,例如有递归形式

    [T(n) = aT(n/b) + f(n) ]

      其中, (a≥1)(b≥1), 均为常数, (f(n))是一个确定的正函数。 在(f(n))的三类情况下, 我们有(T(n))的渐近估计式:

    1. 若对于某常数(ε>0), 有(f(n) = O(n ^ {log_b a - ε} )), 则(T(n) = Theta(n ^ {log_b a}))

    2. (f(n) = O(n ^ {log_b a})), 则(T(n) = O(n ^ {log_b a} *lgn))

    3. 若对某常数(ε>0), 有(f(n)=Omega(n ^{log_b a + ε})), 且对常数(c<1) 与所有足够大的(n),有(af(n/b)le cf(n)), 则(T(n)=Theta(f(n)))


    2. 主定理使用方式

    主定理可以理解为:

    情况1, 若(f(n) lt n ^ {log_b a}), 则复杂度为 $T(n)=Theta(n ^ {log_b a}) (; 情况2, 若)f(n) = n ^ {log_b a}$, 则复杂度为 $T(n)=Theta(n ^ {log_b a} * lg n) (; 情况3, 若)f(n) gt n ^ {log_b a}$, 则复杂度为 $T(n)=Theta(f(n)) $。


    3. 主定理应用示例

    (1)求(T(n) = 9T(n/3) + n)
    其中(a = 9), (b = 3), (f(n) = n), 代入求解得 (n ^{log_3 9} = n ^ 2), 由于(f(n) < n ^ 2), 情况1成立,(T(n) = Theta(n ^ 2))

    (2)求(T(n) = T(2n/3) + 1)
    其中(a = 1), (b = 3/2), (f(n) = 1), 代入求解得 (n ^{log_{3/2} 1} = n ^ 0 = 1), 由于(f(n) = 1), 情况2成立,(T(n) = Theta(lg n))

    (3)归并排序的复杂度分析
    (二路)归并排序属于分治法,本质是先把数组分成两半,再做合并操作,其中合并操作复杂度为常数(c),则可以看作

    [T(n) = 2T(n / 2) + c ]

    其中(a=2), (b = 2),$ f(n) = c(, 则根据主定理分析,)n^{log_2 2} = n ^ 1 = 1 $, 属于情况2, 则归并排序的复杂度为

    [T(n) = Theta(n *lg n) ]

  • 相关阅读:
    [模板] AC自动机
    U32670 小凯的数字 数学
    P1993 小K的农场 差分约束系统
    P2532 [AHOI2012]树屋阶梯 卡特兰数
    [模板] manacher
    Dynamic Rankings
    CQOI2015 任务查询系统
    [POI2014]KUR-Couriers
    JSOI2008 火星人
    ZJOI2006 书架
  • 原文地址:https://www.cnblogs.com/banyu/p/6593051.html
Copyright © 2011-2022 走看看