第五章分治法
分治法——将一个难以直接求解的复杂问题分解成若干个规模较小、相互独立但类型相同的子问题,然后求解这些子问题;如果这些子问题还比较复杂而不能直接求解,还可以继续细分,直到子问题足够小,能够直接求解为止;最后将子问题的解组合成原始问题的解。
这种问题求解策略称为分治法。
分治法很自然的导致一个递归算法。
平衡子问题思想
递归算法的时间复杂度分析:
递推式T(n)=aT(n/b)+cnk,T
(1)=c求解。
——改进思路
求最大最小元
二分搜索(对半搜索)
——对半搜索二叉判定树的4个性质,2个定理。
二叉判定树的性质→对半搜索的时间复杂度
成功搜索:
平均、最坏O(logn)
失败搜索:
平均、最好、最坏都是Θ(logn)
(通过关键字值间的比较,搜索指定关键字值元素)这类搜索算法最坏情况下的时间下界为O(logn),因此对半搜索是最优算法。
——课后习题5-8
最优算法
两路合并排序——时间复杂度
快速排序
——排序过程(每一趟分划后的排列和子问题划分)
——时间复杂度分析(最好、最坏、平均)
——课后习题5-11
斯特拉森矩阵乘法——时间复杂度的改进;
棋盘覆盖问题
——算法设计思想
——时间复杂度分析
——最优算法
第六章贪心法
贪心法算法思想
——分步决策求解最优化问题
——局部最优选择(最优量度标准)
——得到整体最优解
贪心法的基本要素:
⏹最优子结构性质
⏹贪心选择性质
一般背包问题;
——课后习题6-1
最佳合并模式;
——带权外路径长度(WPL)最小
——课后习题6-8
最小代价生成树
——Prim和Kruskal算法
——共同的理论基础:
MST性质
——不同点和应用场合
——课后习题6-9
第七章动态规划法
(求解最优化问题)动态规划法的基本要素:
⏹最优子结构性质
⏹重叠子问题性质
动态规划法求解步骤:
⏹1)刻画最优解的结构特性
⏹2)递归定义最优解值
⏹3)以自底向上方式计算最优解值
⏹4)根据计算得到的信息构造一个最优解
备忘录方法(动态规划法的变形)——两者的异同和适用场合
多段图问题
——从后向前/从前向后递推式
——结点的cost和d值求解过程
——最短路径长度,并根据d值构造最短路径
注意:
d[j]的含义和最短路径的构造。
——课后习题7-1,7-2
关键路径问题
——earliest、latest的递推式和求解过程
——寻找关键活动,构造关键路径
——程序实现
——补充题
注意:
应由关键活动(而不是事件i)来确定关键路径。
弗洛伊德算法
——dk数组和pathk数组更新的递推式
——每次迭代后的d数组和path数组元素值
——程序实现和时间复杂度
最长公共子序列问题
——c和s数组元素的求解递推式
——c和s数组元素求值,得最优解值
——回溯构造最优解
——程序实现
——课后习题7-9
0/1背包问题及其启发式方法求解
注意:
被支配的阶跃点和所有X>M的阶跃点均应该去除。
——课后习题7-15、补充题
第八章回溯法
状态空间树——描述问题解空间的树形结构
⏹问题状态(树中每个结点)
⏹解状态(候选解元组)
⏹答案状态(可行解元组)
⏹最优答案结点(目标函数取最优值的答案结点)
剪枝函数(约束函数、限界函数)
⏹约束函数——剪去不含答案状态(可行解)的子树
⏹限界函数——剪去不含最优答案结点的子树
约束函数(显式约束、隐式约束)
⏹显示约束——规定了所有可能的元组,组成问题的候选解集(解空间)
排列树——用于确定n个元素的排列满足某些性质的状态空间树,一般有n!
个叶结点(解状态)。
子集树——从n个元素的集合中找出满足某些性质的子集的状态空间树,一般有2n个解状态。
⏹隐式约束——给出了判定一个候选解是否为可行解的条件。
回溯法深度优先搜索问题的状态空间树,用剪枝函数(往往是约束函数)进行剪枝,通常求问题的一个或全部可行解
蒙特卡罗(MonteCarlo)算法——估计回溯法处理一个实例时,状态空间树上实际生成的结点数的方法:
m=1+m0+m0m1+m0m1m2+...
n-皇后问题
——显式约束、隐式约束条件,相应的状态空间树
——MonteCarlo算法估计实际生成的状态空间树结点数
——补充题(蒙特卡罗方法)
子集和数问题(画出状态空间树)
——可变长度解、固定长度解状态空间树的描述不同(P183-184)
——课后习题8-2
图的m-着色问题;
哈密顿环;——课后习题8-10
第九章分枝限界法
分枝限界法广度优先搜索问题的状态空间树,用剪枝函数(往往是限界函数)进行剪枝,通常求问题的最优解
根据活结点表采用的数据结构不同,分枝限界法分类:
⏹FIFO分枝限界法
⏹LIFO分枝限界法
⏹LC分枝限界法
十五谜问题(定理9-1:
判定初始状态是否可以到达目标状态)
——FIFO、LIFO、LC分枝限界法
——LC分枝限界法中搜索代价=f(x)+
——补充题
上、下界函数——与最优化问题的目标函数有关
⏹是代价函数c(X)的下界函数
⏹是代价函数c(X)的上界函数
如何用上、下界函数进行剪枝:
①(若目标函数取最小值时为最优解)
⏹则用上界变量U记录迄今为止已知的最小代价上界(即迄今为止已知的可行解中目标函数最小值),可以确定最小代价答案结点(最优解)的代价值不会超过U。
⏹对任意结点,若≥U,则X子树可以剪枝。
⏹为了不至误剪去包含最小代价答案结点的子树,若X代表部分向量,则U=min{u(X)+ε,U};若X是答案结点,则U=min{cost(X),U}。
②(若目标函数取最大值时为最优解)
⏹则用下界变量L记录迄今为止已知的最大代价下界(即迄今为止已知的可行解中目标函数最大值),最大代价答案结点(最优解)的代价值不会小于L。
⏹对任意结点,若≤L,则X子树可以剪枝。
⏹为了不至误剪去包含最大代价答案结点的子树,若X代表部分向量,则L=max{,L};若X是答案结点,则L=max{cost(X),L}。
带时限的作业排序
——作业按时限排序
——画出JSFIFOBB算法实际生成的状态空间树
——状态空间树中结点的损失下界和损失上界u,(更新的)上界变量值U
——求最优解值(最大作业收益)和最优解(入选的作业编号)
——课后习题9-2
第十章NP完全问题
不确定算法及其时间复杂度
最优化问题与判定问题间的转换关系
理解P类问题、NP类问题、NP难度问题、NP完全问题的概念
什么是多项式约化?
——课后习题10-6、10-7
了解Cook定理的内容(StevenCook,1971年,证明了可满足性问题是NP完全的)
NP难度(NP完全)问题的证明步骤(例:
最大集团问题)
——课后习题10-8
第十三章密码算法(5%)
信息安全的目标
⏹机密性——加密
⏹完整性——消息摘要
⏹抗否认性——数字签名
⏹可用性
现代密码学的两个分支(密码编码学、密码分析学)
两种密码体制(对称密码体制、非对称密码体制)的加/解密原理及优缺点
RSA算法的理论基础(数论)、加/解密原理、安全性基础(大整数分解的难度)、具体用法(用于加密、用于数字签名)和安全威胁