算法特性
- 有穷性:在执行有穷步实现 并在有穷时间内完成
- 确定性:每一条指令都有确切含义
- 可行性:算法是可执行的
- 输入:一个算法有零个或多个输入
- 输出:一个算法有一个或多个输出
算法设计的要求
- 正确性:程序对于精心选择、典型的、苛刻且带有刁难性的几组数据能够输出满意结果
- 可读性:易于人的理解
- 健壮性(鲁棒性):输入非法数据时 算法恰当作出反应或进行相应处理
- 高效性:要求花费尽量少的时间
算法分析
通过算法效率来评判不同算法的优劣程度
算法效率的影响因素
- 时间效率:算法所耗费的时间
- 空间效率:所耗费的存储空间
算法时间效率的度量
度量方法
- 事后统计:将算法实现 测算其空间和时间开销
- 事前分析:对算法所消耗资源的一种估算(常用
事前分析方法
算法运行时间=一个简单操作所用的时间 * 简单操作次数
算法运行时间=每条语句频度 * 该语句执行一次所需时间
:一般将执行一次所需的时间计为单位时间 所以只看语句频度
- 为了便于比较时间效率 我们仅比较它的数量级
- 若有某个辅助函数f(n),使当n趋于无穷大时 T(n)/F(n)的极限值为不等于0的常数,则称为F(n)是T(n)的同数量级函数 计作T(n)=O(F(n)),称为O(F(n))为算法的渐进时间复杂度(O是数量级的符号)简称时间复杂度
算法时间复杂度
- 算法中基本语句重复执行的次数是问题规模n的都个函数 算法的时间量度计作:T(n)=O(f(n))
基本语句:算法中执行次数最多的 对算法运行时间贡献最大的
n越大 算法的执行时间越长
分析算法时间复杂度的方法
- 找出语句频度最大的语句作为基本语句
- 计算基本语句的频度得到问题规模n的某个函数F(n)
- 取其数量级用符号“O”表示
渐进空间复杂度
- 空间复杂度:算法所存储空间的度量 计作S(n)=O(f(n)) n为问题的规模(大小
1.算法占据的空间:算法本身占据的空间 输入/输出 指令 常数 变量
2.算法要使用的辅助空间