这一章引入两个在计算复杂性理论中极其经典的问题:
Hamiltonian Cycle(汉密尔顿环,HC)
Traveling Salesman Problem(旅行商问题,TSP)
它们有三个重要意义:
都是NP-Complete / NP-Hard 的代表问题
都非常“直观”,但本质上极难
是后续近似算法(Approximation Algorithms)的理论基础和起点。
给定一个无向图
我们关注的是判定问题:Hamiltonian Cycle Problem
给定图 G,是否存在一个 Hamiltonian Cycle?
这是一个标准的 YES / NO 问题,为后续 NP 完全性讨论做准备。
这个问题还是很简单的,证明属于NP一直都是不难的。
Certificate: 如果图中存在一个 Hamiltonian Cycle,那么 certificate 可以是一个顶点序列
Certifier: 检查如下内容。
序列是否包含所有顶点,且无重复
对任意相邻
是否存在边
这些检查都可以在 poly-time 内完成。
这是一个核心结论,这部分的构造是比较复杂的。
我们选择用 Vertex Cover 问题进行规约。
Vertex Cover:
给定图
和整数 ,是否存在大小 的点集,使得每条边至少有一个端点被选中?
规约的核心思想是:
把“选点覆盖边”的选择
转换为“Hamiltonian Cycle 必须以某种方式穿过 gadget”
换句话说:是否存在 Hamiltonian Cycle ⇔ 是否存在合法的 Vertex Cover。
570课件中使用了一组复杂的 gadget,这里不逐条照抄,而解释为什么这样设计是有效的。
![]() | ![]() |
|---|
直觉可以总结为三点:
每条边对应一个结构: HC 经过这个结构的方式,等价于“选择了哪一个端点来 cover 这条边”
选择顶点是受限的: 通过 selector vertices,强制最多只能选择 k 个“cover 决策”
Hamiltonian Cycle 必须覆盖所有 gadget: 不能跳过任何一个 gadget,否则无法形成完整环
因此:
如果存在大小 ≤ k 的 vertex cover → 可以构造 Hamiltonian Cycle
如果存在 Hamiltonian Cycle → 可反推出一个 vertex cover
结论:Hamiltonian Cycle 是 NP-Complete
优化版 TSP:
找到一条访问每个城市一次、并返回起点的最短路径。
但 NP 完全性讨论只关心判定版:
TSP(Decision Version) 给定带权完全图和一个阈值 D,是否存在一条 tour,其总权重 ≤ D?
Certificate:一个城市排列(tour)
Certifier:
检查是否访问每个城市一次
计算总路径长度是否 ≤ D
所有步骤都可在多项式时间完成。
因此:TSP ∈ NP
这里都是很简单的。
570课件中使用的是一个非常经典且优雅的构造。
给定图
若
若
并设定阈值:
此时:
如果原图存在 Hamiltonian Cycle → 该环在新图中总代价 = |V| → TSP 回答 YES
如果不存在 Hamiltonian Cycle → 任意 tour 至少包含一条权重为 2 的边 → 总权重 > |V| → TSP 回答 NO
因此:
Hamiltonian Cycle ≤ₚ TSP
所以 TSP 是 NP-Complete
Metric TSP 要求边权满足三角不等式:
这使得问题结构发生了根本变化。

课件中的算法思路:
计算最小生成树(MST)
对 MST 做 preorder traversal
利用 triangle inequality shortcut 重复节点
结论:Metric TSP 存在 2-approximation 算法
关键结论是:
如果 General TSP 存在常数近似算法 ⇒ 可以在多项式时间内解决 Hamiltonian Cycle ⇒ 推出 P = NP
因此:
General TSP 不存在任何常数因子的近似算法(除非 P=NP)
而这正是 Metric TSP 与 General TSP 的本质区别。