420 likes | 619 Views
第 4-13 章习题课. 2007 年 12 月 6 目. 第 4 章 贪心算法. 贪心算法的基本思想 通过一系列小的步骤来建立一个解 , 在每一步根据局部情况选择一个决定使得某些主要的指标能得到优化 . 贪心算法的求解结果 近似解 ( 经常比较理想 ) 最优解 ( 给出严格证明 ). 第 4 章 贪心算法 ( 续 1). 证明贪心算法获得最优解的方法 算法领先 贪心算法的每一步都做得比任何其它算法好 . 区间调度和最短路径 ( 用归纳法来证明每一步都领先 ). 交换论证
E N D
第4-13章习题课 2007年12月6目
第4章 贪心算法 • 贪心算法的基本思想 • 通过一系列小的步骤来建立一个解,在每一步根据局部情况选择一个决定使得某些主要的指标能得到优化. • 贪心算法的求解结果 • 近似解(经常比较理想) • 最优解(给出严格证明) 2
第4章 贪心算法(续1) • 证明贪心算法获得最优解的方法 • 算法领先 • 贪心算法的每一步都做得比任何其它算法好. • 区间调度和最短路径(用归纳法来证明每一步都领先). • 交换论证 • 考虑对这个问题的任何一个最优解,逐渐把它转换成由贪心算法找到的解且不损害它的质量. • 最小延迟调度和最小生成树 • 其它方法 • 区间划分(调度所有的区间):直接证明不会有区间在结束时没有标签以及没有两个重叠的区间被分给相同的标签. 3
t 1 2/3 s a 2/3 第四章 习题 • 习题1: • Yes(应用MST性质) • 习题2: • (a) 真(应用MST性质) • (b) 假 4
k K+1 A O k K+1 第四章 习题(续1) • 习题3:Yes(算法领先证明,归纳法证明) • 证明:设贪心算法用的卡车集合A={A1,A2,…}, 最优算法用的卡车集合O={O1,O2,…},箱子集合B={B1,B2,…}. • Step1:显然A1中最后一个箱子的编号不小于O1中最后一个箱子的编号. • Step2:假设Ak中最后一个箱子的编号不小于Ok中最后一个箱子的编号,则Ak+1中最后一个箱子的编号也不会小于Ok+1中最后一个箱子的编号(反证法). • Step3:归纳证明结束. • Step4:证明|O|=|A|(反证法). 5
S 1 i n k1,…km S’ 1 j m 第四章 习题(续2) • 习题4: • 算法: i=j=1; while (i<=n and j<=m) if(si==s’j){i=i+1; j=j+1; kj=i; } else i=i+1; if(j==m+1) return K1,k2,…km; else return “NO” • 时间复杂度:O(m+n) 6
lj lj-1 S 1 kj n kj-1 第四章 习题(续3) • 证明(算法领先证明,归纳法证明) • 设存在一个S的子序列Sl1,Sl2,…Slm等于S’,则算法一定能够找到子序列Sk1,Sk2,..Skm且kj<=lj (1<=j<=m). • Step1:j=1时显然成立. • Step2:设下标为j-1时成立,即kj-1<=lj-1 成立,则下标为j时也成立(反证法). • Step3:归纳证明结束. 7
第5章 分治策略 • 分治策略的基本思想 • Divide • Conquer • combine • 分解易合并易:二分查找,整数乘法 • 分解易合并难:归并排序,计算逆序,最邻近点对 • 分解难合并易:快速排序 8
第5章 分治策略(续1) • 分治策略的适用范围 • 分治策略只能把多项式阶降为更低的多项式阶,而不能把指数阶降为多项式阶.动态规划可以将某些问题的指数阶降为多项式阶. • 分治策略复杂度的计算公式 • T(n)=kT(n/m)+f(n) • T(n)=T(a)+T(b)+f(n), a+b<=n 9
A B × × n/2 n n 1 1 1 n/2 第5章 习题 • 习题1: 分析:取数据库A中的中位数和数据库B中的中位数,然后比较两个中位数的大小。不妨假设B中的中位数大于A中的中位数,则A中比其中位数小的数据(1.. n/2-)以及B中比其中位数大的数据(n/2++ 1 .. n)都不可能是两个数据库中的中位数。因此可以想象成将数据库A和数据库B的大小各自减少n/2-. 10
i j N=0 B n 1 k k+1 B(i)<2B(j): j=j-1; if(j==k) return N; B(i)>2B(j): N=N+(j-K); i=i-1; if(i==0) return N; 第5章 习题(续1) • 习题2 分析:求重要的逆序个数与教材中求逆序个数相似,其核心思想都是利用归并排序.只是本题中合并算法与重要逆序计数算法分开考虑且重要逆序计数算法与教材的算法略有不同. 11
第6章 动态规划 • 动态规划的基本思想 An algorithm that employs this technique is not recursive by itself, but the underlying solution of the problem is usually stated in the form of a recursive function. Unlinke the case in divide-and-conquer algorithms, immediate implementation of the recurrence results in identical recursive calls that are executed more than once. For this reason, this technique resorts to evaluating the recurrence in a bottom-up manner, saving intermediate results that are used later to compute the desired solution. 12
5 4 3 3 2 2 1 2 1 1 0 1 0 1 0 F(n)=F(n-1)+F(n-2) F(0)=F(1)=0 第6章 动态规划(续1) • 动态规划求解问题的基本性质 • 只存在多项式个子问题 • 可以容易地从子问题的解计算初始问题的解 • 在子问题从最小到最大存在一个自然的顺序,与一个容易计算的递推式相联系,这个递推式允许人们从某些更小的子问题的解来确定一个子问题的解. 13
第6章 动态规划(续2) • 动态规划实现 • 备忘录方法 • 子问题迭代 • 一维数组:区间调度,分段最小二乘 • 二维数组:背包问题,序列比对,最短路径问题 • 最优值与最优解 • 动态规划只能找到最优值,如果求解问题的最优解还需要增加一些辅助的工作量. 14
第6章习题 • 习题1 • (a) 3-5-4 • (b) 3-2-2-4 • (c) OPT(i)=max( OPT(i-1), w(i)+OPT(i-2) ) OPT(0)=0, OPT(1)=w(1) 15
第6章习题(续1) • 习题2 • (a) low(1)=3, low(2)=4; high(1)=5, high(2)=8 • (b) OPT(i)=max( h(i)+OPT(i-2), l(i)+OPT(i-1) ) OPT(1)=max( h(i), l(i) ) OPT(0)=0 16
v1 v2 v3 v4 v5 第6章习题(续2) • 习题3 • (a) • (b) OPT(i)=max{OPT(j)+1|(j,i)∈E} if顶点i的入度为0,则OPT(i)=0 17
第7章 网络流 • 流网络 • 具有下列特征的有向图 • 每条边关联一个容量,它是一个非负的数ce(设为整数) • 存在单一的源点s(入度为0的顶点) • 存在单一的汇点t(出度为0的顶点) 18
第7章 网络流(续1) • 流 • 流的定义 • s-t流是一个函数f,它把每条边e映射到一个非负实数,值f(e)直观上表示由边e携带的流量. • 流的性质 • 容量条件:每条边的流值大于等于0且小于等于该边的容量. • 守恒条件:进入某个顶点的所有边上的流值之和等于离开这个顶点的所有边上的流值之和. 19
第7章 网络流(续2) • 割 • 割的定义 • s-t割是顶点集合V的一个划分(A,B),使得源点s属于集合A,汇点t属于集合B. • 割的容量 • 割(A,B)的容量是从A出来的所有边的容量之和. • 流与割 • 最大流等于最小割(最大流-最小割定理) 20
第7章 网络流(续3) • 计算最大流算法的三个基本概念 • 剩余图 • 增广路径 • 流网络的割 • 根据最大流求最小割的方法 • 根据定理7.11,首先构造最大流对应的剩余图,然后从源点s开始执行宽度优先搜索或深度优先搜索来确定最小割中的A和B. 21
第7章 网络流(续4) • 网络流的应用 • 二分匹配问题 • 不交路径问题 22
u u 4 2 1 1 s s 6 t 1 t 4 v 1 v 2 1 第7章 网络流习题 • 习题1:(a): C(A,B)=2,其中A=(s),B=(u,v,t). (b): C(A,B)=4,其中A=(s,v),B=(u,t). 23
a 5 5 5 10 3 3 8 8 8 10 8 8 s b c t 3 3 5 5 10 5 d 第7章 网络流习题(续1) • 习题2: • (a):这个流的值为18,不是这个图中的最大(s-t)流. • (b):C(A,B)=21,其中A=(s,a),B=(b,c,d,t). 24
1 0 1 4 1 1 s 1 3 t 1 2 1 第7章 网络流习题(续2) • 习题3: • (a):这个流的值为10,不是这个图中的最大(s-t)流. • (b):C(A,B)=11,其中A=(s,a,b,c),B=(d,t). • 习题4:否(图7.26就是反例). • 习题5:否(如下图所示) 25
第8章 NP与计算的难解性 • 多项式时间归约 • 如果能够用多项式个标准的计算步骤加多项式次调用解决问题Y的黑盒子来解决X的任意实例,则称X可以归约到Y(记作X≤pY). • 基本的归约策略 • 等价规约(独立集和顶点覆盖) • 归约到更一般的情况(顶点覆盖归约到集合覆盖) • 使用“零件”归约(3-SAT归约到独立集) 26
第8章 NP与计算的难解性(续1) • 判定问题 • 判定问题就是该问题的答案不是“是”就是“否”的问题.理论上,所有的组合优化问题都可以转化为判定问题. • 有效验证程序 • 验证程序B是有两个输入变量s和t的多项式时间算法. • 存在多项式p使得对每一个输入串s, s∈X当且仅当存在证书t使得|t|≤p(|s|)且B(s,t)=Yes. • P问题、EXP问题和NP问题 • P问题:能够在多项式时间内求解的判定问题. • EXP问题:能够在指数时间内求解的判定问题. • NP问题:能够在多项式时间内得到验证的判定问题. 27
第8章 NP与计算的难解性(续2) • NP完全问题的定义 (1) 问题X属于NP (2) NP中的所有问题都可以归约到X 称这样的X是NP完全问题 • P=NP? • NP完全问题的证明方法 • 根据定义证明(电路可满足性问题就是根据定义证明的第一个NP完全问题) • 根据定理8.14证明(如果Y是一个任意的NP完全问题,X属于NP且Y归约到X,则X是NP完全的.这是证明NP完全问题的通用策略) 28
CIRCUIT-SAT 3-SAT 3-SAT reduces to INDEPENDENT SET INDEPENDENT SET DIR-HAM-CYCLE GRAPH 3-COLOR SUBSET-SUM VERTEX COVER SCHEDULING HAM-CYCLE PLANAR 3-COLOR SET COVER TSP 第8章 NP与计算的难解性(续3) 29
第8章 NP与计算的难解性(续4) • NP问题和co-NP问题 • NP问题是能够在多项式时间内得到验证的判定问题. • co-NP问题是NP问题的补问题. • co-NP = NP ? • P = co-NP NP ? 30
第8章 NP与计算的难解性习题 • 习题1: • 区间调度≤p顶点覆盖? Yes. • 顶点覆盖≤p区间调度? No. 31
Alanis 啤酒 液体清洁剂 Raj Chelsea 猫用干草 第8章 NP与计算的难解性习题(续1) • 习题2: • (1)首先证明兴趣互异的子集是NP的.任给一个自然数k,可以在多项式时间 内进行验证. • (2)下面证明独立集≤p兴趣互异的子集. • 构造一个有向图G,G中的顶点对应客户,如果两个客户购买了相同的产品,则在它们之间添加一条边. • 如果有向图G中存在k个顶点的独立集,则说明k个客户中任意两个客户都没有买过相同的商品;如果存在K个客户中任意两个客户都没有买过相同的商品,则有向图G中必然存在k个顶点的独立集. 32
PSPACE NP Co-NP NPC P 第9章 PSPACE:一个超出NP的问题类 • PSPACE问题 • 可以用具有多项式空间复杂度的算法解决的问题. • P=PSPACE? NP=PSPACE? • PSPACE完全问题的定义 (1) 问题X属于PSPACE (2) PAPACE中的任何一个问题Y都可归约到问题X 则称问题X是PSPACE完全的. • NP-Hard问题 • NP中的所有问题都可以归约到X,则X是NP-Hard问题。 33
第9章 PSPACE:一个超出NP的问题类习题 • 习题1:(在多项式时间内可解) • (1) 首先将QSAT(量化的3-SAT)的实例视为是CSAT(竞争的3-SAT)的实例,即第一个玩家控制奇数下标的变量,第二个玩家控制偶数下标的变量. • (2) 如果任意子句中都出现奇下标的变量,则第一个玩家可以赢,当且仅当将所有的奇下标变量设置为1. • (3)如果存在子句中没有出现奇下标的变量,则第二个玩家可以赢,当且仅当将所有的偶下标变量设置为0. 34
第10-13章 NP-Hard问题求解 • NP-Hard问题的求解策略 • 求解NP-Hard问题的特例(CH10) • 求解NP-Hard问题的近似算法(CH11) • 求解NP-Hard问题的局部搜索算法(CH12) • 求解NP-Hard问题的随机算法(CH13) 35
第10-13章 NP-Hard问题求解(续1) • NP-Hard问题的求解策略 • 求解NP-Hard问题的特例(CH10) • 找小的顶点覆盖 • 在树上(具有特殊结构)求NP-Hard问题(树上的独立集的贪心算法和树上的最大权独立集的动态规划算法) • 求解NP-Hard问题的近似算法(CH11) • 求解NP-Hard问题的局部搜索算法(CH12) • 求解NP-Hard问题的随机算法(CH13) 36
第10-13章 NP-Hard问题求解(续2) • NP-Hard问题的求解策略 • 求解NP-Hard问题的特例(CH10) • 求解NP-Hard问题的近似算法(CH11) • 贪心算法(负载均衡问题和中心选址问题) • 定价法 • 线性规划和舍入技术 • 求解NP-Hard问题的局部搜索算法(CH12) • 求解NP-Hard问题的随机算法(CH13) 37
第10-13章 NP-Hard问题求解(续3) • NP-Hard问题的求解策略 • 求解NP-Hard问题的特例(CH10) • 求解NP-Hard问题的近似算法(CH11) • 求解NP-Hard问题的局部搜索算法(CH12) • 梯度下降法或爬山法 • 模拟退火算法 • 禁忌搜索算法 • 求解NP-Hard问题的随机算法(CH13) 38
第10-13章 NP-Hard问题求解(续4) • NP-Hard问题的求解策略 • 求解NP-Hard问题的特例(CH10) • 求解NP-Hard问题的近似算法(CH11) • 求解NP-Hard问题的局部搜索算法(CH12) • 求解NP-Hard问题的随机算法(CH13) • 数值概率算法 • 舍伍德算法 • 拉斯维加斯算法 • 蒙特卡罗算法 39
第10章 扩展易解性的界限习题 • 习题1: 任选一个集合Bi={x1,x2,…xc} For 集合Bi中的每一个元素xi 分别从集合B1,B2,…Bm, H中除去元素xi形成一个简化实例并进行递归调用判断该简化实例是否存在大小为k-1的击中集. EndFor 如果存在某个简化实例返回“真”,则算法返回“真”, 否则算法返回“假”. 40
B1 B2 Bi Bm … … H hk hi h1 h2 第10章 扩展易解性的界限习题(续1) • 时间复杂度分析: T(m,k)=cT(m,k-1)+O(cm)=>T(m,k)=O(mck). 41
第11章 近似习题 • 习题1: • (a): 设集装箱的重量为W={1,4,6,9}, 每辆卡车的载重量为k=10,则本题贪心算法共需要3辆卡车,而最优解需要2辆卡车. • (b): 证明该贪心算法的近似比为2. 设贪心算法的解需要2q+1(2q证明更容易)辆车,连续两辆卡车的载重之和一定大于K,因此W一定大于qK. 最优解至少需要W/K+辆车,即至少需要q+1辆车,而不等式(2q+1)/(q+1)<2成立,因此该贪心算法的近似比为2. 42