算法时间复杂度的渐进表示法 + 分析窍门

如果算法里面只有加减法,则算法时间算加减法的次数。
如果算法里面包含加法和乘法,则算法时间一般只算乘法次数,因为计算机计算加减法很快,可忽略。
时间复杂度的渐进表示法

  • T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) 表示存在常数 C > 0 C>0 n 0 > 0 n_0>0 使得当 n > g e q n 0 n>geq n_0 时有 T ( n ) C f ( n ) T(n)\leq C·f(n)
  • T ( n ) = Ω ( g ( n ) ) T(n)=\Omega(g(n)) 表示存在常数 C > 0 C>0 n 0 > 0 n_0>0 使得当 n n 0 n\geq n_0 时有 T ( n ) C g ( n ) T(n)\geq C·g(n)
  • T ( n ) = θ ( h ( n ) ) T(n)=\theta(h(n)) 表示同时有 T ( n ) = O ( h ( n ) ) T(n)=O(h(n)) T ( n ) = Ω ( h ( n ) ) T(n)=\Omega(h(n))

O ( f ( n ) ) O(f(n)) 可有无数种表达方式,一般取最小的上界
Ω ( g ( n ) ) \Omega(g(n)) 可有无数种表达方式,一般取最大的上界

时间复杂度分析小窍门

  • 若两端算法分别有复杂度 T 1 ( n ) = O ( f 1 ( n ) ) T_1(n)=O(f_1(n)) T 2 ( n ) = O ( f 2 ( n ) ) T_2(n)=O(f_2(n)) ,则
    T 1 ( n ) + T 2 ( n ) = m a x ( O ( f 1 ( n ) ) , O ( f ( n ) ) ) T_1(n)+T_2(n)=max(O(f_1(n)), O(f(n)))
    T 1 ( n ) + T 2 ( n ) = O ( f 1 ( n ) × f 2 ( n ) ) T_1(n)+T_2(n)=O(f_1(n)\times f_2(n))
  • T ( n ) T(n) 是关于n的k阶多项式,则 T ( n ) = θ ( n k ) T(n)=\theta(n^k)
  • 一个for循环的时间复杂度等于循环次数乘以循环体代码的复杂度
  • if-else结构的复杂度取决于if的条件判断复杂度和两个分枝部分的复杂度,总复杂度取三者中最大
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/SanyHo/article/details/107401984