📜  证明图的支配集是 NP 完全的

📅  最后修改于: 2021-10-25 05:00:00             🧑  作者: Mango

先决条件:图的支配集,NP-完全

问题:给定一个图G(V, E)和一个整数 k,问题是确定该图是否有一个大小为 k 的支配集。
解释:
问题的一个实例是为问题指定的输入。支配集问题的一个实例是图 G(V, E) 和整数 k,问题是检查该图是否可以在 G 中具有支配集。 由于 NP-Complete 问题,根据定义,是一个问题既属于 NP 又属于 NP-hard,证明问题是 NP-Complete 的证明由两部分组成:

  1. 支配集是 NP 完全的
    如果任何问题在 NP 中,那么,给定一个“证书”,它是问题的解决方案和问题的一个实例(在这种情况下是一个图 G 和一个正整数 k),我们将能够验证(检查给出的解决方案是否正确)多项式时间内的证书。
    证书是在图中形成支配集的顶点序列。我们可以通过检查所有顶点都属于图的顶点并且所有不属于该序列的顶点都与该集合中的某些顶点相邻来验证该解决方案。这可以在多项式时间内完成,即 O(V + E) 使用以下策略:
    flag=true
    for every vertex v in V:
      if v doesn't belong to Dominating Set:
         verify the set of edges 
         corresponding to v 
         if v is not adjacent 
            to any of the vertices in DS, 
            set flag=False and break
    if (flag)
       solution is correct
    else
       solution is incorrect
    
  2. 支配集是 NP-Hard
    为了证明支配集是 NP-Hard 问题,我们必须将一个已知的 NP-Hard 问题简化为这个问题。我们将从顶点覆盖问题简化为支配集问题。
    顶点覆盖问题的每个实例都由图G = (V, E)和由顶点子集组成的整数 k 作为输入组成,可以转换为由图G’ = (V’, E ‘) 。我们将按以下方式构建图 G’:

    • E’ = 对于图 G 中由顶点 {u, v} 组成的每条边 E,添加一个新顶点 {uv} 并将其单独连接到新顶点 u 和 v。
    • V’ = 添加原始图 G 的所有顶点 V。

    新图 G’ 可以在多项式时间内通过添加与新顶点对应的新边来获得,这需要O(V+E)时间。这种减少可以通过以下两个声明来证明:

    • 让我们假设图 G 有一个大小为 k 的顶点覆盖 VC。 G 中的每条边都有一个属于顶点覆盖的顶点。因此,对于每个由顶点 {u, v} 组成的边 e,至少有 u 或 v 是顶点覆盖的一部分。所以,如果 u 包含在 VC 中,那么相邻的顶点是 v,也被 VC 中的一些元素覆盖。现在,对于每条边的所有新添加的顶点 UV,顶点都与 u 和 v 相邻,其中之一至少是 VC 的一部分,如上所述。因此,所有边的附加顶点也被这个 VC 覆盖。形成大小为 k 的顶点覆盖的顶点集形成图 G’ 中的支配集。因此,如果 G 有一个顶点覆盖 G’ 有一个相同大小的支配集。
    • 我们假设图 G’ 有一个大小为 k 的支配集。可能出现两种可能性,要么 DS 中的顶点是原始顶点,要么属于每条边 {u, v} 新添加的顶点 UV。在第二种情况下,由于每个新顶点都连接到边的两个顶点 u 和 v,因此,它可以被替换为 u 或 v。由于,这三个顶点形成一个三角形,因此,即使通过替换视图使用 u 或 v,我们可以继续跨越替换之前跨越的所有顶点。这将导致在跨越图 G’ 的所有边时消除所有新添加的顶点。新添加的顶点由修改后的 DS 控制,并覆盖 G 中的所有边,每个边 UV 至少有 u 或 v。因此,如果 G’ 具有大小为 k 的支配集,则 G 将具有大小为最大 k 的顶点覆盖。

    在下图中,顶点 B 支配着 AB 和 BE,因此可以很容易地替换它。因此,这两个顶点是多余的。

    因此我们可以说图 G’ 包含一个支配集,当当当图 G 包含顶点覆盖。因此,支配集问题的任何实例都可以简化为顶点覆盖问题的实例。因此,支配集也是 NP-Hard。由于顶点覆盖同时属于 NP 和 NP-Hard 类,因此图的主要集合是 NP-Complete。

    如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。