算法的定义
- 有穷性(finite):每条指令执行次数有穷性
- 确定性(define):每条指令的意思明确,无二义性
- 可行性(effictive):每条指令可执行,即人们用笔和纸做有限次运算也可完成
- 输入(input):0/1个输入
- 输出(output):1/n个输出,与输入量存在某种特定关系
算法复杂性分析
- 时间复杂度 T(n)
时间复杂度即算法中基本操作的执行次数的数量级
问题规模:输入的个数n
基本操作的执行次数是n的函数f(n)
注意:
渐进时间复杂度——问题规模n趋向于极限情况时的时间复杂度
T(n)=O(f(n)) :f(n)是T(n)的上界,即T(n)的阶不高于f(n)的阶。通俗来说,T(n)的增长速度不比f(n)快。
T(n)=Ω(f(n)) :f(n)是T(n)的下界,即T(n)的阶不低于于f(n)的阶。
T(n)=Θ(f(n)) :f(n)是T(n)的确界,即T(n)与f(n)的同阶。
- 最坏情况下的时间复杂度 W(n)
- 平均情况下的时间复杂度A(n)
算法设计
1.问题建模
2.选择什么算法?如何描述这个方法?
3.这个方法是否对所有实例都得到最优解?如何证明?
4.若不是,能否找到反例?
算法的设计目标
- 正确性:正确执行预先规定的功能要求
- 可读性:易于人理解
- 健壮性:较好的容错性,对不合理的数据进行检查
- 高效率低存储