我有一个无向加权连接图。如果我选择一个顶点,我会自动选择与其直接连接的所有顶点。什么算法,以便我能够使用最少的尝试次数选择图的所有顶点?在每次尝试中我选择一个顶点。例如,对于邻接矩阵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.
答案 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”。此图解决了您所述的问题,但未覆盖最左边(因此这不是顶点覆盖解决方案)。