多项式规约——续

①有向图哈密尔顿圈 ≤ p \leq_p p无向图的哈密尔顿圈
目标:给定一个 n n n个节点的有向图 G = ( V , E ) G = (V,E) G=(V,E),我们可以构造一个含 3 n 3n 3n个顶点的无向图 G ′ G^{'} G。有向图 G G G拥有哈密尔顿圈当且仅当无向图 G ′ G^{'} G拥有哈密尔顿圈。
构图思路:把有向图 G G G中的一个顶点,拆分成三个顶点(蓝、黑、白)
在这里插入图片描述
证明:
⇒ \Rightarrow
假设 G G G存在一个有向的哈密尔顿圈 Γ \Gamma Γ,那么 G ′ G^{'} G也有一个跟上述顺序一致的无向哈密尔顿圈 Γ ′ \Gamma^{'} Γ
⇐ \Leftarrow
假设 G ′ G^{'} G有一个无向哈密尔顿圈 Γ ′ \Gamma^{'} Γ Γ ′ \Gamma^{'} Γ访问 G ′ G^{'} G中的顶点必须选择一下两种顺序中的一个:

  • 黑,白,蓝
  • 黑,蓝,白

Γ ′ \Gamma^{'} Γ中的黑色节点对应 Γ \Gamma Γ中的哈密尔顿圈或者逆序中的一个。

3 − S A T ≤ p 3-SAT\leq_p 3SATp有向图哈密尔顿圈
目标:给定一个 3 − S A T 3-SAT 3SAT的实例,我们都能构造出一个图 G G G 3 − S A T 3-SAT 3SAT实例有解当且仅当图 G G G含有一个哈密尔顿圈。
构图思路

  • G G G中哈密尔顿圈的个数为 2 n 2^n 2n个,每个文字有真假2种可能,一共有 n n n个,从左到右赋值为真,从右到左赋值为假
  • 对于每个从句,若存在 x i x_i xi,则增加一个节点,并从左到右增加边;若存在 x i ‾ \overline{x_i} xi,则增加一个节点,并从右到左增加边
    在这里插入图片描述

证明:
⇒ \Rightarrow
假设 3 − S A T 3-SAT 3SAT实例 ϕ \phi ϕ有满足的真值指派 x ∗ x^{*} x,那么我们在 G G G中找到一个哈密尔顿圈 Γ \Gamma Γ如下:

  • 如果 x i ∗ = t r u e x_i^{*} = true xi=true,我们从左到右穿过第 i i i
  • 如果 x i ∗ = f a l s e x_i^{*} = false xi=false,我们从右到左穿过第 i i i
  • 对于每个句子 C j C_j Cj,至少存在一行按照我们上述的方向,把句子节点铰接进圈内,我们只把句子节点铰接进圈有且仅有一次。

⇐ \Leftarrow
假设 G G G中有一个哈密尔顿圈 Γ \Gamma Γ
如果 Γ \Gamma Γ加入了句子节点 C j C_j Cj,并假设与 C j C_j Cj前后邻接的节点通过边 e e e相连。我们从圈中删除节点 C j C_j Cj和其直连边,并用边 e e e代替,得到 G − C j G-{C_j} GCj的哈密尔顿圈。
循环执行上述方法,我们得到在 G − { C 1 , C 2 , … , C k } G-\{C_1,C_2,\dots,C_k\} G{C1,C2,,Ck}上的哈密尔顿圈 Γ ′ \Gamma^{'} Γ
如果 Γ ′ \Gamma^{'} Γ在第 i i i行的遍历方向是从左到右的,那么置 x i ∗ = t r u e x_i^*=true xi=true,否则置 x i ∗ = f a l s e x_i^*=false xi=false
按照上述正确方向遍历进行真值指派,每个句子都会被满足,即原实例 ϕ \phi ϕ可满足。

3 − S A T ≤ p 3-SAT\leq_p 3SATp有向图哈密尔顿路径 ≤ p \leq_p p无向图哈密尔顿路径 ≤ p \leq_p p最长路径问题
最长路径问题: 给定一个有向图 G = ( V , E ) G=(V,E) G=(V,E),是否存在包含至少 k k k条边的简单路径
证明:
在有向图哈密尔顿圈的构图上,删除从 t t t s s s的边,便得到有向图哈密尔顿路径的实例。有向图哈密尔顿路径可以通过一个节点扩展成三个节点的方式,多项式规约到无向图哈密尔顿路径问题。无向图哈密尔顿路径问题,在原图基础上,令 k = ∣ V ∣ − 1 k = |V|-1 k=V1,就可以得到一个最长路径的实例。若包含一个至少为 k = ∣ V ∣ − 1 k = |V|-1 k=V1的简单路径,则存在一条哈密尔顿路径。

④哈密尔顿圈问题 ≤ p \leq_p pTSP问题
TSP问题:给定 n n n个城市以及两两城市之间的距离 d ( u , v ) d(u,v) d(u,v),问是否存在一个旅游访问 n n n个城市一次且长度 ≤ D \leq D D
哈密尔顿问题和TSP问题的区别
由于售货员可以从某个城市到其他任何一个城市,因此,该问题对应的是一个完全图(设为G′),而关于判断哈密尔顿回路的图(设为G)并不一定为完全图。
目标:给定一个哈密尔顿圈的实例 G = ( V , E ) G=(V,E) G=(V,E),创建一个TSP问题的完全图实例, n n n个城市两两间的距离函数定义如下:
d ( u , v ) = { 1 i f ( u , v ) ∈ E 2 i f ( u , v ) ∉ E d(u,v)=\left\{ \begin{aligned} 1 && if(u,v)\in E\\ 2 && if(u,v)\notin E \end{aligned} \right. d(u,v)={12if(u,v)Eif(u,v)/E
TSP问题有一个长度 ≤ n \leq n n的旅游当且仅当 G G G中含有一个哈密尔顿圈

3 − S A T 3-SAT 3SAT问题 ≤ p \leq_p p 3着色问题
3着色问题:给定一个无向图 G G G,问能否用三种颜色给顶点着色,使得邻接顶点间颜色不同。
3着色问题 ≤ p \leq_p pK寄存器分配问题,对于 k ≥ 3 k\geq3 k3
寄存器分配问题可以建模成 k k k着色问题,一个寄存器一个时间只能存一个数据,一个时间点可能涉及多个数据参与运算,此时需要多个寄存器。
目标:给定一个 3 − S A T 3-SAT 3SAT的实例 ϕ \phi ϕ,我们可以构建一个3着色的实例图 G G G ϕ \phi ϕ可满足当且仅当 G G G是可3着色的。
构图思路
每个文字连接其对立面,所有文字连接到 B B B。对于每个从句,在包含的文字下方,增加6个顶点和13条边。
在这里插入图片描述
在这里插入图片描述
⇒ \Rightarrow
ϕ \phi ϕ可满足,即每个从句中至少有一个文字是真,赋值为绿色。我们可以在其余两个文字真假都可以的情况下,完成三着色,如下图所示:
在这里插入图片描述
⇐ \Leftarrow
若图 G G G可三着色,则 ϕ \phi ϕ是可满足的。
反证法:若 ϕ \phi ϕ是不可满足的,即 ϕ \phi ϕ中文字对应的顶点全部着红色,则推出图 G G G不可以三着色。
在这里插入图片描述

⑥一般图的三着色 ≤ p \leq_p p平面图的三着色
注意:一般图的 k k k着色仍是 N P C NPC NPC问题,只不过 k k k越大,复杂度的指数底数越小而已,但仍不是多项式时间的。平面图的4着色是 P P P问题,最优可 O ( n 2 ) O(n^2) O(n2)解决。
目标:任意给出一个图 G G G,我们能构造出一个平面图 G ′ G^{'} G。原图 G G G可3着色当且仅当平面图 G ′ G^{'} G可三着色。
构图技巧:借助转换小工具,该小工具满足对角着色必须相同
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 − S A T ≤ p 3-SAT\leq_p 3SATp子集和问题
子集和问题:给定 n n n个数 w 1 , … , w n w_1,\dots,w_n w1,,wn和整数 W W W,是否存在一个子集,其中所有元素的和等于 W W W
目标:任给一个 3 − S A T 3-SAT 3SAT实例 ϕ \phi ϕ,我们都能构造出一个子集和问题的实例。实例 ϕ \phi ϕ可满足当且仅当子集和问题有解
构图思路:任给一个含 n n n个变量(每个句子只装3个变量) k k k个句子的 3 − S A T 3-SAT 3SAT问题的实例 ϕ \phi ϕ,形成 ( 2 n + 2 k ) × ( n + k ) (2n+2k)\times(n+k) (2n+2k)×(n+k)的表格
在这里插入图片描述
在这里插入图片描述
构造解析

  • x i x_i xi x i ‾ \overline{x_i} xi只能选一个,因此左边 n n n列各自和为1(即 W W W的前 n n n位为1)
  • C i C_i Ci中至少有一个文字为真,因此句子本身列的和至少为 1 1 1。为凑够4,从下面 { 1 , 2 } \{1,2\} {1,2}选其中一个或者全选凑够4,选了相应的数,即选中了相应行对应的数。

证明:
⇒ \Rightarrow
假设实例 ϕ \phi ϕ有一个可满足的真值指派 x ∗ x^* x
如果 x i ∗ = t r u e x_i^*=true xi=true,选择 x i x_i xi所在行对应的整数;否则选择 x i ‾ \overline{x_i} xi对应的整数
每个 x i x_i xi对应的和为1,每个 C j C_j Cj对应的和至少为1,加上虚拟的整数,使 C j C_j Cj对应的列和为4
这样我们得到一个整数集合,并从整数中找到一个子集,其和为 W W W
⇐ \Leftarrow
假设存在一个子集 S ∗ S^* S和为 W W W
由于要满足和为 W W W,因此子集 S ∗ S^* S只能从 x i x_i xi x i ‾ \overline{x_i} xi中选择一个,不能全选
如果选定 x i x_i xi,则令 x i ∗ = t r u e x_i^* =true xi=true,否则令 x i ∗ = f a l s e x_i^* =false xi=false
同样要满足和为 W W W,因此至少从 C j C_j Cj中选择一个文字,不然和达不到4.
这样我们就找到了一个可满足的真值指派。

⑧子集和问题 ≤ p \leq_p p背包问题
背包问题:给定一个物品集合 X X X,重量为 u i ≥ 0 u_i\geq0 ui0,价值 v i ≥ 0 v_i\geq0 vi0,背包能承受的总重量不超过 U U U,给定一个目标价值 V V V,是否存在一个子集 S ⊆ X S\subseteq X SX:
∑ i ∈ S u i ≤ U , ∑ i ∈ S v i ≥ V \sum_{i\in S} u_i\leq U, \sum_{i\in S}v_i\geq V iSuiU,iSviV
规约思路
对于任意一个子集和实例,我们按照如下构造一个背包实例:
{ u i = v i = w i U = V = W \left\{ \begin{aligned} u_i = v_i = w_i\\ U = V = W\\ \end{aligned} \right. {ui=vi=wiU=V=W
这样子集和有解当且仅当背包有解

⑨子集和问题 ≤ p \leq_p p分割问题
分割问题:给定 m m m个数 v 1 , v 2 , … , v m v_1,v_2,\dots,v_m v1,v2,,vm,是否可以将这 m m m个数分割成两个子集,使每个子集各元素之和为 1 2 ∑ i v i \frac{1}{2}\sum_iv_i 21ivi
构造思路:
给定子集和实例 W , w 1 , w 2 , … , w n W,w_1,w_2,\dots,w_n W,w1,w2,,wn,我们构造分割问题如下:
分割问题共有 m = n + 2 m=n+2 m=n+2个元素,元素赋值规则如下:
v 1 = w 1 , v 2 = w 2 , … , v n = w n , v n + 1 = 2 ∑ i w i − W , v n + 2 = ∑ i w i + W v_1=w_1,v_2=w_2,\dots,v_n=w_n,v_{n+1} =2\sum_iw_i-W,v_{n+2} =\sum_iw_i+W v1=w1,v2=w2,,vn=wn,vn+1=2iwiW,vn+2=iwi+W
由于分割问题总和为 4 ∑ i w i 4\sum_iw_i 4iwi,所以 v n + 1 v_{n+1} vn+1 v n + 2 v_{n+2} vn+2不能在同一子集,不然该子集和为 3 ∑ i w i 3\sum_iw_i 3iwi,最终不能均分。要使每部分和为 2 ∑ i w i 2\sum_iw_i 2iwi,只能是如下情况:
在这里插入图片描述
其中 W W W ∑ i w i − W \sum_iw_i-W iwiW两部分,说明能从 w 1 , w 2 , … , w n w_1,w_2,\dots,w_n w1,w2,,wn中找到一个子集,使其和为 W W W

⑩子集和问题 ≤ p \leq_p p调度问题
调度问题:给定 n n n个任务,任务 j j j的处理时间为 t j t_j tj,工作时间发布时间为 r j r_j rj,截止时间为 d j d_j dj,能否找到一个调度方案,使所有任务在一台机器上进行且在相应的时间段 [ r j , d j ] [r_j,d_j] [rj,dj]内完成。
构造方案如下
构造 n n n个任务,任务 j j j的处理时间为 t j = w j t_j = w_j tj=wj,发布时间为 r j = 0 r_j = 0 rj=0,截止时间设为 d j = 1 + ∑ j w j d_j = 1+\sum_jw_j dj=1+jwj
再额外构造任务0,该任务处理时长为 t 0 = 1 t_0 = 1 t0=1,发布时间为 r 0 = W r_0 = W r0=W,截止时间为 d 0 = W + 1 d_0 = W +1 d0=W+1
在这里插入图片描述
这样就迫使,子集和有解当且仅当调度问题有解

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值