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

Algorithm 构造覆盖特定顶点子集的最小生成树,algorithm,tree,graph-theory,graph-algorithm,Algorithm,Tree,Graph Theory,Graph Algorithm,我有一个无向,正边权图(V,E),我想要一个覆盖顶点V子集k的最小生成树(Steiner树问题) 我没有将生成树的大小限制为k个顶点;相反,我确切地知道MST中必须包含哪些k顶点 从整个MST开始,我可以缩减边/节点,直到得到包含所有k的最小MST 我可以使用Prim算法得到整个MST,并在子集k的MST未被破坏的情况下开始删除边/节点;或者,我可以使用Floyd Warshall获得所有对的最短路径,并以某种方式合并这些路径。有更好的方法来解决这个问题吗?在受限图(k,E')上运行Prim算法

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

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

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


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

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

你提到的问题是一个著名的NP难问题,叫做。多项式时间内没有已知的解,许多人认为不存在这样的解。

这里有很多困惑。根据OP的说法:

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

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

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

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

早期/简单近似算法

两种著名的方法是高桥方法和Kruskal方法(这两种方法都由Rayward Smith扩展/改进):

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

高桥的最短路径近似(由Rayward Smith修改)


Kruskal近似算法(经Rayward Smith修改)


现代/更先进的近似算法

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

  • 巴亚提,M.,博格斯,C.,布朗斯坦,A.,查耶斯,J.,拉美赞普尔,A.,泽奇纳,R.:斯坦纳树的统计力学。物理。牧师。莱特。101(3),037208(2008)15
  • 应用:最优子网络识别的Steiner树方法:一项实证研究。生物信息学。BMC生物信息学2013 30;14:144. Epub 2013年4月30日
在搜索引擎问题的背景下,这些方法关注的是可以在一定程度上预处理的超大数据集的效率

  • G.Bhalotia、A.Hulgeri、C.Nakhe、S.Chakrabarti和S.Sudarshan。使用银行在数据库中搜索和浏览关键字。在ICDE中,第431-440页
  • G.卡斯内基、M.拉马纳特、M.索齐奥、F.M.苏查内克和G.维库姆。星形:关系图中的Steiner树近似。2009年ICDE'09第868-879页

如果删除不需要的顶点,也可能会丢失连接相距较远的
k
顶点的中间边。例如,如果我有:
k--o--o--o--k
其中
o
表示一个不必要的顶点,
k
表示我需要的一个顶点,如果我删除中间的
o
将无法在我的
k
顶点之间构造MST,它不一定覆盖所有的顶点,只覆盖k中的顶点。至少包含所有
k
的MST,然后尽可能少地包含其他内容。您好,您能解决您的问题吗?如果可能的话,您能帮助处理伪代码吗?我也有类似的问题,但这个图没有加权。问题不清楚k是一个数字还是一个集合。请你澄清一下好吗?这在某些情况下可能会正常工作,但甚至不能保证E'是连接的——即使是连接的,也可以通过引入Steiner点(即不是k中的顶点)来节省任意多的距离。(如果距离服从三角形不等式,则小于“任意多”,但没有人说它们必须如此。)@j_random_hacker有兴趣发布替代解决方案吗?@user2398029:我对meh的答案投了赞成票(我不知道为什么“蜥蜴比尔”删除了adi早些时候的答案,说的基本上是一样的)。基本上这是一个NP难问题,需要优化求解;如果你用谷歌搜索“Steiner树近似”,你可能会得到一些好的算法。@user2398029:从adi的答案中查看此链接的第3章可能会有所帮助:。(我(重新)在这里发布,因为我可以看到已删除的帖子,但我不确定rep截止点是什么。)实际上,图中的Steiner树有一组固定的k个顶点作为输入,而OP只给出k,让算法找到该集。这个问题叫做NP难问题,也是NP难问题。另见维基百科。@Palec事实上,这是错误的。“我并没有将生成树的大小限制在k个顶点上;相反,我确切地知道MST中必须包含哪些k个顶点。”这个问题是Steiner树问题。另外,-1到@meh,因为这个问题是NP难的,这并不意味着我们不能用近似算法得到有用的解。这个答案无助于OP解决他的问题