-
重要特性
-
有穷性
- 执行有穷步后结束
- 每一步都可在有穷时间内完成
-
确定性
- 每一条指令必须有确切含义
-
可行性
- 算法中描述的操作都是可以通过已实现的基本运算有限次来实现
-
输入
- 零个或多个输入
-
输出
- 一个或多个输出
-
“好”的算法考虑的目标
-
正确性
- 能够正确解决问题
-
可读性
- 助于人们理解
-
健壮性
- 输入非法数据时,算法也能适当的作出反应或进行处理
-
效率与存储质量需求
- 执行时间
- 执行过程中所需的最大存储空间
-
效率度量
-
时间复杂度
- 频度:某语句在算法中被执行的次数
- T(n)=算法中所有语句频度之和
- 主要分析T(n)的数量级
- 记为T(n)=O(f(n))
-
最坏时间复杂度
- 最坏情况下,算法的时间复杂度
-
最好时间复杂度
- 最好情况下,算法的时间复杂度
-
平均时间复杂度
- 所有输入实例在等概率出现的情况下,算法的期望运行时间
-
分析时间复杂性的规则
-
加法规则
- T(n)=T1(n)+T2(n) =O(f(n))+O(g(n))=O(max(f(n),g(n)))
-
乘法规则
- T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))
-
常见的时间复杂度
- O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
-
空间复杂度
- 算法所耗费的存储空间
- 记为S(n)=O(g(n))
- 只分析除输入和程序之外的额外空间
-
原地工作
- 算法所需的辅助空间时常量,即S(n)=O(1)