构建覆盖特定顶点子集的最小生成树

Posted

技术标签:

【中文标题】构建覆盖特定顶点子集的最小生成树【英文标题】:Construct a minimum spanning tree covering a specific subset of the vertices 【发布时间】:2011-10-07 09:21:43 【问题描述】:

我有一个无向的正边权重图 (V,E),我想要一个覆盖顶点子集 k 的最小生成树 V(施泰纳树问题)。

我没有将生成树的大小限制为 k 个顶点;相反,我确切地知道 哪些 k 个顶点必须包含在 MST 中。

从整个 MST 开始,我可以减少边/节点,直到获得包含所有 k 的最小 MST。

我可以使用 Prim 算法得到整个 MST,并在子集 k 的 MST 没有被破坏的情况下开始删除边/节点;或者,我可以使用 Floyd-Warshall 来获得所有对的最短路径并以某种方式合并这些路径。有没有更好的方法来解决这个问题?

【问题讨论】:

如果我删除不需要的顶点,我可能还会丢失连接相距很远的k 顶点的中间边。例如,如果我有:k--o--o--o--k 其中o 表示不必要的顶点,k 表示我需要的顶点,如果我删除了中间的o,则无法在我的k 顶点之间构造 MST。 所以你对最小生成树感兴趣,它不一定跨越所有顶点,只跨越 k 中的顶点? 没错。至少包含所有 k 的 MST,然后尽可能少地包含其他内容。 您好,您能解决您的问题吗?如果可能的话,你能帮忙处理伪代码/代码吗?我有类似的问题,但图表未加权。 这个问题不清楚k是数字还是集合。你能澄清一下吗? 【参考方案1】:

这里有很多混乱。根据OP所说的:

我并没有将生成树的大小限制为 k 个顶点;相反,我确切地知道哪些 k 个顶点必须包含在 MST 中。

这是图上的 Steiner 树问题。 这不是 k-MST 问题。 Steiner 树问题是这样定义的:

给定一个加权图 G = (V, E),一个子集 S ⊆ V 的顶点, 和一个根 r ∈ V ,我们想找到一个最小权重树,它将 S 中的所有顶点连接到 河。 1

正如其他人所提到的,这个问题是 NP-hard。因此,您可以使用近似算法。

早期/简单近似算法

两个著名的方法是Takahashi 方法Kruskal 方法(两者都已被 Rayward-Smith 扩展/改进):

Takahashi H, Matsuyama A:图中 Steiner 问题的近似解。数学。日本 1980 年,24:573–577。 Kruskal JB:关于图的最短生成子树和旅行商问题。在美国数学学会会刊,第 7 卷。 1956:48–50。 Rayward-Smith VJ,Clare A:关于寻找 Steiner 顶点。网络 1986,16:283–294。

Takahashi 的最短路径逼近(Rayward-Smith 修改)


Kruskal 的近似算法(由 Rayward-Smith 修改)


现代/更高级的近似算法

在生物学中,最近的方法使用空腔方法来处理该问题,这导致了一种“修正的信念传播”方法,该方法在大型数据集上显示出良好的准确性:

Bayati, M.、Borgs, C.、Braunstein, A.、Chayes, J.、Ramezanpour, A.、Zecchina, R.:斯坦纳树的统计力学。物理。牧师莱特。 101(3),037208(2008)15。 对于应用程序:用于最佳子网络识别的施泰纳树方法:一项实证研究。 BMC 生物信息学。 BMC 生物信息学 2013 30;14:144。 Epub 2013 年 4 月 30 日。

在搜索引擎问题的背景下,方法侧重于在一定程度上可以预处理的超大型数据集的效率。

G. Bhalotia、A. Hulgeri、C. Nakhe、S. Chakrabarti 和 S. Sudarshan。使用BANKS在数据库中进行关键字搜索和浏览。 ICDE,第 431-440 页。 G. Kasneci、M. Ramanath、M. Sozio、F. M. Suchanek 和 G. Weikum。 STAR:关系图中的斯坦纳树近似。在 ICDE'09,第 868-879 页,2009 年

【讨论】:

非常感谢您。这篇文章让我在 SteinerNet 包中找到了一个不错的 R 实现【参考方案2】:

你所说的问题是一个著名的 NP-hard 问题,称为Steiner tree in graphs。多项式时间内没有已知的解决方案,许多人认为不存在这样的解决方案。

【讨论】:

实际上,图中的 Steiner 树有一组固定的 k 个顶点作为输入,而 OP 只给出 k 并让算法找到集。这个问题称为k-MST,也是NP-hard。参见***上的problems related to MST。 @Palec 实际上,这是错误的。 “我没有将生成树的大小限制为 k 个顶点;而是我确切地知道哪些 k 个顶点必须包含在 MST 中。”这个问题施泰纳树问题。 另外,-1 到 @meh,因为问题是 NP-hard 的事实并不意味着我们无法通过近似算法获得有用的解决方案。这个答案无助于 OP 解决他的问题。【参考方案3】:

在受限图 (k, E') 上运行 Prim 算法,其中 E' = (x, y) ∈ V : xkyk)。构建该图需要 O(|E|)。

【讨论】:

这在某些时候可能会正常工作,但甚至不能保证 E' 已连接 - 即使是这样,也可以通过引入 Steiner 点来节省任意多的距离(即,不在 k 中的顶点)。 (如果距离服从三角不等式,则小于“任意多”,但没有任何说法必须这样做。) @j_random_hacker 有兴趣发布替代解决方案吗? @user2398029:我赞成 meh 的回答(我不知道为什么“Bill the Lizard”删除了 adi 更早的回答,说的基本相同)。基本上这是一个 NP-hard 问题,需要优化解决;如果你谷歌“施泰纳树近似”,你可能会得到一些好的算法。 @user2398029:从 adi 的回答中查看此链接的第 3 章可能会有所帮助:cc.gatech.edu/fac/Vijay.Vazirani/book.pdf。 (我(重新)在此处发布此内容,因为我可以看到已删除的帖子,但我不确定代表截止日期是什么。)

以上是关于构建覆盖特定顶点子集的最小生成树的主要内容,如果未能解决你的问题,请参考以下文章

最小生成树

图——最小生成树

算法 - 最小生成树

最小生成树

#图# #最小生成树# #kruskal# ----- 丛林中的路

DS图—最小生成树