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)) ?   显然不对!
  • 相关阅读:
    C++文件流操作与流缓冲重定向
    转减小编译时间的两种做法
    AFX_MANAGE_STATE(AfxGetStaticModuleState())
    一个游戏程序员的资料一(转)
    ACE的Doublecheckedlocking的Singleton
    Hibernate 过滤器
    悲观锁 HibernateTest.java
    HQL 语句
    HQL 查询语句
    Hibernate 中继承映射之三 每一个类一个表
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/13700709.html
Copyright © 2011-2022 走看看