我有一个无向的正边权重图(V,E),为此我想要一个最小的生成树,该生成树覆盖顶点V的子集k(Steiner树问题)。
我不将生成树的大小限制为k个顶点;我确切地知道MST中必须包括哪些k个顶点。
从整个MST开始,我可以削减边缘/节点,直到获得包含所有k的最小MST。
我可以使用Prim的算法来获取整个MST,并在不破坏子集k的MST的同时开始删除边/节点。或者,我可以使用Floyd-Warshall获得所有对的最短路径,并以某种方式合并路径。有更好的方法来解决这个问题吗?
最佳答案
这里有很多困惑。根据操作说明:
这是图形上的Steiner树问题。 这不是k-MST问题。 Steiner树问题的定义如下:
正如其他人提到的那样,这个问题很难解决。因此,您可以使用一种近似算法。
早期/简单近似算法
两种著名的方法是 Takahashi的方法和的Kruskal的方法(这两种方法均已由Rayward-Smith扩展/改进):
高桥最短路径近似(由雷沃德·史密斯修改)
Kruskal的近似算法(由Rayward-Smith修改)
现代/更多高级近似算法
在生物学中,最近的方法使用腔方法解决了该问题,这导致了“修改后的信念传播”方法,该方法在大数据集上显示出良好的准确性:
在搜索引擎问题的背景下,方法集中于可在某种程度上进行预处理的非常大的数据集的效率。
关于algorithm - 构造覆盖特定顶点子集的最小生成树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7685291/