算法导论复习-第三章-函数的增长
- 渐近符号
渐近符号常常用于一个算法的时间复杂度度空间复杂度。下面主要介绍五个渐近符号。
首先先简单用自然语言对其进行描述。
- Θ “同阶” 前者和后者的增长速度一样快 (相当于 = )
- Ο 前者不比后者大 (相当于 ≤ )
- Ω 前者不比后者小 (相当于 ≥ )
- ο 比后者小 (相当于 < )
- ω 比后者大 (相当于 > )
下面给出严格的定义。
定义1.1 若存在两个正的常数 c 和 n0 ,对于任意 n ≥ n0, 都有 T(n) ≤ cf(n),则称 T(n) = Ο(f(n)).
定义1.2 若存在两个正的常数 c 和 n0 ,对于任意 n ≥ n0, 都有 T(n) ≥ cf(n),则称 T(n) = Ω(f(n)).
定义1.3 若存在三个正的常数 c1,c2 和 n0 ,对于任意 n ≥ n0, 都有 c1f(n) ≥ T(n) ≥ c2f(n),则称T(n) = Θ(f(n)).
① 大Ο符号用于描述增长的上限。当输入规模为n时,算法消耗时间的最大值,这个上限的阶越低结果越有价值。
值得注意的是:定义1.1给了很大的自由度来选择常数 c 和 n0 的特定值,例如,下列的推导都是合理的:
100n + 5 ≤ 100n + n (当n ≥ 5) = 101n = Ο(n) (c=101,n0 =5)
100n + 5 ≤ 100n + 5n (当n ≥ 1) = 105n = Ο(n) (c=105,n0 =1)
② 大Ω符号用于描述增长的下限。当输入规模为n时,算法消耗时间的最小值,这个下限的阶越高结果越有价值。
大Ω符号常用来分析某个问题或某类算法的时间下限。例如,矩阵乘法问题的时间下限为Ω(n2),基于比较排序的算法的时间下限为Ω(nlgn).
大Ω符号常常与大Ο符号配合以证明某一问题的一个特定算法是该问题的最优算法,或是该问题中某算法类中的最优算法。
③ Θ符号意味着T(n) 与 f(n) 同阶。用来表示算法的精确阶。
定理1.1 对任意两个函数 f(n) 和 g(n),我们有 f(n) = Θ(g(n)) 当且仅当 f(n) = Ο(g(n)) 且 f(n) = Ω(g(n)) 。
[但通常来说,都是用它从渐近上界和下界来证明渐近确阶,即:Ο(g(n)) ∧ Ω(g(n)) → Θ(g(n))]
定理1.2 若 T(n) = amnm + am-1nm-1 + + a1n + a0 ( am > 0 ),则有 T(n) = Ο(nm),且 T(n) = Ω(nm),因此有T(n) = Θ(nm)。
最后附上手写版笔记: