算法导论3E
算法复习
往年试题:
CLRS1
CLRS2
考试题型:
- 20分 基本概念 判断题<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,选择题<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,填空
- 50-60分 简答<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,算法分析
- <span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(递归时间分析<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,平摊时间分析<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,基本分析<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
- 求最大流
- 二项堆<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,根表情况
- 20-30分 算法设计题 1-2个算法题
考试重点
渐进记号
分治方法<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,基本步骤<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,适用条件<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(场合<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
递归式<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,代换法<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,递归树方法<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,主方法<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>。
快速排序算法<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,归并排序算法的时间复杂度
递归函数时间分析以及相应要求<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(最坏<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>、最好<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>、平均不考<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
循环不变式<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,(不考<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
快速排序<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(要清楚工作原理<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,时间复杂度<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
红黑树<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,性质<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,与二叉查找树有何不同
插入和删除的过程和时间复杂度<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,不会考具体插入操作和删除操作<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>。
红黑树有10个节点<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,画出包含最多<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(最少<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)红节点的红黑树<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>。等等
数据结构扩张方法的基本步骤
动态序<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,区间树<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,要了解是什么<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,算法时间复杂度<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,解决问题
动态规划<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,贪心算法<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,
动态规划的基本步骤<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,要素
贪心算法的要素<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,适用条件
算法例子要清楚<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>:
最长公共子序列
活动选择问题
贪心法的理论基础<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(不作要求<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,只要掌握概念<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
什么是最大独立子集<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>、最优子集<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>、独立子集
平摊分析<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(是本课程的主要内容<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,要掌握<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
平摊分析<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,合计法<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(了解<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)<h-char class=“bd bd-beg“>,记账法<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(了解<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,势函数方法<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(掌握<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
定义势函数<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,
验证势函数的正确性
进行平摊分析
二项堆<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>、斐波那契堆<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(结构<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>、条件<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>、根表<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>、操作时间<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
概念要清楚
三个堆的各个操作的时间复杂度<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(掌握<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
各个堆的结构<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,要满足的条件
根表的形式
给一个根表<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,在根表上完成一次抽取最小值操作<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,画出完成操作前后的根表
流网络
ford-fulkerson方法<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(掌握<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
用ford-fulkerson方法求最大流
push-relable方法<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(不做要求<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>)
递归/分治策略/求解递归式
渐进记号






求解递归式

代入法


(取底求上界)
假设形式必须与求解形式保持严格一致!

x

v (取顶求上界/取底求下界)
- 习题课例题

取顶求上界

取底求下界
递归树法



主方法








证明: 数学归纳法
归并排序









- 习题课例题


快速排序











二叉树/红黑树/区间树






删除节点




红黑树






数据结构扩张




- 找第i个最小值
OS-select(x,i) O(lgn)
- 求x序值
OS-rank(T,x) O(lgn)
- 插入和删除size域 O(lgn)
- 插入或删除操作的时间为O(lgn)

- 习题课例题


区间树





动态规划/贪心算法
动态规划


- 带备忘的自顶向下

- 自底向上

动态规划的要素:
最优子结构

重合子问题

装配线问题

- 描述问题的最优解结构特征

cut and paste



自底向上计算最快时间
FASTEST-WAY(a, t, e, x, n)


构造最优解结构(输出最优路线)

矩阵链乘法


cut and paste


递归求解


具体解法:
(2条消息) 动态规划之——矩阵连乘<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“>(全网最详细博文<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>,看这一篇就够了<span class=<h-char class=“bd bd-beg“>“bd-box<h-char class=“bd bd-beg“>“><h-char class=“bd bd-beg“>!<h-char class=“bd bd-beg“>)_刘扬俊的博客-CSDN博客_矩阵连乘
公共最长子序列LCS

找出LCS问题最优子结构性质

递归定义LCS值

自底向上计算LCS值

<A, B, C, B, D, A, B> <B, D, C, A, B, A>


贪心算法



活动选择问题
动态规划方法


贪心方法
贪心选择性质:






背包问题

Huffman编码



胚理论

平摊分析(势函数法)




栈操作

二进制计数器

动态表








二项堆/FIB堆

二项树




二项堆













FIB堆





最大流/最小切











