找回密码
 立即注册
查看: 414|回复: 0

优化2: 一般斯坦纳树问题的近似

[复制链接]
发表于 2022-3-30 14:49 | 显示全部楼层 |阅读模式
1. 近似度量斯坦纳树问题

在 优化1 中我们定义了度量斯坦纳树问题:
输入是一个点集 , 其中  是必要点集,  是可选点集, 同时我们还有一个对称距离函数  使得每条边的距离为非零值 . 最后, 还有一个额外的约束条件, 即  需要满足三角不等式:


在这个例子中,  被称为度量. 该问题的目标是找到树 , 其中  是包含所有必要点和可能包含一些可选点的任意点集 , 使得代价 最小. 优化1的最后 我们讨论了一种完全无视  中可选点的算法, 该算法找到具有 必要点集  和由  定义的边权重 的加权图的最小生成树 (spanning tree)  .
现在让我们证明这一算法是2-approximate, 也就是, 它可以找到最多2倍最优解代价的解.
引理 1 令为度量斯坦纳树问题的一个实例, 并且  是具有  性质的斯坦纳树. 则存在另一树 覆盖了  中的顶点, 并且只有  中的顶点使得 .
特别是将该引理应用于最优斯坦纳树, 我们可以发现存在  的生成树, 其成本至多是最优斯坦纳树成本的2倍.
证明 1 考虑使用深度优先搜索 (Depth-First-Search, DFS) 来遍历树 , 也就是, 一个序列:


按照在DFS期间考虑它们的顺序, 列出  的顶点, 包括每次递归调用结束时我们返回的一个顶点. 该序列描述了  元素的循环, 其总长度是 恰好是 , 因为这一循环恰好使用这个树的每条边2次.
现在令  为从  获取的序列 (通过移除  中顶点和保留只在  中第一次出现的顶点). 那么  包含  中所有顶点的路径, 当然此序列中也没有其他顶点, 且它的代价 最多 是循环  的代价 (这儿我们需要用到三角不等式), 那么我们可以得到  的代价最多为 . 注意  是个路径, 也是个树, 因此我们可以将  视作树 , 其中 是边集 .
举个例子, 如果我们有一个实例: , 距离函数  对存在连接的两点的边赋值1的距离, 如果两点间不存在连接, 则我们赋值2的距离.


下图是一斯坦纳树, 其代价为8:


我们使用 证明 1 中的论证来证明存在一个成本最多为16的  的生成树. 而且事实上我们可以做得更好:
首先我们以DFS遍历 , 也就是如下顺序:


如果我们将它视作一个从  开始, 并在遍历所有顶点后返回  的循环, 一些顶点访问了不止一次, 那么这个循环有代价16, 因为每条边都需要使用两次.
现在如果我们仍以DFS遍历, 但跳过所有的可选点和之前访问过的点, 那么我们会得到一个只访问所有必要点的顺序, 也就是:





代价为10

因为这条路径是通过 "裁剪" 一条成本最多为  2倍的路径获得的, 并且因为我们有三角不等式, 所以我们找到的路径也最多是  代价的2倍.
引理 1 中的因子2是 不能进一步提升的, 因为存在代价较高的度量斯坦纳树问题的实例, 其中   的最小生成树的代价接近最小斯坦纳树代价的2倍. 举个例子, 考虑如下实例:




也就是所有必要点间的距离都是2, 但是他们对于另一端点为可选点的距离为1. 则最小斯坦纳树会有 作为根, 节点 作为树叶. 该树的代价为  , 但  的最小生成树代价为 , 因为最小生成树有  个节点, 条边, 每条边代价是2.
2. 度量 vs 一般 斯坦纳树问题

一般斯坦纳树问题与度量斯坦纳树问题相似, 但我们允许任意的距离函数. 在这个情况中,  的最小生成树 不再 能够给出不错的近似解. 比如这个极端实例:




则  的最小生成树有代价 然而最小斯坦纳树的代价是2. 但是可以证明我们的度量斯坦纳树问题的2-approximate算法可以通过一些谨慎的方式转换为一般斯坦纳树问题的2-approximate算法.
引理 2 对每个 , 若存在一个可以在多项式时间内求解度量斯坦纳树问题的-approximate算法, 则同样存在一个可以在多项式时间内求解一般斯坦纳树问题的-approximate算法.
证明 2 假设我们有一个多项式时间的-approximate算法  来求解度量斯坦纳树问题, 并且我们的输入为一般斯坦纳树问题的一个实例: . 我们将展示如何在多项式时间内找到一个-approximate的解.
对于每两点 , 令  为加权图 ( 顶点集合 , 权重  ) 中从  到  的最短路径长度 (注意不是代价!). 需要注意  是满足三角不等式的函数, 因为在一个图中, 对于每三个点 , 从  到  的最短路径长度一定不能超过  到  的最短路径长度加上  到  的最短路径长度. 这使得 是度量斯坦纳树问题的一个实例, 且我们可以应用  来找到树 , 它的代价为:


注意, 对于每对点, , 如此, 若 是原始输入 的最优树, 则我们有:


结合上述两式, 可得:


现在, 从  出发, 我们根据  将每条边 代替为从  到  的最短路径来构造图 . 我们有:


我们有不等式而不是等式的原因是  的某些边可能属于多个最短路径, 所以在左边只数一次. 最后, 根据权重  获取  的生成树 . 现在树  是一个合格的斯坦纳树, 我们有:


3. 旅行商问题 (Traveling Salesman Problem, TSP)

在旅行商问题中, 我们的输入是一个点集  和一个对称距离函数 . 这个问题的目标是找到一个能够访问所有  中的节点的循环, 且总距离尽可能短.
例如, 一个司机在机场接了7名乘客, 司机需要把他们送到家并返回机场, 这就构成了一个TSP的实例, 其中  包含8个节点 (7个乘客住址和1个机场地址) 和距离函数 (或者我们可以理解成两个地点间的开车时间). 再例如, 一个DHL货车司机要进行一系列的货物配送, 然后返回仓库, 他也会遇到类似的问题. 事实上TSP是许多具体问题的基本模型, 它是组合优化中研究最多的问题之一.
我们可以区分四种TSP的版本. 一个区别是我们是否使用度量, 其中我们将限制输入中的  满足三角不等式; 或者使用任意的  的一般版本. 另一个区别是我们是否想在循环中至少访问每个节点一次, 或者说我们是否在找每个节点都恰好只访问一次解.
可以被证明, 除非 , 否则对于一般无重复的TSP, 是没有可行的近似算法的.
在 优化3 中我们将展示其他的三种版本 (无重复的度量TSP, 有重复的一般TSP和有重复的度量TSP) 从近似的角度看都是等价的.
4. 习题1

已知一无向图 . 目标是移除最小数量的边使得剩下的图不包含三角形, 也就是没有没有三个顶点的集合 使得边 都在剩余的图中. 提供一个能在多项式时间内运行的3-approximate算法.
4.1. 思路

基本的思路是重复在图  中寻找三角形, 并从那个三角形移除所有的边. 因为任何最优算法都必须从三角形移除至少一条边, 那么我们也必然可以得到3-approximate算法.
4.2. 算法描述

首先, 我们需要一个子路径去寻找图  中的一个三角形. 假设图以邻接矩阵的形式存储, 我们考虑一个简单算法, 它检查三个节点 的每个 组合, 并检查是否有边与它们相连. 这种方式是的算法需要 的时间复杂度去找到一个三角形 (或者汇报没有三角形). 进一步优化也是可能的.
第二步, 这个算法进行如下运算:

  • while ( 图中存在任意三角形 ):

    • 为  中的一个三角形
    • 从  中移除边

4.3. 为什么该算法可行

首先, 易知当算法结束时, 不会存在三角形. 则我们仅需证明为什么该算法是3-approximate算法.
定义  的一个 三角形集合 包含不相交的三角形, 也就是没有共边的三角形 (但是可以共顶点). 注意该算法会生成一个三角形集合, 因为在每次迭代之后, 它都会从图中删除 前一个三角形的所有边. 另外, 若我们表示该算法生成的三角形集合为 , 则被该算法移除的边的数量为 .
令  为要从图  中移除的最优边集 (以保证  中没有三角形). 注意对于任意的三角形集合 , 我们都可以得到 , 因为  必须 至少 移除  中的每个三角形的一条边. 因此我们可以得出结论, 被上述算法移除的边的数量是 , 所以这个算法是3-approximate算法.
<hr/>原文链接

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 15:34 , Processed in 0.149497 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表