算法分析(续)
本课主题
- 算法的时间效率(time efficiency)
- 非递归算法
- 递归算法
一些常见函数的渐近界(asymptotic bounds)
- 多项式(polynomials):如果,则是。
- 对数(logarithms):对任意常数,。
- 对数(logarithms):对每个,。
- 指数(exponentials):对每个和每个,。
有用的求和公式和规则
- ,对任意
非递归算法分析计划
- 决定表示输入大小的参数
- 识别算法的基本操作(basic operation)
- 检查基本操作执行的次数。确定大小为的输入的最坏/平均/最佳情况
- 设置一个表示基本操作执行次数的求和式
- 使用标准公式和规则简化求和式
递归(recurrence relation)
- 递归是一个定义为自身的方程,也称为递推或递推方程
- 提供了分析递归结构的方法
- 每次函数调用自身时,返回地址都会被推入堆栈
- 对于每个返回,返回地址从堆栈弹出到控制返回的位置
递归算法分析计划
- 决定表示输入大小的参数
- 识别算法的基本操作
- 确定大小为的输入的最坏/平均/最佳情况
- 设置一个带有适当初始条件的递归关系,表示基本操作执行的次数
- 通过反向替换或其他方法求解递归(或至少确定其解的增长阶)
解决递归的有用资源
斐波那契数(Fibonacci numbers)
斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, ...,由以下斐波那契递归定义:
- ,对
解决递归:# 课程4:分析算法(续)
本课主题
- 算法的时间效率(time efficiency)
- 非递归算法
- 递归算法
一些常见函数的渐近界(asymptotic bounds)
- 多项式(polynomials):如果,则是。
- 对数(logarithms):对任意常数,。
- 对数(logarithms):对每个,。
- 指数(exponentials):对每个和每个,。
有用的求和公式和规则
- ,对任意
非递归算法分析计划
- 决定表示输入大小的参数
- 识别算法的基本操作(basic operation)
- 检查基本操作执行的次数。确定大小为的输入的最坏/平均/最佳情况
- 设置一个表示基本操作执行次数的求和式
- 使用标准公式和规则简化求和式
递归(recurrence relation)
- 递归是一个定义为自身的方程,也称为递推或递推方程
- 提供了分析递归结构的方法
- 每次函数调用自身时,返回地址都会被推入堆栈
- 对于每个返回,返回地址从堆栈弹出到控制返回的位置
递归算法分析计划
- 决定表示输入大小的参数
- 识别算法的基本操作
- 确定大小为的输入的最坏/平均/最佳情况
- 设置一个带有适当初始条件的递归关系,表示基本操作执行的次数
- 通过反向替换(Backward Substitution)或其他方法求解递归(或至少确定其解的增长阶)
关于反向替换的有用资源
斐波那契数(Fibonacci numbers)
斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, ...,由以下斐波那契递归定义:
- ,对
解决递归:
- 使用定理 - 具有常系数的一般二阶线性齐次递推(general second order linear homogeneous recurrence with constant coefficients):
总结
- 时间效率(time efficiency) - 表示算法运行速度
- 其输入大小的函数
- 基本操作执行的次数
- 最坏情况,平均情况,最佳情况
- 渐近增长阶(asymptotic order of growth)
- , , 记号
- 效率类(efficiency classes)
- 常数,对数,线性,线性对数(linearithmic),二次,三次,指数
- 非递归/递归算法分析
- 使用定理 - 具有常系数的一般二阶线性齐次递推(general second order linear homogeneous recurrence with constant coefficients):