相关笔记

概览

本节深入探讨两个经典的NP困难优化问题——旅行商问题(TSP)集合覆盖问题——的近似算法设计。对于满足三角不等式的度量TSP(Metric TSP),我们给出基于最小生成树的2-近似算法和基于最小权完美匹配的Christofides 1.5-近似算法,并完整推导近似比证明。对于一般TSP,我们通过从哈密顿回路问题的归约证明其不可近似性。对于集合覆盖问题,我们设计贪心算法并利用费用分摊论证(charging argument)严格证明其 -近似比,其中 为第 调和数。这两个问题展示了近似算法设计的两种核心范式:结构化利用问题特有性质(三角不等式)与贪心策略的系统性分析。

知识结构总览

flowchart TD
    TSP["旅行商问题 TSP"]
    TSP_DECISION["TSP 判定版本<br/>NP完全"]
    TSP_GENERAL["一般TSP<br/>不可近似"]
    TSP_METRIC["度量TSP<br/>满足三角不等式"]
    TSP_MST["MST + DFS 前序遍历<br/>2-近似算法"]
    TSP_CHRISTOFIDES["Christofides 算法<br/>MST + 最小权完美匹配<br/>1.5-近似"]

    SET_COVER["集合覆盖问题"]
    SET_COVER_RELATION["与顶点覆盖的关系<br/>顶点覆盖 ⊂ 集合覆盖"]
    SET_COVER_GREEDY["贪心算法<br/>选性价比最高的集合"]
    SET_COVER_PROOF["费用分摊证明<br/>H(n)-近似比"]

    TSP --> TSP_DECISION
    TSP_DECISION -->|"HAM-CYCLE ≤ₚ TSP"| TSP_GENERAL
    TSP --> TSP_METRIC
    TSP_METRIC --> TSP_MST
    TSP_METRIC --> TSP_CHRISTOFIDES
    TSP_MST -->|"w(H) ≤ 2w(H*)"| APPROX_2["近似比 ρ = 2"]
    TSP_CHRISTOFIDES -->|"w(H) ≤ 3/2 · w(H*)"| APPROX_15["近似比 ρ = 3/2"]

    SET_COVER --> SET_COVER_RELATION
    SET_COVER --> SET_COVER_GREEDY
    SET_COVER_GREEDY --> SET_COVER_PROOF
    SET_COVER_PROOF -->|"w(C) ≤ H(n) · w(C*)"| APPROX_LN["近似比 ρ = H(n) ≤ ln n + 1"]

    style TSP fill:#e74c3c,color:#fff,stroke:#c0392b
    style TSP_GENERAL fill:#c0392b,color:#fff,stroke:#922b21
    style TSP_METRIC fill:#2980b9,color:#fff,stroke:#2471a3
    style TSP_MST fill:#27ae60,color:#fff,stroke:#229954
    style TSP_CHRISTOFIDES fill:#16a085,color:#fff,stroke:#138d75
    style SET_COVER fill:#8e44ad,color:#fff,stroke:#7d3c98
    style SET_COVER_GREEDY fill:#f39c12,color:#fff,stroke:#e67e22
    style SET_COVER_PROOF fill:#d35400,color:#fff,stroke:#a04000
    style APPROX_2 fill:#27ae60,color:#fff,stroke:#229954
    style APPROX_15 fill:#16a085,color:#fff,stroke:#138d75
    style APPROX_LN fill:#d35400,color:#fff,stroke:#a04000

核心思想

35.2 旅行商问题(TSP)

问题定义

旅行商问题(Traveling Salesman Problem, TSP) 是组合优化中最著名的问题之一。其形式化定义如下:

  • 输入:一个完全图 ,其中 ,以及一个边权函数 (正整数权重)
  • 输出:一条经过 中所有顶点恰好一次回到起点哈密顿回路 ,使得 的总权重最小

用数学语言表述,TSP 要求找到顶点的一个排列 ,使得

其中 的一个排列。

生活化类比:想象一个快递员需要从仓库出发,把包裹送到 个不同的客户地址,每个客户恰好送一次,最后回到仓库。城市之间的道路距离就是边权,快递员要找到总路程最短的路线。这就是TSP的直观含义。

NP完全性分析

TSP的判定版本(是否存在总权重不超过 的哈密顿回路)是NP完全的。CLRS在第34章中已经给出了归约:

归约构造(回顾):

给定一个无向图 的哈密顿回路判定实例,构造TSP实例如下:

  1. 构造完全图 ,其中 (所有可能的边)
  2. 定义边权函数:

正确性论证

  • 充分性 有哈密顿回路 有权重 的TSP回路):若 存在哈密顿回路 ,则 使用了 条边,每条边的权重为 ,因此

  • 必要性 有权重 的TSP回路 有哈密顿回路):若 存在权重 的回路 ,由于 恰好包含 条边,而每条边的权重至少为 ,因此 中每条边的权重必须恰好为 。这意味着 中每条边都属于 ,所以 就是 中的一条哈密顿回路。

这个归约可以在 时间内完成,因此是多项式时间归约。

三角不等式与度量TSP

由于一般TSP是NP困难的,我们无法在多项式时间内找到精确解(除非P=NP)。然而,如果对边权函数施加额外约束——三角不等式——就可以设计出有保证的近似算法。

定义(三角不等式):对于完全图 上的边权函数 ,若对所有 ,满足

则称 满足三角不等式

满足三角不等式的TSP称为度量TSP(Metric TSP)

为什么三角不等式如此重要? 三角不等式意味着”直达”永远不比”绕路”更远。这个性质在很多实际场景中自然成立:

  • 欧几里得距离:平面上两点之间的直线距离满足三角不等式(三角形的两边之和大于第三边)
  • 曼哈顿距离:城市网格中的出租车距离满足三角不等式
  • 道路网络距离:实际道路距离通常满足三角不等式(虽然有时由于单行道等因素可能不严格满足)

不满足三角不等式的例子:考虑机票价格——从北京飞上海可能比从北京飞广州再飞上海更贵(因为直飞航线需求大),此时机票价格就不满足三角不等式。

MST + DFS 前序遍历:2-近似算法

这是度量TSP最经典的近似算法,由多种来源独立发现(Rosenkrantz, Stearns, Lewis 1977; Serdyukov 1978)。

算法描述

APPROX-TSP-TOUR(G, w)
  1  选取任意顶点 r ∈ V 作为根
  2  用 Prim 算法(或 Kruskal 算法)构造以 r 为根的最小生成树 T
  3  对 T 进行前序遍历,得到顶点序列 L
  4  令 H 为按 L 中顶点顺序访问的哈密顿回路
  5  return H

逐步执行示例

考虑一个包含5个顶点的完全图,边权满足三角不等式。设顶点集为 ,边权如下:

权重权重权重
(a,b)2(a,c)3(a,d)5
(a,e)7(b,c)4(b,d)6
(b,e)8(c,d)2(c,e)5
(d,e)3

步骤1:选取 作为根。

步骤2:用Prim算法构造最小生成树

Prim算法执行过程:

  • 开始,
  • 距离最近的未加入顶点:(距离 ),加入
  • 距离最近的未加入顶点:(从 距离 ,从 距离 ),加入
  • 距离最近的未加入顶点:(从 距离 ),加入
  • 距离最近的未加入顶点:(从 距离 ),加入

最小生成树 的边为:,总权重

步骤3:对 进行前序遍历。

为根的前序遍历:

得到顶点序列

步骤4:按 的顺序构造哈密顿回路

总权重:

2-近似比的完整证明

定理:对于满足三角不等式的TSP实例,APPROX-TSP-TOUR 是一个近似比为2的多项式时间近似算法。

证明(逐步推导):

为最优TSP回路(即权重最小的哈密顿回路), 为算法构造的最小生成树, 为对 进行完整DFS遍历得到的行走路径(walk)(即每条树边被遍历两次), 为算法输出的哈密顿回路。

引理1

证明:从 中删除任意一条边,得到一条生成树 (因为 是包含所有顶点的回路,删除一条边后仍然连通且无环,故为生成树)。由于 是最小生成树,有

去掉一条边得到的,因此 ,其中 是被删除的边。由于所有边权为正(),有 ,因此

结合 ,得到

,当然也有

引理2

证明 是对 进行完整DFS遍历得到的行走路径。在DFS遍历中,每条树边恰好被经过两次(一次向下访问子节点,一次向上回溯)。因此

引理3:利用三角不等式,可以从 得到哈密顿回路 ,且

证明 是一个可能多次访问某些顶点的行走路径(因为DFS回溯会重复经过顶点)。我们从 中按访问顺序提取顶点序列,去除重复出现的顶点(只保留第一次出现的位置),得到哈密顿回路

具体地,设 的顶点访问序列为 (一棵有 个顶点的树有 条边,DFS遍历经过每条边两次,共访问 个顶点)。 的顶点序列是 去重后的结果。

关键观察: 中任意两个连续顶点 (在 中它们之间可能经过其他顶点),由于三角不等式:

中直接连接的边权不超过 中对应路径的边权之和。将 中所有边逐一与 中的对应子路径比较,累加得到

综合三个引理,完成定理证明

因此 ,即近似比

算法复杂度分析

  • Prim算法构造MST:(完全图有 条边)
  • DFS前序遍历:
  • 构造哈密顿回路:
  • 总时间复杂度:

Christofides 算法:1.5-近似

Christofides算法(1976年,独立由Serdyukov于1978年发现)将度量TSP的近似比从2改进到1.5,这是该领域近40年来最好的结果,直到2020年才被Karlin, Klein和Oveis Gharan首次突破。

算法描述

CHRISTOFIDES(G, w)
  1  选取任意顶点 r ∈ V 作为根
  2  用 Prim 算法构造最小生成树 T
  3  令 O 为 T 中度数为奇数的顶点集合
  4  在 O 上求最小权完美匹配 M
  5  将 T 和 M 的边合并,得到多重图 H' = T ∪ M
  6  在 H' 中找欧拉回路(因为 H' 中所有顶点度数均为偶数)
  7  利用三角不等式,将欧拉回路 shortcut 为哈密顿回路 H
  8  return H

关键步骤详解

步骤3:找奇数度顶点。在任何图中,度数为奇数的顶点个数一定是偶数(握手引理:,因此奇数度顶点的个数必须是偶数)。设 ,则 为偶数。

步骤4:最小权完美匹配。在完全图 的顶点子集 上求最小权完美匹配 。由于 为偶数,完美匹配一定存在。最小权完美匹配可以在 时间内求出(使用Edmonds的”花算法”的加权版本)。

步骤5-6:构造欧拉回路。将 合并得到多重图 。对于 中每个顶点

  • ,则 为偶数,,故 为偶数
  • ,则 为奇数,(匹配中每个顶点恰好关联一条匹配边),故 为偶数

因此 中所有顶点的度数都是偶数,且 连通(因为 连通),所以 存在欧拉回路

步骤7:Shortcut。利用三角不等式,将欧拉回路中重复出现的顶点跳过(与2-近似算法中的shortcut相同),得到哈密顿回路

Christofides 算法近似比证明

定理:对于满足三角不等式的TSP实例,Christofides算法是一个近似比为3/2的多项式时间近似算法。

证明(逐步推导):

为最优TSP回路, 为最小生成树, 为奇数度顶点上的最小权完美匹配, 为算法输出的哈密顿回路。

引理4

证明:考虑最优TSP回路 。从 中删除 之外的所有顶点(即只保留 中的顶点), 被分割成若干条路径。由于 是一个回路,删除某些顶点后, 中每个顶点在剩余路径中的度数恰好为

更精确地说, 限制在 上的子图由若干条不相交的路径组成(可能还有环),每条路径连接 中的两个顶点。这些路径的端点(度数为1的顶点)恰好是 中的所有顶点(因为 中每个顶点度数为2,删除非 顶点后, 中顶点的度数变为 ——实际上,由于 是回路, 中顶点在限制子图中的度数之和等于 ,且每个顶点度数为 ,但 是偶数,度数为 的顶点成对出现,度数为 的也成对出现…)

让我们换一个更清晰的论证方式:

是一个经过所有顶点的回路。考虑 上的”投影”:沿着 走,只记录属于 的顶点,得到一个 中顶点的序列。由于 是回路,这个序列首尾相接。在这个序列中,相邻的 顶点之间由 中的一条路径连接。

利用三角不等式,每对相邻 顶点之间的直接连接权重不超过 中对应路径的权重。因此,如果我们取 上投影后得到的边(相邻 顶点之间的直接边),这些边构成 上的一个完美匹配超集(实际上是一个2-正则子图,即若干不相交的圈的并集)。

从一个2-正则子图中,我们可以提取出一个完美匹配(每个圈取交替的边),其总权重不超过原2-正则子图的总权重。而原2-正则子图的总权重不超过 (由三角不等式)。因此

这是因为2-正则子图的总权重不超过 ,而从中取一半的边(完美匹配),权重不超过一半。

综合证明

其中第一个不等式是因为 通过shortcut从 的欧拉回路得到,由三角不等式,。第二个不等式分别使用了引理1()和引理4()。

算法复杂度分析

  • Prim算法构造MST:
  • 找奇数度顶点:
  • 最小权完美匹配:
  • 求欧拉回路:
  • Shortcut:
  • 总时间复杂度:

一般TSP的不可近似性

定理:除非 ,对于一般TSP(不要求三角不等式),不存在任何常数近似比的多项式时间近似算法。

证明思路(通过从HAM-CYCLE归约):

假设存在一个近似比为 的多项式时间近似算法 。我们用 来解决HAM-CYCLE问题:

  1. 给定HAM-CYCLE实例
  2. 构造TSP实例(与NP完全性归约相同):
    • 完全图
    • ,否则
  3. 用算法 求解TSP实例,得到回路 ,权重
  4. ,则 中所有边权重为1,对应 中的哈密顿回路,回答”是”
  5. ,则 中不存在哈密顿回路,回答”否”

关键分析:若 存在哈密顿回路,则最优TSP回路权重为 ;若 不存在哈密顿回路,则任何TSP回路至少包含一条权重为2的边,因此最优TSP回路权重

若算法 的近似比为 ,则:

  • 存在哈密顿回路时:
  • 不存在哈密顿回路时:

要区分这两种情况,需要 ,即 。当 足够大时, 任意小,因此 必须小于任意大于1的常数。这意味着不存在常数近似比的多项式时间近似算法。

更严格地说,对于任意 ,当 时,,此时无法区分两种情况。因此,除非 ,对一般TSP不存在近似比为 的多项式时间近似算法(对任意常数 )。


35.3 集合覆盖问题

问题定义

集合覆盖问题(Set Cover Problem) 是另一个经典的NP困难优化问题,在资源分配、设施选址、数据库查询优化等领域有广泛应用。

  • 输入
    • 一个有限全集
    • 一个子集族 ,其中每个
    • 一个权重函数 (每个子集有一个非负权重)
  • 输出:一个子覆盖 ,使得 ,且总权重 最小

特殊情形——无权集合覆盖:当所有 时,问题简化为找覆盖 所需的最少集合个数。

生活化类比:假设你是一个消防站站长,城市有 个区域需要消防覆盖,有 个可选的消防站位置,每个消防站可以覆盖一定范围的区域,建设每个消防站的费用不同。你要选择最少的消防站(或总费用最低的消防站组合),使得所有区域都被覆盖。这就是集合覆盖问题。

与顶点覆盖的关系

顶点覆盖是集合覆盖的特例。回顾顶点覆盖问题

  • 给定无向图 ,找最小顶点子集 ,使得 的每条边至少有一个端点在

将顶点覆盖转化为集合覆盖:

  • 全集 (所有边)
  • 对每个顶点 ,定义集合 (即 覆盖的所有边)
  • 子集族

的顶点覆盖恰好对应 中覆盖 的子集族。因此,顶点覆盖 集合覆盖。

这个关系说明:集合覆盖至少和顶点覆盖一样难。顶点覆盖有2-近似算法,但集合覆盖的贪心算法只能保证 -近似比( 可以远大于2),这反映了集合覆盖是比顶点覆盖更一般、更困难的问题。

贪心算法

集合覆盖的贪心算法思想简单而自然:每一步选择”性价比最高”的集合——即单位权重能覆盖最多未覆盖元素的集合。

算法伪代码

GREEDY-SET-COVER(U, S, w)
  1  C ← ∅
  2  U' ← U
  3  while U' ≠ ∅ do
  4      对每个 S ∈ S \ C,计算 cost(S) = w(S) / |S ∩ U'|
  5      选 S* ∈ S \ C 使 cost(S*) 最小
  6      C ← C ∪ {S*}
  7      U' ← U' \ S*
  8  return C

逐步执行示例

,所有集合权重为 (无权情形):

迭代1

  • ,cost =
  • ,cost =
  • ,cost =
  • ,cost =

选择 (或 ,平局时任选)。假设选

迭代2

  • ,已选
  • ,cost =
  • ,cost =
  • ,cost =

选择

结果:贪心解 ,总权重

最优解(权重3)或 (权重3)。最优解也是 ,权重为2。此例中贪心解恰好等于最优解。

调和数

在证明贪心算法的近似比之前,先回顾**调和数(Harmonic Number)**的定义:

引理

证明:利用积分对调和数进行上下界估计:

下界:

上界:

因此 。特别地,

对于 (全集大小),。当 较大时,,其中 是欧拉-马斯刻若尼常数。

贪心算法近似比证明(费用分摊论证)

定理:GREEDY-SET-COVER 是集合覆盖问题的一个 -近似算法,其中

证明(费用分摊论证 / Charging Argument,逐步推导):

核心思想:将贪心解的总费用”分摊”到最优解中的每个集合上,证明每个最优集合被分摊的费用不超过 ,从而贪心解的总费用不超过

详细证明

设贪心算法按顺序选择了集合 (注意这里 表示第 步选择的集合,与输入中的集合编号无关)。设 为第 个被选集合的权重。

为最优覆盖。对每个 ,我们需要将贪心解的费用中的一部分”分配”给 ,然后证明分配给 的总费用不超过

费用分配方案

对于最优覆盖中的每个集合 ,考虑 中的元素被贪心算法覆盖的过程。设 中有 个元素,它们在贪心算法的不同迭代中被覆盖。设 中的元素按被覆盖的时间排序为 ,其中 中第 个被覆盖的元素。

被覆盖时(在贪心算法的第 次迭代中),设此时 中还有 个元素未被覆盖。贪心算法在第 次迭代选择了某个集合 ,其”单位费用”为:

其中 是第 次迭代开始时仍未被覆盖的元素集合。

关键观察:在第 次迭代时, 中仍有 个元素未被覆盖,因此 本身可以覆盖 个未覆盖元素。贪心算法选择了性价比最高的集合,所以:

我们将 被”覆盖”的费用定义为:

注意: 被均匀分摊到 在第 次迭代覆盖的所有元素上,每个元素分到的费用恰好是

将费用分配给最优集合

对于 中的每个元素 都在某个时刻被贪心算法覆盖,对应的费用为 。我们将这些费用累加:

这里利用了替换 ,则当 时,,所以

汇总所有最优集合的费用

贪心解的总费用等于所有被覆盖元素的费用之和(因为每个贪心步骤的费用被完全分摊到该步骤覆盖的元素上):

另一方面,每个元素 恰好属于最优覆盖 中的某个集合 (因为 是一个覆盖)。因此:

由于 对所有 成立,且 是单调递增函数:

因此:

即贪心算法的近似比为

更紧的界:实际上,上述证明给出了一个更紧的界:

如果最优覆盖中最大的集合大小为 ),则近似比为 而非 。当 时,这个界要好得多。

算法复杂度分析

  • 每次迭代需要扫描所有未选集合,计算覆盖数量: 个集合,每个最多 个元素)
  • 最多迭代 次(每次至少覆盖一个新元素)
  • 总时间复杂度:(可以通过优先队列优化到

集合覆盖的不可近似性

Dinur和Steurer(2014)证明了:除非 (比P≠NP稍强的假设),集合覆盖问题不存在近似比优于 的多项式时间算法。这意味着贪心算法的 近似比在本质上是最优的(在相差一个 因子的意义下)。


两个问题的对比总结

维度度量TSP集合覆盖
问题类型图论优化问题集合系统优化问题
核心约束三角不等式覆盖约束
最优算法Christofides (1.5-近似)贪心 (-近似)
证明技术结构分解 + 三角不等式费用分摊论证
不可近似性一般TSP无常数近似不优于
实际应用物流配送、芯片钻孔、DNA测序资源分配、设施选址、特征选择

Christofides算法的历史与最新突破

来源: Karlin, Klein, Oveis Gharan (2020) — A (Slightly) Improved Approximation Algorithm for Metric TSP

Christofides算法自1976年提出以来,1.5的近似比保持了超过40年未被改进。2020年,Karlin、Klein和Oveis Gharan取得了突破性进展:他们证明了一种基于最大熵采样的随机化算法可以达到 -近似比,其中 。虽然改进幅度极小,但这是首次在一般度量TSP上超越Christofides算法的理论结果。2022年,同一团队进一步证明了这个 值可以通过分析子回路线性规划松弛的积分间隙来改进。这些工作揭示了连接组合优化、线性规划与概率方法的深层联系。

贪心集合覆盖的 -近似比完整证明

来源: MIT 6.854/18.415 — Advanced Algorithms, Lecture 3: Greedy Set Cover

费用分摊论证(charging argument)是近似算法分析中最优雅的技术之一。其核心思想是将近似解的费用”分摊”到最优解的各个部分上,通过局部分析(每个最优集合被分摊的费用)推导全局界(近似解的总费用)。对于集合覆盖,关键观察是:当贪心算法覆盖最优集合 中的第 个元素时, 中仍有 个未覆盖元素,而贪心选择的性价比不低于 的性价比。这一观察直接导出 的界。费用分摊技术也被广泛应用于其他问题的近似比分析中,如设施选址问题、在线缓存问题等。

一般TSP的不可近似性——从哈密顿回路归约

来源: 堵丁柱、葛可一、胡晓东 — 近似算法的设计与分析,第十章:不可近似性

一般TSP(不满足三角不等式)的不可近似性是归约证明的经典范例。通过将哈密顿回路问题(HAM-CYCLE)归约到TSP的判定版本,可以证明:除非P=NP,对任意常数 ,都不存在近似比为 的多项式时间TSP算法。这个结果的意义在于:它清晰地展示了三角不等式这一”结构性假设”在近似算法设计中的关键作用。没有三角不等式,问题变得”过于无结构”,以至于连最粗略的近似保证都无法给出。这一思想在不可近似性理论中被广泛推广:通过从Gap版本的Label-Cover或PCP定理出发,可以证明许多问题在更精细的不可近似性下界。

度量TSP近似算法综述

来源: Travelling Salesman Problem: Algorithms and Approaches — A Comprehensive Survey (2025)

度量TSP的近似算法研究经历了多个里程碑。1976年Christofides提出1.5-近似算法后,研究者从多个角度尝试改进:(1) 图TSP(graphic TSP,边权来自某个图的距离):Mömke和Svensson (2011) 达到1.461-近似,Mucha (2012) 改进到 -近似;(2) 子回路LP松弛(subtour LP):其积分间隙长期被猜测为 ,但直到2020年才被证明严格小于 ;(3) 半整数cycle cut实例:2022年有工作给出了 -近似算法。当前度量TSP的最大公开问题是:能否在多项式时间内达到 -近似?这被认为是该领域最重要的开放问题之一。

三角不等式不是可有可无的附加条件

误区:三角不等式只是一个”锦上添花”的额外假设,去掉它只是让近似比变差一些。

正确理解:三角不等式是度量TSP近似算法存在的根本前提。没有三角不等式,TSP不仅没有常数近似比,而且实际上不可能有任何有意义的近似保证。这是因为一般TSP中,最优解和次优解之间的”间隙”可以任意小(最优解权重为 ,次优解权重为 ),任何近似算法都必须精确区分这两种情况,而这等价于解决NP完全问题。三角不等式赋予了问题足够的”结构”,使得近似算法可以利用这种结构来获得质量保证。

Christofides算法的1.5-近似比不是通过"改进"2-近似得到的

误区:Christofides算法是在MST+DFS算法的基础上做了一些优化,把近似比从2改进到1.5。

正确理解:虽然Christofides算法确实以MST为基础,但其核心创新——在奇数度顶点上求最小权完美匹配——是一个质的飞跃,而非量的改进。MST+DFS算法的问题在于:DFS遍历中每条树边被走两次,而”回溯”的那一次是”浪费”的。Christofides算法通过添加匹配边,使得所有顶点度数变为偶数,从而可以直接走欧拉回路(每条边只走一次),消除了回溯的浪费。匹配的权重不超过最优TSP的一半,因此总权重不超过 。这个证明的结构与2-近似证明完全不同,不是简单的”优化改进”。

集合覆盖的贪心算法不是"每次选最大的集合"

误区:贪心算法每次选择覆盖元素最多的集合。

正确理解:在无权集合覆盖中,贪心算法确实每次选择覆盖最多未覆盖元素的集合(因为所有集合权重相同,最大化 等价于最小化 )。但在加权集合覆盖中,贪心算法选择的是性价比最高的集合,即 最大的集合。一个覆盖很多元素但权重极高的集合,可能不如一个覆盖较少元素但权重极低的集合”划算”。加权贪心策略是保证 -近似比的关键——如果简单地每次选最大的集合,在加权情形下近似比将失去保证。

习题精选

习题概览

题号来源核心考点难度
1CLRS 35.2-1MST+DFS 2-近似算法执行与正确性⭐⭐
2CLRS 35.2-3Christofides算法步骤与奇数度顶点⭐⭐⭐
3CLRS 35.3-1贪心集合覆盖算法执行⭐⭐
4CLRS 35.3-2费用分摊论证的应用⭐⭐⭐
5扩展题一般TSP不可近似性证明⭐⭐⭐

题1:MST+DFS近似算法的执行

题目

考虑一个4个顶点的完全图 ,其中 ,边权如下:

权重
(a,b)1
(a,c)2
(a,d)3
(b,c)2
(b,d)3
(c,d)1

假设边权满足三角不等式。使用MST+DFS前序遍历算法求近似TSP回路,并计算近似比。

解题思路提示

关键在于正确构造最小生成树,并注意前序遍历的”去重”操作——只保留每个顶点第一次出现的位置。验证三角不等式可以帮助确认结果的正确性。

题2:Christofides算法的奇数度顶点

题目

在Christofides算法中,为什么最小生成树 中奇数度顶点的个数一定是偶数?如果 中所有顶点的度数都是偶数,算法应如何处理?

解题思路提示

握手引理是图论中最基本的计数工具之一。考虑度数之和的奇偶性是证明”奇数度顶点个数为偶数”的标准方法。

题3:贪心集合覆盖的执行

题目

给定全集 和子集族 (所有集合权重为1):

执行贪心集合覆盖算法,给出每一步的选择和结果,并分析近似比。

解题思路提示

在枚举最优解时,注意检查每种组合是否真正覆盖了全集。贪心算法在许多”友好”的实例上能找到最优解,但最坏情况下近似比可达

题4:费用分摊论证的应用

题目

考虑一个集合覆盖实例:,所有权重为1:

已知最优解为 。假设贪心算法选择了 。使用费用分摊论证的方法,验证 是否成立。

解题思路提示

费用分摊的关键是跟踪每个最优集合中元素被覆盖的”时间顺序”。第 个被覆盖的元素的分摊费用不超过 ,将所有元素的分摊费用求和得到

题5:一般TSP不可近似性

题目

证明:对于一般TSP(不要求三角不等式),即使只要求近似比 ,也不存在多项式时间近似算法,除非P=NP。

解题思路提示

不可近似性证明的核心是构造一个”间隙”(gap):当答案为”是”时最优解权重为 ,当答案为”否”时最优解权重至少为 。近似算法的误差必须小于这个间隙才能区分两种情况,而间隙 增大趋于0,任何固定近似比 最终都无法满足要求。

视频学习指南

资源链接对应内容备注
MIT 6.046J — Approximation Algorithms: TSPYouTube度量TSP的MST+DFS 2-近似算法MIT算法导论课程,讲解清晰
Christofides Algorithm ExplainedYouTubeChristofides算法步骤与证明可视化演示欧拉回路构造
Approximation Algorithms — Set CoverYouTube贪心集合覆盖与费用分摊包含完整证明推导
UC Berkeley CS 270 — TSP ApproximationYouTubeChristofides算法与不可近似性研究生级别,理论深入
Erik Demaine — Advanced Data StructuresMIT OCW集合覆盖的原始对偶算法进阶内容,超越贪心算法

教材原文

来源: 算法导论(第4版),第35章第2节,第35.2节

“Although no polynomial-time approximation algorithm with a constant ratio bound is known for the general traveling-salesman problem, we can use a clever trick to obtain one for a special case of the problem in which the edge weights satisfy the triangle inequality.”

来源: 算法导论(第4版),第35章第3节,第35.3节

“The greedy heuristic works well in practice, and it is the best polynomial-time approximation algorithm that is known for the set-covering problem. We can prove that the greedy algorithm returns a set cover that is not too much larger than an optimal set cover.”

参见Wiki

第35章-近似算法