设f和g是定义域为自然数集N上的函数。
1)若存在正数c和n0使得对一切n >= n0 有0 <= f(n)<=cg(n) 成立,则称f(n)的渐进的上界是g(n),记作f(n) = O(g(n)).
2)若存在正数c和n0使得对一切n >= n0 有0 <= cg(n)<=f(n) 成立,则称f(n)的渐进的下界是g(n),记作f(n) = Ω(g(n)).
3)若存在正数c和n0使得对一切n >= n0 有0 <= f(n)<cg(n) 成立,记作f(n) = o(g(n)).
4)若存在正数c和n0使得对一切n >= n0 有0 <= cg(n)<=f(n) 成立,记作f(n) = w(g(n)).
5)f(n) = O(g(n)), f(n) = Ω(g(n)) 则记作 f(n) = Θ(g(n)).
c是一个与n无关的常数。1)和3)中记号分别叫“大O记号”和“小o记号“ 他们区别在于f(n) = O(g(n))时,f(n)的阶可能低于g(n)也可能等于g(n)。f(n) = o(g(n))时,f(n)的阶只能低于g(n)因此f(n) = o(g(n))可以推出f(n) = O(g(n))。
定理
1)n ->∞时 f(n)/g(n)存在,并且等于某个常数c>0,那么f(n) = Θ(g(n)).
2) n ->∞时 f(n)/g(n) = 0, 那么f(n) = o(g(n))
3) n ->∞时 f(n)/g(n) = ∞, f(n) = w(g(n)).
以下是各种函数的时间复杂度由高到低的排列(√为根号):
n!, 2^2n , n2^n, (logn )^logn = n ^ loglogn, n^3, nlogn = Θlog(n!), n = Θ(log10^n), 2^log√n, 2^√(2logn) , loglogn