您的位置:首页 > 其它

算法概论 第八章习题

2018-01-13 16:14 232 查看
8.3

首先,易知STINGY SAT 的解是可在多项式时间内验证的,因此属于NP。另外,很容易可以将SAT 归约到STINGY SAT(将k 设为所有变量的总个数即可),于是可知STINGY SAT 为NP 完全问题。

8.8

首先很显然,EXACT 4SAT 属于NP。现在通过将3SAT 归约到EXACT 4SAT 来证明后者的NP 完全性。对于任意一个3SAT 实例,如果其中某个子句中包含了同一文字多次,那么可以缩减为一次,如果同时包含了某个变量的肯定及否定,那么可以将这个变量去掉。然后,可以再在每个子句中可以添加一些哑变量(即没用的辅助变量),这样就可以将每个子句所包含的文字数目扩充到四个。至此,即已将该3SAT 实例转化成了一个EXACT 4SAT 问题。

8.9

很容易将最小顶点覆盖归约到HITTING SET。假设要求图G 的最小顶点覆盖,可以建立一个HITTING SET 实例,其中S1 , S2 ,… , Sn 即是图G的各条边,比如{v1,v2},{v3,v4},… 。通过二分式的询问,可以找到一个与Si 都相交的最小集合H ,这正好就是图G 的最小顶点覆盖。

8.10

a) 令图G 为一个环,环上的顶点数等于图H 的顶点数。那么若G 是H 的同构子

图,则说明H 存在Rudrata 回路。于是知Rudrata 回路事实上是子图同构问题的

一个特例。

b) 如果令g = V −1,即得到一条 Rudrata 路径。

c) 令 g 为子句的总数,即成SAT。

d) 令b = a(a-1) / 2 ,此时这a 个顶点两两相连,于是即成最大团问题。

e) 令b = 0,即成最大独立集问题。

f) 显然是最小顶点覆盖的一个推广。

g) Hint 中所描述的特例即是一个TSP。

8.12

a) 显然 k -SPANNING TREE 问题是可在多项式时间内验证的,因此是搜索问题。

b) 若k = 2,此时的2 -SPANNING TREE 实际上就是一条 Rudrata 路径。另外,这里好像有点问题,不知道我是否理解错了意思,因为当k ≥ V 时,显然只要一

次DFS 就能找出解。

8.14

可以将最大团问题归约到此问题。假设要求任意图G(V, E)中大小为k 的团,可以在图G 中添加k 个相互独立的顶点,得到新图G’。这新加的k 个顶点保证了图G’存在大小为k 的独立集,同时又不影响到原图的团。

8.15

可以将最大独立集问题归约到此问题。比如若要求任意图G(V, E)中大小为d 的独

立集,可以令 G1= G (V, E) ,再令 G2 (V,∅) 的顶点集与G 相同,但是边集为空,

也即是各个顶点相互独立。于是 G1 与 G2 存在着大小为d 的公共子图,当且仅当图G存在着大小为d 的独立集。

8.16

考虑怎么把一个3SAT 实例转化成一个EXPERIMENTAL CUISINE 问题:对于任意一个 3SAT 问题,若其某一子句c 为(U ∨V ∨W),我们可以相应地建立 7 种ingredients,分别为{U~V~Wc, ~UV~Wc, ~U~VWc, UV~Wc, ~UVWc, U~VWc, UVWc } 。这7 种ingredients 代表了使得子句c 成立的七种不同情况,比如UW~Vc 代表U 和W 同时为真,且V 为假。它们之间当然是完全不兼容的,因此将其中两两之间的discord 值设为1。现在再考虑子句与子句之间的情况,对于任意两子句i 和j ,将这两个子句中相矛盾的成分之间的discord 值设为1,比如UABi 与~UCDj 等。设子句总数为n ,再令 p = 0,若此时能选择的成份数为n,那么即说明此 3SAT 能满足。另外,判断一个3SAT 是否能满足与找出这个3SAT 的解实际上是等价的,因此若EXPERIMENTAL CUISINE 在多项式时间内可解的话,3SAT 亦然。

8.19

可以将团问题归约到 KITE 问题。若要求图G(V, E)的最大团,类似于 Ex.8.14,可

以在图G 中添加V 个新顶点,并将每个新顶点都连向原图中不同的某个顶点,共

形成了V 条新边,这样就得了一个新图G’。容易看出,在G’中存在大小为2g的

kite 当且仅当G 中存在大小为g 的团。

8.20

可以将顶点覆盖问题归约到支配集问题。若要在图G(V, E)中求得不大于b的一个顶点覆盖,可以先对图G 做一个预处理:对每条边(u,v)∈E ,添加一个辅助顶点w,及两条边(u,w)和(v,w),如下图所示:



对每条边都这样处理后得到一个新图G’。容易看出,若原图G 中存在不大于b 的顶点覆盖,这个顶点覆盖也是新图G’的一个支配集。反过来,若新图G’中存在一个不大于b 的支配集,那么对这个支配集进行一些处理后也能得到一个图G 的不大于b 的顶点覆盖。处理过程如下:设该支配集为D,对于每条边(u,v)及相应的辅助顶点w,若w∉D ,则不用做任何处理,若w∈D 且u,v∉D,那么可以在D中将w替换成u 或v,若w∈D 同时u∈D∨ v∈D,则直接将w从D中删掉即可。

8.22

a) 显然 FAS 是可在多项式时间内验证的,因此属于NP。

b) 设G 的一个大小为b 的顶点覆盖为C ,对于任意顶点vi ∈C ,设其在G’中相对应的顶点为 wi 和 wi’ ,则将边( wi, wi’) 添加到E’。对C中的每个顶点都这样处理后,所得到的边集E ‘即是G’的一个大小为b 的 feedback arc set。因为对于顶点 wi 和 wi’ ,当去掉边( wi, wi’) 后,所有与 wi 相连的边都不可能位于任何一个环中,因为 wi 不存在出边,同样,所有与 wi’ 相连的边也不可能位于任何一个环中,因为 wi’ 不存在入边。

c) 对于G 中的任意一条边( vi, vj ),设其在G’中相对应的顶点为 wi 、wi’ 、wj 、 wj’ ,相对应的边为( wi, wi’) 、( wj, wj’) 、( wi’,wj ) 、( wj’,wi ) 。若E ‘是G’的一个大小为b 的 feedback arc set,显然,在这四条边中至少有一条边e属于E ‘,否则就会形成环,而边e必然有个端点属于{ wi,wj } 。若 wi 是e 的端点,则将 vi加入到C ,否则将 vj 加入到C 。容易看出,在经过上述处理后,C 即是G 的一个大小不超过b 的顶点覆盖。

8.23

在提示的基础上再做以下处理:对任意子句c = (l1 ∨ l2 ∨ l3) ,分别将 sc 与li 、li 与tc连结起来形成三条路径,因为任意 li 为真都使得c 为真。另外,对于每个变量v ,将 sv 与所有v 串联起来,再连向tv ,从而形成一条路径,再将sv 与所有~v 串联起来,连向 tv ,又形成一条路径。
8b56
在这两条路径中,必然要选择其中一条,这保证了所有变量的一致性,即如果有任意子句选择了v ,则其余子句就不能再选择v 。下面举一个简单的例子,假设要验证 CNF:(x ∨ y ∨ z)(x ∨ y ∨ z )是否可以被满足,令u = ( x ∨ y ∨ z),v = (x ∨ y ∨ z ),可得 NODE-DISJOINT PATH 问题如下图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: