【发布时间】:2014-11-18 02:18:38
【问题描述】:
我正在努力解决这个问题... 下面提到的是一种算法..我想通了..
输入图表 选择与所有其他节点匹配度最高的顶点。 移除在该节点上发生的边。 将选定的顶点及其边添加到集合 X。 返回 X
X 返回顶点覆盖所需的最小顶点集。这种方式是否正确...? 谢谢
【问题讨论】:
标签: algorithm greedy vertex-cover
我正在努力解决这个问题... 下面提到的是一种算法..我想通了..
输入图表 选择与所有其他节点匹配度最高的顶点。 移除在该节点上发生的边。 将选定的顶点及其边添加到集合 X。 返回 X
X 返回顶点覆盖所需的最小顶点集。这种方式是否正确...? 谢谢
【问题讨论】:
标签: algorithm greedy vertex-cover
选择度数最高的顶点并不能保证给出最佳解决方案。例如, 你有一棵有 7 个顶点的树,边的列表如下:
1 2 // (1,2) is connected.
1 3
1 4
2 5
3 6
4 7
最小顶点覆盖是{2,3,4},但是,根据你的贪心方法,你会先选择{1},然后你会选择至少3个顶点来覆盖左边的3条边。
确实,有一种贪心算法可以解决一棵树的顶点覆盖问题,即在每一步找到一个叶子(因为输入是一棵树,所以除非没有边,否则总是可以找到这样的叶子) ,然后选择顶点覆盖集X的叶子的邻居。返回X作为图为空时的最小顶点覆盖。当 E = V-1 时复杂度为 O(E),因此我们可以说它是一个线性解。
【讨论】: