zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【计算理论】计算复杂性 ( 无向图独立集问题 | 独立集问题是 NP 完全问题证明思路 | 证明独立集问题是 NP 完全问题 )

思路计算 问题 完全 理论 独立 证明 复杂性
2023-06-13 09:17:48 时间

文章目录

一、独立集问题


无向图的独立集 , 指的是在无向图中找到点集的子集 , 使得它们两两之间 , 没有边相连 ;

下图中的无向图中 , 黄色的点集是独立集 ;

独立集问题也是一个

\rm NP

完全问题 ;

二、独立集问题是 NP 完全问题证明思路


证明一个命题是

\rm NP

完全问题 :

① 证明是

\rm NP

问题 : 首先证明该问题是

\rm NP

问题 ;

② 证明是最难的

\rm NP

问题 : 然后证明所有的

\rm NP

问题 , 可以在多项式时间内规约到 该命题中 ; 也可以使用一个已经证明的

\rm NP

完全问题 , 在多项式时间内规约到 需要被证明的命题 ;

证明 独立集题 是

\rm NP

完全的 , 从已知的

\rm NP

完全问题出发 , 已知的

\rm NP

完全问题就是 3-SAT 问题 ,

如果 3-SAT 问题是

\rm NP

完全的话 ,

只要证明 3-SAT 问题 可以在 多项式时间内规约 到 独立集问题 中 , 3-SAT

\leq

独立集问题 ,

就可以证明 独立集问题 是

\rm NP

完全问题 ;

将 3-SAT 问题 可以在 多项式时间内规约 到 独立集问题 中 ,

给定一个 3-SAT 问题 的 布尔逻辑公式 ,

\rm \phi = ( x \lor y \lor \lnot z) \land ( \lnot x \lor \lnot y \lor z ) \land ( \lnot x \lor y \lor \lnot z)

构造一个 无向图 ,

使得 布尔逻辑公式 是可满足的 , 当且仅当 , 无向图中有一个

\rm k

独立集 ;

\rm k

独立集就是无向图中

\rm k

个节点子集 , 每两个节点之间都没有边相连 ;

证明过程 : 从 给定的 3-SAT 布尔逻辑公式

\rm \phi = ( x \lor y \lor \lnot z) \land ( \lnot x \lor \lnot y \lor z ) \land ( \lnot x \lor y \lor \lnot z)

中 , 构造出一个无向图 出来 , 使得该无向图可以满足 " 布尔逻辑公式 是可满足的 , 当且仅当 , 无向图中有一个

\rm k

独立集 "

二、证明独立集问题是 NP 完全问题


任意给出一个

3

合取范式 ,

\rm \phi = ( x \lor y \lor \lnot z) \land ( \lnot x \lor \lnot y \lor z ) \land ( \lnot x \lor y \lor \lnot z)

将上述公式转为无向图 : 合取范式每个子项 , 转换为三元组 , 如下图所示 ;

无向图构造原则 : 互为否定的点集 , 连接在一起 ,

没有边相连 : 下图中

\rm x , \lnot y , \lnot z

互相不为否定 , 三个点之间没有边相连 ;

没有边相连 : 下图中

\rm y , \lnot x , \lnot x

互相不为否定 , 三个点之间没有边相连 ;

有边相连 : 下图中

\rm \lnot z , z , \lnot z

有两个互相为否定 , 三个点之间有

2

条边相连 ;

有边相连 : 下图中

\rm x , \lnot x , \lnot x

有两个互相为否定 , 三个点之间有

2

条边相连 ,

构造好的无向图 :

如果

\rm \phi = ( x \lor y \lor \lnot z) \land ( \lnot x \lor \lnot y \lor z ) \land ( \lnot x \lor y \lor \lnot z)

布尔逻辑公式可满足 ,

当且仅当 ,

上述最终形成的无向图中 , 一定存在着一个

3

个节点组成的独立集 ;

布尔逻辑公式中 , 给定一组真值 ,

\rm x=true , y=true , z=true

那么

\rm x , y, z , \lnot x , \lnot y , \lnot z

中取值为真的就是独立子集 ,

因此

\rm x , y, z

是独立子集 ;

布尔逻辑公式中 , 给定一组真值 ,

\rm x=false , y=随意 , z=false

那么

\rm x , y, z , \lnot x , \lnot y , \lnot z

中取值为真的就是独立子集 ,

因此 一个

\rm \lnot x

两个

\rm \lnot z

组成的点集 是独立子集 ;