NPC问题:有向哈密顿回路是NP完全的

把哈密顿回路中的图改成有向图即为有向哈密顿回路

有向HC\(\in\)NP是显然的,只需证明\(3SAT \in_p \text{有向}HC\)

证明思路

任给变元\(x_1,x_2...x_n\)的三元合取范式\(F = \and _{1\le j\le m}C_j\),其中\(C_j = z_{j1}\or z_{j2} \or z_{j3}\)

要构造一个有向图\(D = <V,E>\),使得F是可满足的当且仅当D有哈密顿回路

证明构造

采用构件设计法构造D。

表示变元\(x_i\)的构件是一条由一串水平的顶点组成的链\(L_i\),相邻的两个顶点之间有一对方向相反的有向边。如果要通过\(L_i\)上的所有顶点,只能从左到右或者从右到左,对应\(x_i\)的值为1或0

表示简单析取式\(C_j\)的构件是一个顶点\(c_j\)。除去\(c_j\)\(L_i\)之间的连接,整个D如图所示

总体而言,任何哈密顿回路可以从\(s_0\)开始,对每一个\(i\),选择从左到右或从右到左通过\(L_i\),然后经过连接两条链的中间节点\(s_i\)到下一条链\(L_{i+1}\),最后回到\(s_0\)结束。

现在的问题是如何处理第二种构件\(c_j\)和第一种构件的关系。即需要在两种构件之间建立一定联系,使得F是可满足的当且仅当D有哈密顿回路

链路\(L_i\)\(3m+1\)个顶点,依次为\(d_{i0},a_{i1},b_{i1}...a_{im},b_{im},d_{im}\)

对每一个\(C_j=z_{j1}\or z_{j2} \or z_{j3}\)

  • 如果\(z_{jk}=x_i\),则添加两条有向边\(<a_{ij},c_j>\)\(<c_{j},b_{ij}>\)
  • 如果\(z_{jk}=\neg x_i\),则添加两条有向边\(<b_{ij},c_j>\)\(<c_{j},a_{ij}>\)

例如\(C_2 = x_1\and \neg x_3 \and \neg x_4\)对应如下

理解:\(L_i\)相当于是记录了\(x_i\)在所有\(C\)中出现的情况

构造正确性

设F是可满足的,t是F的成真赋值。要证明两者等价,需要根据t构造一条从\(s_0\)\(s_n\)最后回到\(s_0\)的哈密顿回路。

定义\(t(x_i)=1\),从\(s_{i-1}\)\(d_{i0}\),再到\(s_i\),总体从左到右;反之,从右到左。现在考虑存在\(c_i\)的情况。因为\(C_j=1\)所以至少有一项为1,而其中一项为1就意味着通路加入\(c_j\)后仍然为通路(容易理解)。所以显然可以找到一条哈密顿回路。

反之,设D有一条哈密顿回路P。下证不可能存在从一个\(L_i\)进入\(c_k\),从另一个\(L_j\)出的可能性。事实上这是显然的,如果从另一个\(L_j\)出,必然意味着\(L_i\)中后面的点无法出现在这条哈密顿回路中,与哈密顿回路的定义矛盾。

所以必然是从同一个\(L_i\)进入\(c_k\),再从\(L_i\)出,也就说明\(C_j\)中至少有一项为1。


例题2(续):哈密顿回路是NP完全的

因为已知\(HC\in NP\),只要证明 有向\(HC\in _p HC\)

任给一个有向图\(D=<V,E>\),要构造一个无向图\(G=<V',E'>\),使得D有哈密顿回路当且仅当G有哈密顿回路

关键:如何用无向边表示有向边

把D的每一个顶点v换成三个顶点\(v^{in},v^{mid},v^{out}\)

局部替换方式如下

\[V' = \{v^{in},v^{mid},v^{out}| u\in V \}, \\ E' = \{(u^{out},v^{in}) | <u,v> \in E \} ~\cup~ \{(v^{in},v^{mid}),(v^{mid},v^{out}) | v\in V \} \]

posted @ 2022-05-26 20:34  无证_骑士  阅读(723)  评论(0)    收藏  举报
页脚HTML页码