📜  证明顶点覆盖是 NP 完备的(1)

📅  最后修改于: 2023-12-03 15:28:09.193000             🧑  作者: Mango

证明顶点覆盖是 NP 完备的

简介

顶点覆盖问题是图论中的一个 NP 完全问题,给定一个无向图,找到其中最小的点集,使得图上每条边至少有一个端点在这个点集中。

即:在一个无向图中,找到最小的节点集合,使得图上每条边都至少连接一个被选中的节点。

证明

为了证明顶点覆盖是 NP 完全的,我们需要证明两个条件:

  1. 顶点覆盖是 NP 问题;
  2. 顶点覆盖是 NP 完全问题。
顶点覆盖是 NP 问题

首先,我们证明顶点覆盖是 NP 问题。

NP 问题是指可以在多项式时间内验证一个问题的解是否正确。对于顶点覆盖问题,如果一个节点集合被认为是最小顶点覆盖,则我们可以在多项式时间内验证其正确性。可以对每个边进行检查,看它们是否至少连接一个选定的节点。

因此,顶点覆盖是 NP 问题。

顶点覆盖是 NP 完全问题

接下来,我们证明顶点覆盖是 NP 完全问题。

为了证明此事,我们需要证明:

  • 顶点覆盖是 NP 问题;
  • 我们可以将一个 NP 完全问题规约为顶点覆盖问题。

因为 3-SAT 是 NP 完全的,因此我们需要将一个 3-SAT 问题规约为顶点覆盖问题。

在 3-SAT 问题中,我们有一组布尔变量和一组布尔表达式。问题是找到一组布尔变量的值,使得所有表达式都为真。

可以将 3-SAT 表示为一个图,其中图的每个节点代表一个变量或其否定,每个表达式则对应于一个长度为 3 的路径,按照如下方式构建。

  • 对于每个变量 $x$,构建两个节点,分别代表 $x$ 和 $\neg x$;
  • 对于每个表达式 $E$,构建一个长度为 3 的路径。

具体的,对于表达式 $(a \lor b \lor c)$,构建如下路径:

  • 添加边 $(\neg a, b)$,表示表达式中的第一个文字有两种可能;
  • 添加边 $(\neg a, \neg b)$,同理。
  • 添加边 $(a, b)$,表示如果第一个文字取到 $a$,则其他两个存在必取一个。

对于 $(a \lor b \lor \neg c)$,则路径为:

  • 添加边 $(\neg a, b)$
  • 添加边 $(\neg a, c)$
  • 添加边 $(a, b)$

如果 3-SAT 问题有一个解,则我们可以将变量的值分配给图中的节点,对于每条边 $(u,v)$,如果存在 $u$ 或 $v$ 被赋值为真,则这条边就被覆盖。

反之,如果有一个最小的顶点覆盖,那么根据赋值规则,必然会给每个表达式中的文字一个布尔值,使得表达式为真。

因此,顶点覆盖是 NP 完全的。

总结

顶点覆盖作为 NP 完全问题,至今还没有一种快速的方法来解决它。但是,在实践中,许多有效的算法都已开发出来,并被广泛应用于不同的领域,如计算机网络和电路设计。