我有一个无向的、正边权重图(V,E),我想要覆盖顶点子集k的最小生成树(史泰纳树问题)。
我不限制生成树的大小为k个顶点;相反,我知道需要在MST中准确地包含哪些k个顶点。
从整个MST开始,我可以逐渐缩减边和节点,直到得到包含所有k的最小MST。
我可以使用Prim算法获得整个MST,并开始删除边/节点,同时不破坏子集k的MST;或者我可以使用Floyd-Warshall获得所有顶点间的最短路径,然后将这些路径合并。有更好的方法来解决这个问题吗?
我有一个无向的、正边权重图(V,E),我想要覆盖顶点子集k的最小生成树(史泰纳树问题)。
我不限制生成树的大小为k个顶点;相反,我知道需要在MST中准确地包含哪些k个顶点。
从整个MST开始,我可以逐渐缩减边和节点,直到得到包含所有k的最小MST。
我可以使用Prim算法获得整个MST,并开始删除边/节点,同时不破坏子集k的MST;或者我可以使用Floyd-Warshall获得所有顶点间的最短路径,然后将这些路径合并。有更好的方法来解决这个问题吗?
这里存在很多混淆。根据发帖人所说:
我不会将生成树的大小限制为 k 个顶点;相反,我确切地知道在 MST 中必须包含哪些 k 个顶点。
这是图上斯坦纳树问题。 这不是 k-MST 问题。 斯坦纳树问题的定义如下:
给定加权图 G=(V,E),顶点集 S ⊆ V 和一个根 r ∈ V,我们要找到连接 S 中所有顶点到 r 的最小权重树。1
正如其他人提到的,这个问题是 NP-hard。因此,您可以使用近似算法。
早期/简单的近似算法
两种著名的方法是 Takahashi 的方法 和 Kruskal 的方法(都被 Rayward-Smith 扩展/改进):
Takahashi(经 Rayward-Smith 修改后的)最短路径近似
Kruskal(通过Rayward-Smith的修改)近似算法
现代/更高级的近似算法
在生物学中,最近的方法使用空穴方法来处理问题,导致了一种“修正置信传播”方法,对大数据集显示出较好的准确性:
在搜索引擎问题的背景下,方法侧重于对可以进行某种程度的预处理的非常大的数据集的效率。
您提出的问题是一个著名的NP难题,称为在图中的斯坦纳树问题。目前没有已知的多项式时间解决方案,并且许多人认为不存在这样的解决方案。
k
个顶点的中间边。例如,如果我有这样一条路径:k--o--o--o--k
,其中o
表示一个不必要的顶点,k
则代表一个我需要的顶点,如果我删除中间的o
,便没有办法构建出k
顶点之间的最小生成树。 - atpk
,然后尽可能少地包括其他节点。 - atp