Day 43 · 2026.08.04

组合优化

Combinatorial Optimization — 在指数大的离散空间里,找到那唯一最好的一个
「我主张,作为一个数学结果:存在一个求最大匹配的算法。」 — Jack Edmonds, 1965(「好算法 = 多项式时间」这个定义,就诞生在这篇讲匹配的论文里)

旅行商问题

The Traveling Salesman Problem · 组合爆炸的标准样本
NP-Hard
直觉版

$n$ 座城市各访问一次再回到起点,求总里程最短的走法。可行解有 $(n-1)!/2$ 条,$n=20$ 就是 $6\times10^{16}$。但真正的困难不是数量,而是这个空间没有梯度:任何改动都是整段边的替换,你无法「稍微调整一点点」。连续优化里「沿坡往下走」的全部直觉,在这里一句都用不上。

但 TSP 并非一团乱麻。在平面上,最优路线一定不自交:两条边若交叉,换个接法必然更短(三角不等式)。这就是 2-opt——一条几何事实立刻砍掉一大片搜索空间。组合优化的全部功夫,就是找这种能砍掉一大片的结构。

有交叉 → 必不最优 2-opt 交换后更短
正式定义
$$\min_{\pi \in S_n} \sum_{i=1}^{n} d\big(c_{\pi(i)},\, c_{\pi(i+1)}\big)$$

$\pi$ 是走访顺序的一个排列,$S_n$ 是全部 $n!$ 个排列,$d$ 是两城距离,下标循环回到起点。写成整数规划更有用:$x_{ij}\in\{0,1\}$ 表示是否走边 $(i,j)$,约束每城进出各一次,外加子回路消除约束——否则解会退化成几个互不相连的小圈。这类约束有指数多条;Dantzig 等人 1954 年的对策是不预先写下,先解松弛,哪条被违反就补哪条——割平面法由此诞生。

为什么美

TSP 同时是两件相反事情的样本:它是 NP-hard 的教科书例子,可 Concorde 求解器已精确解出 85900 城的实例并给出最优性证明。这不矛盾——NP-hard 是关于最坏情况的陈述,现实实例却带着几何结构,割平面正把它一条条兑换成约束。「理论上难」与「这个实例可解」之间那道缝隙,是整个运筹学工业站立的地方。

应用

电路板钻孔与激光切割的走刀路径、基因组测序中 contig 的排序、望远镜观测调度、快递最后一公里,都是 TSP 或其变体。启发式一侧,LKH 用可变深度的边交换,在百万级实例上逼近最优 1% 以内。

一句话精华 · 思考题
离散空间没有梯度可循,这才是组合优化的根本困难;一切算法都在为它临时造一个「方向」。
思考:神经网络上亿参数却训练得动,TSP 二十城就爆炸。差别在维度,还是在「局部信息能否指出全局方向」?

近似算法

Approximation Algorithms · 给「接近」标一个可证明的价码
Algorithm Design
直觉版

既然求不到最优,退一步:能否保证「我的解不超过最优的 1.5 倍」,且对所有输入都成立?这与启发式有本质区别——启发式是「通常还行」,近似算法是带证明的承诺

难点是个悖论:你根本不知道最优值 $\mathrm{OPT}$,怎么证明自己离它多近?出路是找一个算得出来的下界。TSP 中任何回路删掉一条边都是生成树,所以最小生成树长度 $\le \mathrm{OPT}$;于是只需证明「我 $\le c\times$ 下界 $\le c\times \mathrm{OPT}$」。整个近似算法领域,本质是一门构造好下界的手艺。

可近似 ← → 几乎不可近似 1+ε背包 3/2度量 TSP ln n集合覆盖 n^(1-ε)最大团 每个位置都是定理:既是算法的上界,也是 PCP 给出的硬度下界
正式定义
$$\rho\text{-近似}:\quad \frac{\mathrm{ALG}(I)}{\mathrm{OPT}(I)} \le \rho \quad \text{对每一个实例 } I$$

$\mathrm{ALG}(I)$ 是算法在实例 $I$ 上的输出,$\mathrm{OPT}(I)$ 是真实最优值,$\rho$ 与实例无关。Christofides 算法用最小生成树 + 奇度顶点上的最小完美匹配,对满足三角不等式的 TSP 给出 $\rho=3/2$;这个 1976 年的纪录直到 2020 年才被 $3/2-10^{-36}$ 撼动——数值微不足道,意义在于 $3/2$ 不是墙。

为什么美

近似把 P vs NP 的二值问题展开成一条连续光谱:不再只问「能不能高效解」,而问「能高效逼近到什么程度」。更漂亮的是这条光谱本身有可证的硬边界——PCP 定理说明,除非 P=NP,集合覆盖的 $\ln n$ 已是最优,最大团连 $n^{1-\varepsilon}$ 都做不到。「有多难」从一句抱怨变成了可精确计算的量。

应用

贪心的 $\ln n$ 集合覆盖是数据子集选择与测试精简的骨架;LP 松弛加随机舍入是云调度与预算分配的通用套路。机器学习里最直接的一条:子模函数在拟阵约束下最大化有 $1-1/e$ 的贪心保证(Nemhauser 等,1978),用于传感器布点、数据蒸馏、少样本示例挑选——「选一个多样又有代表性的子集」几乎总能写成这个形式

一句话精华 · 思考题
求不到最优时,就求「可证明的接近」——而能接近到什么程度,本身是一条定理。
思考:工程中常用毫无保证的启发式,实测却很好。可证明的保证何时值得付出代价,何时只是理论洁癖?

匹配理论

Matching Theory · 「多项式时间」这个概念的诞生地
Graph Theory
直觉版

一边是任务,一边是工人,连线表示「能做」,求最多的一对一配对。贪心会卡住:先配掉的一对,可能正好堵死后面两对。

解法是增广路:从一个未配对的点出发,交替走「未匹配边、已匹配边、未匹配边……」,若最终停在另一个未配对的点上,就把这条路上所有边的状态整体翻转——原来匹配的松开,原来没匹配的接上。路上匹配边比未匹配边少一条,翻转后总数恰好 $+1$。妙处是:它自动拆掉你先前的错误配法,无需回溯。Berge 定理更进一步:匹配最大 $\iff$ 不存在增广路——全局最优性被压缩成一个可局部验证的条件。

未配对 未配对 粗蓝 = 当前匹配 红虚 = 增广路 沿红虚线全体翻转 → 匹配数 3 → 4
正式定义
$$\text{König: } \max_{M}|M| = \min_{C}|C| \qquad \text{Hall: } \exists\,\text{完美匹配} \iff \forall S\subseteq L,\ |N(S)|\ge|S|$$

左式中 $M$ 取遍所有匹配,$C$ 取遍所有顶点覆盖(碰到每条边的顶点集):最大匹配数等于最小覆盖数,这是对偶——「最多能配几对」的答案,同时就是「为何不能更多」的证明。右式中 $N(S)$ 是 $S$ 的邻居集:完美匹配失败当且仅当某个子集的候选人太少。瓶颈永远是一个具体子集,而非玄学的全局拥挤。

为什么美

一般图里增广路会失效:奇圈让交替路绕回自身。Edmonds 1965 年的对策是「花」(blossom)——把整个奇圈缩成一个点,在缩图上继续搜索,找到后再展开。也正是在这篇论文里,他第一次主张「好算法」应定义为运行时间多项式增长。复杂性理论最核心的类 P,定义来自一篇讲怎么配对的论文。

应用

全美肾脏配对交换(UNOS)靠最大权匹配救人;住院医师分配、广告位实时投放(在线二分匹配的 RANKING 算法有 $1-1/e$ 竞争比)、目标跟踪的数据关联,跑的都是同一套算法。而最优传输正是匹配的连续松弛,Sinkhorn 迭代把它变得可微,如今用于扩散模型与域自适应。

一句话精华 · 思考题
最大匹配能多项式求解,是因为它的最优性可以被一个局部对象——「不存在增广路」——完全刻画。
思考:「无增广路 $\Rightarrow$ 全局最优」是从局部到全局的跃迁;梯度下降里「梯度为零 $\Rightarrow$ 全局最优」只在凸时成立。匹配问题的「凸性」藏在哪里?

拟阵

Matroid · 贪心算法为何有效的完整答案
Combinatorial Structure
直觉版

贪心——每次拿当前看起来最好的,绝不反悔——有时对得惊人(Kruskal 求最小生成树),有时错得离谱(TSP 的最近邻)。什么时候贪心是对的?拟阵给出了完整回答。

先看一个巧合:线性代数里的「线性无关向量组」与图论里的「不含圈的边集(森林)」,行为一模一样。其一,子集仍然无关;其二,两个无关集大小不同时,大的那个里一定能挑出一个元素补进小的,仍保持无关。把这两条抽出来当公理,就得到拟阵。第二条是关键:它保证你无论从哪起步,都不会走进「还没到最大却再加不进任何元素」的死胡同。

A(较小的无关集) B(较大的无关集) 交换公理:总存在 e ∈ B∖A 使 A+e 仍无关 ⟹ 贪心不会卡死
正式定义
$$A,B\in\mathcal{I},\ |A|<|B| \ \Longrightarrow\ \exists\, e\in B\setminus A,\ A\cup\{e\}\in\mathcal{I}$$

拟阵是一对 $(E,\mathcal{I})$:$E$ 是有限地面集(所有边、所有向量),$\mathcal{I}$ 是称作「无关集」的子集族,满足空集属于 $\mathcal{I}$、对取子集封闭,以及上式这条交换公理。直接推论是:所有极大无关集等大,这个公共大小就是——在向量空间里它是矩阵的秩,在图里是生成森林的边数。

为什么美

Rado–Edmonds 定理:贪心对所有权重函数都返回最优解,当且仅当该结构是拟阵。这是精确的「当且仅当」,不是「贪心通常管用」这类经验之谈——数学难得能把一整类算法的适用范围一次划清。界线还往前走:两个拟阵的仍可多项式求解(二分匹配恰是两个划分拟阵的交),三个就 NP-hard。分水岭画在「二」与「三」之间。

应用

Kruskal 算法就是图拟阵上的贪心;带截止期的单机排程、网络可靠性同样落在拟阵框架里;编码理论中线性码对应向量拟阵。机器学习方面,子模函数是拟阵秩函数的推广:数据子集选择、主动学习、推荐多样性、上下文示例挑选,几乎都是「在拟阵约束下最大化子模函数」,概念 2 那个 $1-1/e$ 正从这个结构长出来。

一句话精华 · 思考题
贪心可行不是运气,而是「交换公理」这条组合律的直接后果——先验结构,后得算法。
思考:若你的问题存在某种「局部可交换」结构,是否意味着最简单的算法就已足够?反过来,难问题是否都可理解为交换性被破坏之处?

深入思考

最小生成树容易、旅行商困难——两者不是只差一个「回路」约束吗?
差别在可行集的组合结构。生成树的可行集是森林,构成拟阵:子集仍是森林,交换公理成立,贪心直接最优。哈密顿回路却连下闭性都没有——去掉一条边就不再是回路,「部分解」根本不存在,你无法边走边判断自己是否还在正轨上。决定难度的是约束的组合结构,而非问题描述的长短。实用直觉:拿到新问题先问「可行集对取子集封闭吗」。
近似硬度(PCP 定理)究竟在说什么?
PCP 定理说:每个 NP 问题的证明都能改写成一种格式,验证者只随机读常数个比特就能高概率判定对错。这个改写把「对」与「错」的差距放大成常数比例的间隙,于是难的不再只是求解,而是连区分「存在很好的解」与「所有解都差」都难。世界观意义:某些界限不是我们还不够聪明,而是可证的结构事实。
深度学习真的能取代组合优化求解器吗?
有两条现实路线。其一把离散松弛为连续:Gumbel-softmax、最优传输、可微排序让梯度穿过组合结构,代价是只得近似解且丢失最优性证明。其二是学习求解器内部的决策——用图神经网络为分支定界挑选分支变量、预测割平面价值,这一层已进入商用求解器。但端到端神经网络至今很少在大规模精确求解上胜过 Concorde 或 CPLEX:增量在「学习加速搜索」,不在「学习替代搜索」。
分布式系统里的调度与放置,该套用哪一套框架?
副本放置、任务调度、分片分配纸面上都是带约束的组合优化,但多了两个离线理论没有的条件:目标函数随时间漂移,决策时信息不完整。此时「相对离线最优的近似比」意义有限——离线最优本身不可达。正确的框架是在线算法的竞争比:与事后诸葛的最优解比较,接受恒定倍数差距(在线二分匹配的 $1-1/e$ 即此形式)。换框架的判断,常比在旧框架里优化更值钱。