算法中基本操作重复执行的次数是问题规模$n$的某个函数,用$T(n)$表示,$n$称为问题的规模。
在复杂度的度量上,我们使用相对增长率来分析算法,使用渐进记号来表述算法复杂度。
4种渐进记号
- 如果存在正常数$c$和$n_0$,使得当$N \ge n_0$时,$T(N) \le cf(N)$,则记为$T(N)=O(f(N))$。
- 如果存在正常数$c$和$n_0$,使得当$N \ge n_0$时,$T(N) \ge cg(N)$,则记为$T(N)=\Omega(g(N))$。
- 当且$T(N)=O(h(N))$且$T(N)=\Omega(h(N))$,$T(N)=\Theta(h(N))$。
- 如果$T(N)=O(p(N))$且$T(N) \neq \Theta(p(N))$,$T(N)=o(p(N))$。
通俗来说:
- $T(N)=O(f(N))$是说$T(N)$的增长率小于等于$f(N)$的增长率,即渐进上界。
- $T(N)=\Omega(g(N))$是说$T(N)$的增长率大于等于$g(N)$的增长率,即渐进下界。
- $T(N)=\Theta(h(N))$是说$T(N)$的增长率等于$h(N)$的增长率,即准确界。
- $T(N)=o(p(N))$是说$T(N)$的增长率小于$p(N)$的增长率,即绝对上界。
使用 大$O$ 表示的分析实例
常数函数:设 $T(n) = 9$。存在 $n_0 = 0, c = 9, T(n) \leq c \cdot 1$,即可得到 $T(n) = O(1)$。实际上大$O$是包含所有增长率超过规模函数的函数集合,如 $T(n) = O(n)$ 也成立,所以大$O$也称作渐进上界。
线性函数:设 $T(n) = 3n + 2$。存在 $n \geq 2 = n_0, c = 4, T(n) \leq c \cdot n$,即可得到 $T(n) = O(n)$
平方函数:设 $T(n) = 10n^2 + 4n + 2$。存在$n \geq 5 = n_0, c = 11, T(n) \leq c \cdot n^2$,即可得到 $T(n) = O(n^2)$
$n \geq 2, 10n^2 + 4n + 2 \leq 10n^2 + 5n$
$n \geq 5, 10n^2+5n \leq 11n^2$
使用大$O$表示法,对于多项式,只保留最高次幂的项
指数函数:设 $T(n) = 6 \times 2^n + n^2$。存在 $n \geq 4 = n_0, c = 7, T(n) \leq c \cdot 2^n$,即可得到 $f(n) = O(2^n)$
加法规则:设 $T_1(m) = O(f(m)), T_2(n) = O(g(n))$,则2段程序连着使用时,$T_1(m) + T_2(n) = O(max\{f(m),g(n)\})$
乘法规则:设 $T_1(m) = O(f(m)), T_2(n) = O(g(n))$,则2段程序嵌套使用时,$T_1(T_2(n)) + = O(f(m) \times g(n))$
使用 $\Omega$ 表示的分析实例
- 设 $T(n) = 10 n^2 + 4 n + 2$。存在 $n \geq 1, c = 10, T(n) \geq c n^2$,即可得到 $T(n) = \Omega(n^2)$。同大$O$一样,$\Omega$ 包含了所有增长率低于规模函数的函数,所以 $\Omega$ 也称作渐进下界或者最小运行时。
使用 $\Theta$ 表示的分析实例
- 对于 $T(n) = 10n^2 + 4n + 2$,$T(n) = O(n^2) = \Omega(n^2)$,可得 $T(n) = \Theta(n^2)$。$\Theta$ 也称作准确界。
使用 小$o$ 表示的分析实例
- 设 $T(n) = 10n^2 + 4n + 2$,$T(n) = O(n^3) \neq \Theta(n^3)$,可得 $T(n) = o(n^3)$。
使用极限计算的分析
我们能够通过计算极限 $\lim\limits_{n \to \infty} {\dfrac {T(n)} {f(n)}}$ 来确定2个函数的相对增长率,必要的时候可以使用洛必达法则。
- $极限 = 0$:$T(N)=o(f(N))$
- $极限 = c$:$T(N)=\Theta(f(N))$
- $极限 = \infty$:$f(N)=o(T(N))$
- $极限摆动$:二者无关
常见的渐进复杂度
参考
- 《数据结构与算法分析——C语言描述》(原书第2版).机械工业出版社.维斯著;冯舜玺译.2004
- 《数据结构(C)语言版》 .清华大学出版社.严蔚敏、吴伟民编著.2007
- 《数据结构(用面向对象方法与C++语言描述)》(第2版).清华大学出版社.殷人昆主编.2007