算法设计与分析课程整体总结
序列求和
• 基本求和公式
等比数列
等差数列
调和数级数
• 估计和式的阶
放大,然后估计上界
用积分估计上下界
递推方程求解
• 主要的求解方法
迭代 + 进行序列求和
递归树 + 求和
主定理:注意条件验证
• 一些常见的递推方程的解
算法设计技术
• 设计技术
分治策略
动态规划
贪心法
回溯和分支限界
• 关注问题
使用条件
主要设计步骤
时间复杂度分析方法
改进途径
典型例子
分治策略
• 适用条件:归约为独立求解子问题
• 设计步骤:归约方法, 初始子问题的计算, 子问题解的综合方法. 注意子问题划分均衡,类型相同
• 递归算法分析:求解递推方程
• 改进途径:减少子问题数, 预处理
• 典型问题: 二分检索,归并排序,芯片测试,幂乘,矩阵乘法,最临近点对,多项式求值
动态规划
• 适用条件:优化问题, 多步判断求解, 满足优化原则,子问题重叠
• 设计步骤:确定子问题边界, 列关于目标函数的递推方程及初值;自底向上,备忘录存储;标记函数及解的追踪方法
• 复杂度分析:备忘录, 递推方程
• 典型问题: 矩阵链相乘,投资,背包,最长公共子序列,图像压缩,最大子段和,最优二分检索树,生物信息学应用
贪心法
• 适用条件:组合优化问题, 多步判断求解, 有贪心选择性质
• 设计步骤:局部优化策略的确定及算法正确性证明 (直接证明, 数学归纳法,交换论证)
• 复杂度分析
• 典型问题: 活动选择,装载问题, 最小延迟调度, 最优前缀码,最小生成树,单源最短路
回溯和分支限界
• 适用条件:搜索或优化问题, 多步判断求解, 满足多米诺性质
• 设计步骤:确定解向量, 搜索树结构,搜索顺序,结点分支搜索的约束条件与代价函数, 路径存储
• 搜索树结点数估计
• 复杂度分析
• 典型问题: n后问题, 背包问题,货郎问题,装载问题, 最大团问题, 圆排列问题, 连续邮资问题
算法设计
• 设计思想:尽量选复杂度低的算法
• 算法实现依赖于数据结构,选择合适的数据结构
• 实际问题中的综合考虑:时空权衡,实现成本的权衡, …