📜  斯坦纳树问题

📅  最后修改于: 2022-05-13 01:57:54.488000             🧑  作者: Mango

斯坦纳树问题

什么是斯坦纳树?
给定一个图和图中的一个顶点子集,斯坦纳树跨越给定的子集。斯坦纳树可能包含一些不在给定子集中但用于连接子集顶点的顶点。

给定的一组顶点称为终端顶点,用于构造施泰纳树的其他顶点称为施泰纳顶点

施泰纳树问题
是找到最小成本施泰纳树。请参阅下面的示例。

施泰纳

生成树与斯坦纳树
最小生成树是跨越所有顶点的最小权重树。

如果给定的子集(或终端)顶点等于斯坦纳树问题中所有顶点的集合,那么问题就变成了最小生成树问题。如果给定的子集只包含两个顶点,那么它是两个顶点之间的最短路径问题。

找出最小生成树是多项式时间可解的,但最小斯坦纳树问题是 NP Hard,相关决策问题是 NP-Complete。

施泰纳树的应用
任务是最小化一些重要位置(如 VLSI 设计、计算机网络等)之间的连接成本的任何情况。

基于最短路径的近似算法
由于 Steiner Tree 问题是 NP-Hard 问题,因此没有多项式时间解决方案总是给出最优成本。因此,有一些近似算法可以解决相同的问题。下面是一种简单的近似算法。

1) Start with a subtree T consisting of 
   one given terminal vertex
2) While T does not span all terminals
   a) Select a terminal x not in T that is closest 
      to a vertex in T.
   b) Add to T the shortest path that connects x with T

上述算法是(2-2/n)近似的,即保证该算法产生的解不超过给定n个顶点的图的优化解的比例。还有更好的算法可以提供更好的比率。有关详细信息,请参阅以下参考。

参考:
www.cs.uu.nl/docs/vakken/an/teoud/an-steiner.ppt