如果有错误的地方,欢迎大家指正,只希望不要误导别人。
开篇:
学习算法时间复杂度分析,首先要对O、o、Ω、ω、Θ这几个符号有基本的了解,下面将给出这几个符号详细的定义。
1、大O符号:
定义:
设f和g是定义域为自然数集N上的函数,若存在正数c和n0,,使得对一切 n >= n0有 0 <= f(n) <= cg(n)成立, 则
称f(n)的渐进上界是g(n),记做:f(n) = O(g(n))
例子:
f(n) = n^2 + n, g(n) = n^2; 当 c = 2, 只要n0 = 1, 就满足, f(n) <= cg(n) ==> 这个时候称g(n)为f(n)的渐进上界,
记作:f(n) = O(n^2)
注意:
1、f(n) = O(g(n)),f(n)的阶不高于g(n)的阶。
2、可能存在多个正数c,只要指出一个即可。
3、对前面有限个值可以不满足不等式。
4、常函数可以写作O(1).
2、小o符号:
定义:
设f和g是定义域为自然数集N上的函数,若对于任意正数c都存在n0,使得对一切 n >= n0,有 0 <= f(n) < cg(n)成立,
则记作f(n) = o(g(n))
例子:
f(n) = n^2 + n , 则f(n) = o(n^3) c >= 1成立,因为n^2 + n < cn^3(n0 = 2)
任给1 > c > 0, 取n0 > ⌈2/c⌉即可,因为
cn >= cn0 > 2 (当 n >= n0)
n^2 + n < 2n^2 < cn^3
注意:
1、f(n) = o(g(n)),f(n)的阶低于g(n)的阶。
2、对不同正数c,n0不一样,c越小n0越大。
3、对于前面有限个n值可以不满足不等式。
3、大Ω符号:
定义: