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

📅  最后修改于: 2021-09-27 22:51:24             🧑  作者: Mango

先决条件 – 顶点覆盖问题,NP 完备性
问题 –给定一个图 G(V, E) 和一个正整数 k,问题是要找出是否存在大小至多为 k 的顶点的子集 V’,使得图中的每条边都连接到某个顶点V’。

解释 –
首先让我们了解问题实例的概念。问题的实例只不过是给定问题的输入。 Vertex Cover 问题的一个实例是图 G(V, E) 和一个正整数 k,问题是检查 G 中是否存在最大 k 大小的顶点覆盖。 由于 NP Complete 问题,根据定义,是一个既是 NP 又是 NP 难的问题,一个问题是 NP Complete 的陈述的证明由两部分组成:

  1. 证明顶点覆盖在 NP 中 –
    如果任何问题在 NP 中,那么,给定问题的“证书”(解决方案)和问题的实例(图 G 和正整数 k,在这种情况下),我们将能够验证(检查无论给出的解决方案是否正确)多项式时间内的证书。

    顶点覆盖问题的证明是 V 的子集 V’,其中包含顶点覆盖中的顶点。我们可以使用以下策略(对于图 G(V, E))检查集合 V’ 是否是大小为 k 的顶点覆盖:

    let count be an integer
    set count to 0
    for each vertex v in V’
        remove all edges adjacent to v from set E
        increment count by 1
        if count = k and E is empty
        then
            the given solution is correct
        else
            the given solution is wrong
    

    很明显,这可以在多项式时间内完成。因此,顶点覆盖问题属于 NP 类。

  2. 证明顶点覆盖是 NP Hard –
    为了证明顶点覆盖是 NP 难的,我们取一些已经被证明是 NP 难的问题,并证明这个问题可以简化为顶点覆盖问题。为此,我们考虑 Clique 问题,它是 NP Complete(因此是 NP Hard)。

    在这里,我们考虑找出给定图中是否存在大小为 k 的团的问题。因此,团问题的一个实例是一个图 G(V,E) 和一个非负整数 k,我们需要检查是否存在一个团
    G 中的大小 k。

    现在,我们需要证明 Clique 问题的任何实例 (G, k) 都可以简化为顶点覆盖问题的一个实例。考虑由不在 G 中的所有边组成的图 G’,而是在使用 G 中所有顶点的完整图中。让我们称其为 G 的补集。 现在,确定图中是否存在大小为 k 的团的问题G与寻找是否存在大小|V|的顶点覆盖的问题相同- 王’。我们需要证明情况确实如此。

    假设在 G 中有一个大小为 k 的团。令团中的顶点集为 V’。这意味着 |V’| = k。在补图 G’ 中,让我们选择任意边 (u, v)。那么 u 或 v 中的至少一个必须在集合 V – V’ 中。这是因为,如果 u 和 v 都来自集合 V’,则边 (u, v) 将属于 V’,这又意味着边 (u, v) 在 G 中。这是不可能,因为 (u, v) 不在 G 中。因此,G’ 中的所有边都被集合 V – V’ 中的顶点覆盖。

    现在假设有一个大小为 |V| 的顶点覆盖 V” – 王’。这意味着 G’ 中的所有边都连接到 V” 中的某个顶点。因此,如果我们从 G’ 中选取任何边 (u, v),它们都不能在集合 V” 之外。这意味着,所有
    边 (u, v) 使得 u 和 v 都在集合 V” 之外,在 G 中,即这些边构成了大小为 k 的团。

因此,我们可以说在图 G 中存在一个大小为 k 的团当且仅当存在一个大小为 |V| 的顶点覆盖。 – k in G’,因此,团问题的任何实例都可以简化为顶点覆盖问题的实例。因此,顶点覆盖是 NP Hard。由于顶点覆盖同时属于 NP 和 NP Hard 类,因此它是 NP Complete。

要理解证明,请考虑以下示例图及其补充:

看 – 证明哈密顿路径是 NP 完全的