算法时间复杂度

函数的渐近的界

$O$

定义如下:

设$f$和$g$是定义域为自然数集$N$上的函数,若存在正数$c$和$n_0$,使得对一切$n\geq n_0$有

成立,则称$f(n)$的渐进上界是$g(n)$,记作

  • $f(n)$的阶不高于$g(n)$的阶
  • 可能存在多个正数$c$,只要指出一个即可
  • 对前面有限个$n$值可以不满足不等式
  • 常函数的渐进上界可以写作$O(1)$

$\Omega$

定义如下:

设$f$和$g$是定义域为自然数集$N$上的函数,若存在正数$c$和$n_0$,使得对一切$n\geq n_0$有

成立,则称$f(n)$的渐进下界是$g(n)$,记作

  • $f(n)$的阶不低于$g(n)$的阶
  • 可能存在多个正数$c$,只要指出一个即可
  • 对前面有限个$n$值可以不满足不等式

$o$

定义如下:

设$f$和$g$是定义域为自然数集$N$上的函数,若对于任意正数$c$都存在$n_0$,使得对一切$n\geq n_0$有

成立,则记作

  • $f(n)$的阶低于$g(n)$的阶
  • 对不同正数$c$,$c$越小$n_0$越大
  • 对前面有限个$n$值可以不满足不等式

$\omega$

定义如下:

设$f$和$g$是定义域为自然数集$N$上的函数,若对于任意正数$c$都存在$n_0$,使得对一切$n\geq n_0$有

成立,则记作

  • $f(n)$的阶高于$g(n)$的阶
  • 对不同正数$c$,$c$越小​$n_0$越小
  • 对前面有限个$n$值可以不满足不等式

$\theta$

定义如下:

若$f(n)=O(g(n))=\Omega(g(n))$,则记作

  • $f(n)$与$g(n)$的阶相等
  • 对前面有限个$n$值可以不满足条件

定理

定理1

设$f$和$g$是定义域为自然数集合的函数

  • 如果$lim_{n\rightarrow\infty}\frac{f(n)}{g(n)}$存在,且等于某个常数$c>0$,那么$f(n)=\theta(g(n))$
  • 如果$lim_{n\rightarrow\infty}\frac{f(n)}{g(n)}=0$,那么$f(n)=o(g(n))$
  • 如果$lim_{n\rightarrow\infty}\frac{f(n)}{g(n)}=+\infty$,那么$f(n)=\omega(g(n))$

一些重要结果:

  • 多项式函数的阶低于指数函数的阶

    $n^d=o(r^n),r>1,d>0$

  • 对数函数的阶低于幂函数的阶

    $ln\ n=o(n^d),d>0$

定理2

函数的阶之间的关系具有传递性,具体如下:

设函数$f、g、h$的定义域为自然数集合

  • 如果$f=O(g)$且$g=O(h)$,那么$f=O(h)$
  • 如果$f=\Omega(g)$且$g=\Omega(h)$,那么$f=\Omega(h)$
  • 如果$f=\theta(g)$且$g=\theta(h)$,那么$f=\theta(h)$

定理3

设函数$f、g、h$的定义域为自然数集合,若对某个其它函数$h$,有$f=O(h)$和$g=O(h)$,那么$f+g=O(h)$。

该性质可以推广到有限个函数。

因为算法有有限步骤组成,根据每一步的时间复杂度函数上界,可以确定整个算法的时间复杂度函数上界。

几类重要函数

基本函数的分类

按照阶的高低分

  • 至少指数级别

    $2^n、3^n、n!$

  • 多项式级

    $n、n^2、n\,log\,n、\sqrt n$

  • 对数多项式级

    $log\,n、log^2n、log\,log\,n$

对数函数

一些符号如下:

  • $log\,n=log_2n$
  • $log^kn=(log\,n)^k$
  • $log\,log\,n=log(log\,n)$

性质:

  • $log_2n=\theta(log_ln)$
  • $log_bn=o(n^\alpha),\alpha>0$
  • $a^{log_bn}=n^{log_ba}$

指数函数与阶乘

  • 斯特林(Stirling)公式:

    $n!=\sqrt{2\pi n}\ (\frac{n}{e})^n(1+\theta(\frac{1}{n}))$

  • $n!=o(n^n)$

  • $n!=\omega(2^n)$

  • $log(n!)=\theta(n\ log\ n)$

取整函数

  • $x-1<\lfloor x\rfloor\leq x\leq\lceil x\rceil<x+1$
  • $\lfloor x+n\rfloor=\lfloor x\rfloor+n,\lceil x+n\rceil=\lceil x\rceil+n,n为整数$
  • $\lceil\frac{n}{2}\rceil+\lfloor\frac{n}{2}\rfloor=n$
  • $\lceil\frac{\lceil\frac{n}{a}\rceil}{b}\rceil=\lceil\frac{n}{ab}\rceil,\lfloor\frac{\lfloor\frac{n}{a}\rfloor}{b}\rfloor=\lfloor\frac{n}{ab}\rfloor$

作者:@臭咸鱼

转载请注明出处:https://chouxianyu.github.io

欢迎讨论和交流!