从顶点覆盖减少以证明NP完全

时间:2011-12-05 01:01:28

标签: algorithm graph graph-theory np-complete

我们将ROMAN-SUBSET定义为以下问题:

  

INPUT:有向图G =(V,E)和正整数k

     

输出:如果存在V的子集R,那么| R | < = k,和   这样G中的每个有向电路都包括至少一个顶点   从R开始,输出应该是" TRUE"否则,它应该是   " FALSE"

假设顶点覆盖(VC)问题是NP完全的,我必须证明ROMAN-SUBSET也是NP完全的。根据我的理解,这意味着接受VC输入,修改它,然后显示将其插入ROMAN-SUBSET算法将产生VC问题的结果。

我很难实现转型。我知道VC输入是图G和整数k,问题在于是否存在覆盖G中每个边的V的子集R,使得| R | < = k。很明显,R和k在ROM和VC之间是相似的,但我很难确定如何转换图形,以便每个有向周期(对于ROM)中的1个顶点对应于每个边缘(对于VC)。如何修改图形以证明VC可以简化为ROM?

谢谢!

1 个答案:

答案 0 :(得分:3)

这是建筑。

在VC中选择无向图G = (V, E)。 现在定义有向图G1 = (V, E1),对于(u,v)中的每个边E(u,v)中有两条边(v,u)E1

换句话说,新图形与旧图形相同,但每个无向边缘都被两个形成2个周期的有向边缘替换。

声明是G1上的ROM跟随G上的VC。

实际上,假设G1上ROM的答案是假的。然后,对于一组小于k个顶点的每个选择,都存在一个不在此集合中的循环。因此存在一个边缘,其端点不在集合中。但这意味着,对于k中小于G个顶点的集合的相同选择,存在一个边缘,其端点不在集合中,因此VC的答案为FALSE。

相反,假设G1上的ROM答案为TRUE。然后存在包含少于V个顶点的k的子集,因此在给定任何循环的情况下,循环中存在至少一个顶点,该顶点位于集合中。但这意味着,对于E中其中一个端点的任何边缘,因为E中的边对应E1中的2个周期。因此VC的答案是真的。