算法渐近复杂度与算法选择
1. 引言
算法复杂度分析的核心目标是将算法归类到明确定义的复杂度类别中。对于大多数实际应用而言,这些类别通常是多项式的,即复杂度(时间或空间)由输入规模的多项式 ( p(n) ) 界定:
( p(n) = a_sn^s + a_{s - 1}n^{s - 1} + \cdots + a_2n^2 + a_1n + a_0 ),其中 ( s ) 为正整数。
该多项式等价于 ( n^s ),所以 ( p(n) = O(n^s) ) 且 ( p(n) \neq O(n^{s - 1}) )。在比较复杂度时,通常仅考虑最高阶项,忽略该项的常数系数以及所有低阶项。
我们主要关注八个复杂度类别,由它们的最高阶项 ( \phi_i ) 定义(( i = 1, \cdots, 8 )),具体如下:
| 序号 ( i ) | 复杂度类别 ( \phi_i(n) ) |
| ---- | ---- |
| 1 | ( \phi_1(n) = 1 ) |
| 2 | ( \phi_2(n) = \log_2(n) ) |
| 3 | ( \phi_3(n) = \sqrt{n} ) |
| 4 | ( \phi_4(n) = n ) |
| 5 | ( \phi_5(n) = n\log_2(n) ) |
| 6 | ( \phi_6(n) = n^2 ) |
| 7 | ( \phi_7(n) = n^3 ) |
| 8 | ( \phi_8(n) = 2^n ) |
仅考虑最高阶项在处理非常大的 ( n ) 值时是合理的,因为此时低阶项的影响会越来越小
算法选择中的复杂度与常数
超级会员免费看
订阅专栏 解锁全文
29

被折叠的 条评论
为什么被折叠?



