• 递归时间复杂度分析-主定理分析


    标签: 算法 复杂度分析


    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) ]

  • 相关阅读:
    Google Authentication 机制原理
    ldap日志
    ldap + kerberos 整合
    kerberos
    U盘格式化后的恢复
    初始化脚本(Os_Init_Optimization.sh)
    拿到新机器,进行初始化和部署Nginx的过程
    python 列表生成式
    python 装饰器
    简单总结无线CPE、无线AP、无线网桥的不同之处【转】
  • 原文地址:https://www.cnblogs.com/banyu/p/6593051.html
Copyright © 2020-2023  润新知