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