斯坦纳树问题入门

斯坦纳树问题:

  • 给定一个连通图,图上的顶点分为两类: 必要顶点和斯坦纳顶点
  • 现在,你需要找到一棵边权值和最小的树,覆盖掉所有的必要顶点,这样一棵树就叫做斯坦纳树。

在解决这个问题前,我们来理解一些概念:

1.三角形不等式:

在图G中对任意相邻的三个顶点x,y,z之间三条边构成的三角形如果满足任意两边之和不小于第三边,则称图G是满足三角形不等式的

2.在满足三角形不等式的完全图上,如果用MST作为斯坦纳树的近似解,近似比不超过2:

  • 强调一下是完全图,所以下面不要问哈密顿回路的边是哪来的。

技巧1:要证明cost(MST)<=2OPT,不妨证明能够找到一个生成树T使得cost(T)<=2OPT,相当于一个不等式放缩策略。
技巧2:如何找到生成树。我们会根据OPT的解来巧妙地构造一个生成树,使得这颗生成树的代价能够与2OPT进行比较,下面几幅图就能说明问题:

a. 一颗斯坦纳树,实心点是必要顶点,空心点是斯坦纳顶点,虚线边暂时不看。

斯坦纳树问题入门
b. 随意选择一个顶点作为起点,对这颗斯坦纳树进行dfs,dfs的顺序就会对应上图虚线边上的一个欧拉回路(因为dfs只会把每条边访问两次,以来一去),我们随便画出一个dfs可能的路径:
斯坦纳树问题入门
c. 按照dfs访问节点的先后顺序,连接必要顶点,就能得到一个必要顶点上的哈密顿回路:
斯坦纳树问题入门
很显然,这个哈密顿回路上的每条边和上图的虚线边有不重叠的对应关系。由于满足三角形不等式,哈密顿回路上的每一条边是不大于与之对应的一部分欧拉回路边的。因此整个哈密顿回路的代价是不大于整个欧拉回路的代价的。而整个欧拉回路的代价是2OPT。我们在哈密顿回路上任意去掉一条边就能得到一个生成树T,因此cost(T)<=cost(哈密顿回路)<=cost(欧拉回路)=2OPT

3.图的度量闭包

为了把一般的图上的斯坦纳树问题转化为上述问题,我们就要引入图的度量闭包的概念。设图G=(V,E)的度量闭包为G’,这个图G’是一个完全图(其顶点集合和G一样是V,但是边集不一样),G’上的边(u,v)的值被定义为G中u-v的最短路代价。下面看个例子:

图G:
斯坦纳树问题入门
图G的度量闭包G’:
斯坦纳树问题入门
在求度量闭包的过程中,我们也能得到度量闭包G’ 中的边,比如(u,v),和原图G中一些边,即u到v的最短路,的一个对应关系,比如上例中就有如下对应关系:

  • e’1 <—> {e1}
  • e’2 <—> {e1,e4}
  • e’3 <—> {e1,e5}
  • …

图G的度量闭包G’是满足三角形不等式的

因为G’是完全图,且其中任意边都是原图中两端点的最短路,如果某两边之和大于第三边,就说明第三边不是最短路,因为可以被这两边取代且更短,矛盾。

斯坦纳树问题化为度量斯坦纳树问题

为了解决一般的斯坦纳树问题,我们可以先将图转化为其度量闭包,在度量闭包中利用最小生成树求出一个斯坦纳树近似解,然后按照边的对应关系,还原成原图G中的斯坦纳树近似解(还原后可能出现环,我们还可以删掉一些边,使得它成为一棵树)。

这样是能找到一个近似解了,但是我们怎么保证近似比呢?

这里有一个定理:在G’中斯坦纳树代价(记为OPT’)的值是不大于在G中斯坦纳树代价(记为OPT)的值的。简单解释就是因为G一定是G’的子图,并且G’中的边都还更小(如下图所示),所以G中斯坦纳树的代价一定大于等于G’中斯坦纳树代价的。所以大家自己整理一下大小关系就能发现该算法的近似比也是不大于2的了。

斯坦纳树问题入门

相关文章:

  • 2021-11-21
  • 2021-07-27
  • 2021-11-15
  • 2022-02-27
  • 2021-08-12
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-27
  • 2021-05-25
相关资源
相似解决方案