课程
3240 字
约 10 分钟
大二下
算法设计与分析重点总结
算法设计与分析notes·更新于 2026-09-15
算法设计与分析重点总结
Note
本文档根据授课顺序整理,汇总了课堂上反复强调的核心知识点。内容仅供参考,欢迎同学们共同完善与分享。
“考试复习重点看 PPT” —— 教师寄语。若 PPT 中未包含以下知识,请查阅教材。
考试题型分布
| 题型 | 分值 | 总分 |
|---|---|---|
| 选择题 | ||
| 填空题 | ||
| 简答题 | ||
| 程序分析填空题 | ||
| 综合题(代码) |
一、 基础知识
- 算法的定义:指解决问题的一种方法或一个过程。
- 算法的特征:
- 输入:有零个或多个外部输入。
- 输出:至少产生一个输出。
- 确定性:算法的每一步指令都必须是清晰、无歧义的。
- 有限性:算法必须在有穷步内结束,不能陷入无限循环。
- 算法复杂度分析:
- 时间复杂度:评估算法执行时间随问题规模增长的趋势。
- 空间复杂度:评估算法执行过程中所消耗的额外存储空间。
- 循环次数:重点掌握
归并排序、快速排序和贪心算法的复杂度及循环次数。
二、 递归与分治策略
- 递归算法:
- 重点掌握递归的思想,能够根据算法写出对应的递归表达式(递推方程)。
- 熟练掌握简单的递归算法实现,吃透 PPT 中的典型例子。
- 合并排序 (Merge Sort):
- 掌握合并(归并)排序的执行过程。
- 时间复杂度为 ,空间复杂度为 。
- 快速排序 (Quick Sort):
- 掌握划分与递归排序的过程。
- 最坏时间复杂度为 ,平均时间复杂度为 ,空间复杂度为 (递归调用栈空间)。
三、 贪心策略
- 贪心算法的两个基本要素:
- 贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择(贪心选择)来达到。
- 最优子结构性质:一个问题的最优解包含其子问题的最优解。
- 背包问题 (Fractional Knapsack):
- 区别于 0-1 背包问题,物品可以部分装入。
- 程序代码:必须能熟练手写背包问题的贪心算法程序。
- 最优装载问题:
- 理解采用什么算法解决(利用贪心算法,按重量从小到大装载)。
- 典型贪心问题(重点掌握算法思想,代码了解即可):
- 哈夫曼编码 (Huffman Coding)
- 最小生成树 (Minimum Spanning Tree) —— Prim 算法与 Kruskal 算法。
- 单源最短路径 (Single Source Shortest Path) —— Dijkstra 算法。
- 旅行商问题 (TSP) —— 重点掌握填表分析过程。
- 活动安排问题 (Activity Selection) —— 重点掌握填表分析过程。
四、 动态规划
- 动态规划的基本要素:
- 最优子结构性质:一个问题的最优解包含其子问题的最优解。
- 子问题重叠性质:在用递归算法自顶向下求解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。
- 0-1 背包问题:
- 可以使用多种算法求解,需理清各算法的区别:
动态规划:无需排序,以自底向上的方式填表求解。回溯法与分支限界法:需要对物品按单位重量价值进行降序排序。
- 重点掌握动态规划求解 0-1 背包问题的填表法(PPT 第 59 页的表格必须会填)。
- 可以使用多种算法求解,需理清各算法的区别:
- 最长公共子序列 (LCS):
-
递推公式(PPT 第 30 页):
-
程序代码:必须掌握其动态规划实现代码。
-
- 流水作业调度:
- 了解 Johnson 算法的基本思想与调度原则。
五、 回溯法
- 回溯法与分支限界法对比:
- 回溯法是一种带有系统性与跳跃性的深度优先搜索(DFS)算法。
- 剪枝函数 (Pruning Functions):
- 约束函数 (Constraint Function):在左子树剪去不满足约束条件的子树(如 N 皇后中判断放置位置是否冲突)。
- 限界函数 (Bound Function):在右子树剪去不可能产生比当前最优解更好的解的子树(如 0-1 背包中判断当前价值 + 剩余物品的最大价值估算是否小于当前已找到的最优价值
bestp)。
- 装载问题:
- 熟练掌握装载问题的回溯法代码。
- 图的 m着色问题:
- 掌握如何画出解空间树,并进行约束剪枝。
- n 后问题 (N-Queens):
- 掌握回溯法放置皇后的过程与冲突判定。
- 0-1 背包问题:
- 能够手绘回溯法求解 0-1 背包问题的解空间树(子集树)。
六、 分支限界法
- 回溯法与分支限界法多维度对比 (PPT 25-26 页):
| 对比维度 | 回溯法 | 分支限界法 |
|---|---|---|
| 求解目标 | 找出解空间中满足约束条件的所有解 | 找出满足约束条件的一个解,或在满足约束条件的解中找出最优解 |
| 搜索方式 | 深度优先搜索 (DFS) | 广度优先 (BFS) 或 最小耗费/最大效益优先 |
| 扩展方式 | 扩展结点一次只生成一个子结点,向深度方向推进 | 扩展结点一次生成所有的孩子结点(分支) |
| 存储空间 | 较小,为 级别的递归调用栈空间 | 较大,需要维护一个存放所有活结点的表(队列或堆) |
- 队列式 (FIFO) 分支限界法:
- 按照队列先进先出原则选取下一个结点作为当前扩展结点。
- 优先队列式分支限界法:
- 按照优先队列中规定的优先级(如最大效益、最小费用)选取优先级最高的结点作为当前扩展结点。
- 典型问题(重点掌握思想与分支限界搜索过程):
- 单源最短路径问题
- 装载问题
- 0-1 背包问题













