使用Meet-in-the-Middle进行最小顶点覆盖

时间:2016-07-14 14:59:38

标签: algorithm computer-science graph-algorithm

我正在研究Meet-in-the-Middle算法,并找到了以下练习:

给定n个节点的图形(n <= 30),找出具有最小顶点数的集合,使得图形中的每个边缘在集合内具有至少一个节点。

我不知道该怎么做,只有我得到的提示是

  

复杂度O(3 ^(n / 2))

你可以解释这个想法吗?

1 个答案:

答案 0 :(得分:0)

从图表中取出边(u1, v1),删除与其共享顶点的所有边。取出另一个(u2, v2),...继续,直到图表的其余部分没有边缘。

你最终得到了许多顶点对

(u1, v1), (u2, v2), ..., (uk, vk)

其余的顶点是:

w1, w2, ..., wm

调用第一组顶点成对顶点,第二组不成对顶点。请注意,2k + m = n,原始图表中未配对的顶点之间没有边缘。

顶点封面中必须包含u1v1both。每对(uj, vj)有3种选择。考虑所有3^k方法将成对顶点包含在顶点覆盖中。

对于这些配置中的每一个,当且仅当至少一个邻居不在封面中时,才会将未配对的顶点wi包含在封面中(请注意每个wi& #39; s邻居是成对顶点,因此是否已知它们是已知的。

对于每个3^k选择的配对顶点,根据上述标准包含未配对的顶点,然后验证配对顶点之间的每个边都有一个来自封面的入射顶点,如果是,则它是候选人封面集。取一个最小尺寸的候选封面集作为输出。

上述算法的整体复杂性为O(3^(n/2)E),其中E是图表中边缘的数量。