斯坦纳树问题
什么是斯坦纳树?
给定一个图和图中的一个顶点子集,斯坦纳树跨越给定的子集。斯坦纳树可能包含一些不在给定子集中但用于连接子集顶点的顶点。
给定的一组顶点称为终端顶点,用于构造施泰纳树的其他顶点称为施泰纳顶点。
施泰纳树问题是找到最小成本施泰纳树。请参阅下面的示例。
生成树与斯坦纳树
最小生成树是跨越所有顶点的最小权重树。
如果给定的子集(或终端)顶点等于斯坦纳树问题中所有顶点的集合,那么问题就变成了最小生成树问题。如果给定的子集只包含两个顶点,那么它是两个顶点之间的最短路径问题。
找出最小生成树是多项式时间可解的,但最小斯坦纳树问题是 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