找到未加权图中的最小顶点数

时间:2009-08-20 11:37:08

标签: algorithm math graph

我有一个无向加权连接图。如果我选择一个顶点,我会自动选择与其直接连接的所有顶点。什么算法,以便我能够使用最少的尝试次数选择图的所有顶点?在每次尝试中我选择一个顶点。例如,对于邻接矩阵a [] [] = {1,1,0,0,0,1,1,1,1,0,0,1,1,0,0 0,1,0,1,1 0,0,0,1,1}我必须选择顶点2和4或顶点2和5.

2 个答案:

答案 0 :(得分:4)

正如red tuna已经指出的那样,这是一种vertex cover问题。具体来说,这是一个dominating set问题,主要区别在于支配集可能比正确的顶点覆盖小得多。

您可以将其建模为set cover problem。每个顶点表示为包含其自身和所有相邻顶点的子集。如果您不需要保证精确的最佳解决方案(只是一个非常好的解决方案),则可以应用greedy set cover heuristic来实现 lg n 时间内的最佳设置的近似值。

答案 1 :(得分:2)

这似乎等同于vertex cover问题。这是NP完成。维基百科建议的算法之一是:

  

“一种有效的算法技术   这里称为有界搜索树   算法,其思路是   反复选择一些顶点和   递归分支,有两个案例   每一步:放置当前   顶点或其所有邻居进入   顶点覆盖。“

修改

这里有一个证据,即如果没有没有边缘的顶点,求解顶点覆盖将解决您的问题:

(*)顶点覆盖的解决方案也解决了你的问题

对于每个边,顶点覆盖选择至少一个端点。如果至少有一个边连接到每个顶点,则所有顶点最终都被选中(直接或通过相邻的直接选择的顶点),解决了这个问题。

请注意,converse不成立:

(*)解决问题的方法并不一定能解决顶点覆盖问题。

考虑这张图:

[ ] ----- [X]
 ¦         ¦
 ¦         ¦
[ ] ----- [X]

直接选择的节点标有“X”。此图解决了您所述的问题,但未覆盖最左边(因此这不是顶点覆盖解决方案)。