本次笔记内容:
1.2.1 算法的定义
1.2.2 什么是好的算法
1.2.3 复杂度的渐进表示
算法
算法是一个有限的指令集,一定在有限步骤之后终止,产生输出。
- 每一条指令必须有充分明确的目标,不可以有歧义;
- 计算机能处理的范围之内;
- 描述应不依赖于任何一种计算机语言以及具体的实现手段。
例:选择排序算法的伪码描述
算法的优劣
- 空间复杂度S(n),占用存储单元的长度
- 时间复杂度T(n),耗费时间的长度
例:打印N个整数递归
在调用PrintN(99999)前,PrintN(100000)由于还没有返回,其变量N=100000被存在内存中。以此类推。其空间复杂度与N呈线性关系。
例:求多项式的值
什么是好的算法?
在分析一般算法的效率时,经常只关注下面两种复杂度:
- 最坏情况复杂度 T w o r s t ( n ) T_{worst}(n) Tworst(n)
- 平均复杂度 T a v g ( n ) T_{avg}(n) Tavg(n)
- 通畅分析最坏情况复杂度
复杂度的渐进表示法
- T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) T(n)=O(f(n))表示存在常数 C > 0 C>0 C>0, n 0 > 0 n_0>0 n0>0使得当 n ≥ n 0 n \ge n_0 n≥n0时有 T ( n ) ≤ C ⋅ f ( n ) T(n) \le C \cdot f(n) T(n)≤C⋅f(n)
- T ( n ) = Ω ( f ( n ) ) T(n)=\Omega (f(n)) T(n)=Ω(f(n))表示存在常数 C > 0 C>0 C>0, n 0 > 0 n_0>0 n0>0使得当 n ≥ n 0 n \ge n_0 n≥n0时有 T ( n ) ≥ C ⋅ f ( n ) T(n) \ge C \cdot f(n) T(n)≥C⋅f(n)
- T ( n ) = Θ ( f ( n ) ) T(n)=\Theta (f(n)) T(n)=Θ(f(n))表示存在常数 C > 0 C>0 C>0, n 0 > 0 n_0>0 n0>0使得当 n = n 0 n = n_0 n=n0时有 T ( n ) = C ⋅ f ( n ) T(n) = C \cdot f(n) T(n)=C⋅f(n)