Skip to content

算法Algorithm

Christofides 算法

施工中 · 内容逐步修订

Christofides algorithm

用 MST、奇度点最小完美匹配和 Euler shortcut 构造 metric TSP 的 3/2 近似。

形式陈述 ​

算法步骤 ​

输入是在有限顶点集 V 上由度量 d 给出的完全加权图;因此边权非负、对称并满足三角不等式。为与简单图中的 Hamilton 回路一致,主算法取 |V|≥3;零个或一个城市返回零成本空行程,两个城市按访问后返回的 TSP 约定输出往返行程,成本为 2d(u,v)。先求一棵最小生成树 T,令 O 为 T 中奇度顶点的集合。握手定理保证 |O| 为偶数,在 O 的完全度量图上求最小权完美匹配 M。

把 T 与 M 的边按身份合并成多重图 H=T⊎M。每个 O 中顶点的度数增加一而变为偶数,其余顶点仍为偶数;T 又保证 H 连通,由全偶度连通多重图的 Euler 判定,H 存在Euler 回路。算法沿该回路行走,按顶点首次出现的次序跳过重复访问,最后回到起点,得到 Hamilton 回路 C。

从多重图恢复 Hamilton 回路 ​

遍历 Euler 回路时维护“已访问顶点”集合。若下一段会经过一个已访问顶点,就继续沿 Euler 回路前进,直到遇到下一个未访问顶点,再用完全图中的直达边连接;全部顶点首次出现后,直达起点闭合。每次 shortcut 都把一段度量路径替换为端点直达边,三角不等式保证新边费用不超过被替换路径的总费用。因此输出恰访问每个顶点一次,并且

w(C)≤w(H)=w(T)+w(M).

实现中的匹配只在奇点集合 O 的完全度量图上求,不是在原 MST 边集中寻找;后者可能根本没有完美匹配。T 与 M 若含端点相同的边,也必须作为两条独立边保留,否则顶点奇偶性会再次改变。

直觉

MST 已经用较低成本连通所有顶点,但连通并不保证能一笔走完所有边。奇度顶点正是 Euler 回路的障碍:给两个奇点之间加入一条匹配边,会同时翻转它们的度数奇偶性。奇点总数为偶数,所以完美匹配能一次修复全部障碍;选择最小权匹配,则把修复成本控制在最优旅行商回路的一半以内。

Euler 回路提供的是一条可能反复经过顶点的连通遍历。度量三角不等式允许把这些重复绕行剪成直达边而不涨价,于是“便宜连通骨架—奇偶修复—Euler 遍历—shortcut”四步分别解决连通性、可遍历性和每点恰访一次。

例子与边界

没有三角不等式时,跳过重复顶点可能显著增重,3/2 保证随即失效;一般非 metric TSP 不能套用本算法的近似证明。若输入是有限连通无向图且边权非负,可以先取全对最短路距离;含零边时得到的可能是伪度量,不同顶点距离可为零,但本页的非负性、对称性和三角不等式证明仍适用。在闭包上运行算法,再把直达边展开成原图路径,得到的是访问全部顶点的闭合游走,允许重复顶点和边,并对原图最短此类游走保留 3/2 界;这不保证原稀疏图存在 Hamilton 回路。图不连通时无法产生有限的全点闭包。无向原图若含负边,沿该边往返就会使最短游走成本无界下降,因而不能产生有限度量闭包。

T⊎M 是多重图,平行边不能去重。这里的 Euler 回路是“每条多重边恰走一次”的图论对象;它与树上把 DFS 进入、退出序列化的Euler tour 技巧只是同名对照,后者既不修复奇度,也不为 Christofides 提供所需回路。

推论与应用

3/2 近似保证 ​

按近似比比较算法回路与最优 metric TSP 回路,记最优值为 OPT。从最优 Hamilton 回路删除一条边会得到一棵生成树,因此

w(T)≤OPT.

按最优回路上的出现顺序连接奇点集合 O 中的相邻顶点,并对每段中间路径做 metric shortcut,可得到一个经过全部奇点的 cycle,其总权不超过 OPT。对 |V|≥3 的树,|O|≥2。当 |O|=2 时,这个闭合行程包含同一端点对的两份边,分别视为两条独立副本;一般偶数 |O| 时按环次序处理。因此其边可交替拆成两份完美匹配;两份总权不超过 OPT,所以较轻一份至多 OPT/2。算法选择最小权完美匹配,故

w(M)≤OPT2.

结合 MST、匹配与 shortcut 三个界,得到

w(C)≤w(T)+w(M)≤32OPT.

这条证明同时解释了三个条件为何不能省:MST 提供不超过最优值的连通骨架,最小完美匹配控制奇偶修复成本,度量性保证最后从 Euler 回路恢复 Hamilton 回路时不增加成本。

计算成本 ​

算法须调用精确的最小权完美匹配子程序;无权最大基数匹配并不能控制这里的修复成本。若完整距离矩阵显式给出,除 MST 与加权匹配的求解成本外,读取输入需 Θ(|V|2),而所得多重图只有 O(|V|) 条边。用边身份、邻接表与栈构造 Euler 回路并 shortcut 只需 O(|V|) 次基本操作。有限有理距离采用多项式时间的 MST 和一般图最小权完美匹配实现,就得到关于输入编码长度的多项式算法。

参考资料
  • Nicos Christofides, Worst-Case Analysis of a New Heuristic for the Travelling Salesman Problem, 1976.
  • David P. Williamson、David B. Shmoys,The Design of Approximation Algorithms,2011,§2.4,Theorem 2.13:奇点匹配、Euler 遍历与 shortcut 的完整证明。
关系图谱19 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具