zoukankan      html  css  js  c++  java
  • 算法时间复杂度的定义及运算规则

    1、Big O

    • 需要定义算法的时间复杂度
      • 不必非常精确
      • 通常只需要了解其上界,相对简单

    定义

    • (f(n) = O(g(n)), if exists c > 0:c * g(n) geq f(n))
    • (f(n) = Omega (g(n)), if exists c > 0:c * g(n) leq f(n))
    • (f(n) = Theta (g(n)), if exists c_1 > 0, c_2 > 0:c_1 * g(n) leq f(n) leq c_2 * g(n))

    注:(f(n) = Theta (g(n)), if and only if f(n) = O(g(n)) and f(n) = Omega (g(n)))

    2、复杂度函数的运算规则

    • (o(T_1(n) + T_2(n)) = max(O(T_1(n)), O(T_2(n))))
    • 如果 (T(n)) 是阶数为 (k) 的任意多项式,则 (O(T(n)) = O(n^k))
    • (O(T_1(n) * T_2(n)) = O(T_1(n)) * O(T_2(n)))
    • (O(dominant terms + others) = O(dominant terms)) (dominant terms:主项)
    • (O(T_1(n) - T_2(n)) = unknown)

    3、O 和 =

    • 对多项式 (f_1(n) = 3n^2 - 1000n + 25),有 (f_1(n) = O(n^2))

    • 同样,对 (f_2(n) = 2n^2 + 5),有 (f_2(n) = O(n^2))

      然而,这是否意味着 (f_1(n) = f_2(n)) ?     答案显然是“否”

    • 显然,如果 (x = y)(y = z),则 (x = z)

    • 对于用O表示的复杂度,结合律不成立,= 等价于 (in)

    4、O 表示中的常数

    • 常系数无关紧要,可以丢弃
    • 低阶项无关紧要,可以不要
    • 以常数为底的对数函数中的常数指数也可以省略
    • 能否去掉所有的指数?   (O(n) equiv O(n^2)) ?   显然不对!
  • 相关阅读:
    light oj 1105 规律
    light oj 1071 dp(吃金币升级版)
    light oj 1084 线性dp
    light oj 1079 01背包
    light oj 1068 数位dp
    light oj 1219 树上贪心
    light oj 1057 状压dp TSP
    light oj 1037 状压dp
    矩阵快速幂3 k*n铺方格
    矩阵快速幂2 3*n铺方格
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/13700709.html
Copyright © 2011-2022 走看看