CMU-15-850-高级算法笔记-全-

CMU 15-850 高级算法笔记(全)

01:最小生成树入门 🎯

在本节课中,我们将学习最小生成树的基础知识,回顾经典算法,并了解现代算法的发展脉络。最小生成树是图论中的一个核心问题,其算法思想深刻影响了整个算法设计领域。

概述

我们将从最小生成树的定义和基本性质开始,回顾三种经典的求解算法:Borůvka算法、Kruskal算法和Prim算法。接着,我们会探讨如何利用更高效的数据结构(如斐波那契堆)和改进的策略(如Fredman和Tarjan的算法)来提升性能。最后,我们会简要介绍随机化算法如何在线性期望时间内解决此问题。


基本概念与规则

首先,我们定义问题。给定一个无向简单图 G = (V, E),其中 |V| = n|E| = m。每条边 e ∈ E 都有一个权重 w(e)。我们假设所有权重互不相同,这保证了最小生成树的唯一性。最小生成树 TG 的一个连通、无环且包含所有顶点的子图,其所有边的权重之和最小。

求解最小生成树依赖于两个基本规则:

割规则(蓝规则)

对于图的任意一个割(即将顶点集 V 划分为两个非空子集 SV\S),跨越这个割的所有边中,权重最小的边一定包含在任意最小生成树中。

证明:假设最小边 e 不在最小生成树 T 中。将 e 加入 T 会形成一个环。由于 e 跨越了割,该环上必然存在另一条跨越此割的边 f。根据定义,w(f) > w(e)。此时,用 e 替换 f 会得到一棵总权重更小的生成树,这与 T 是最小生成树矛盾。

环规则(红规则)

对于图中的任意一个环,环上权重最大的边一定不在任何最小生成树中。

证明:假设最大边 e 在最小生成树 T 中。从 T 中移除 e 会将树分成两个部分,形成一个割。由于 e 在环上,环上必然存在另一条跨越此割的边 f,且 w(f) < w(e)。将 f 加入断开的两部分可以重新形成一棵生成树,且总权重更小,矛盾。

所有经典的最小生成树算法都基于这两个规则之一或两者结合。


经典算法回顾

上一节我们介绍了最小生成树的理论基础,本节中我们来看看三种经典的求解算法。它们都基于割规则,并在 O(m log n) 时间内运行。

以下是三种经典算法的简要描述:

  • Borůvka算法 (1926)

    1. 初始时,每个顶点自成一个连通分量。
    2. 在每一轮中,对于每个连通分量,选择连接该分量与其他分量的权重最小的边。
    3. 将这些选中的边加入生成树,并合并相应的连通分量。
    4. 重复步骤2-3,直到只剩下一个连通分量。
    • 分析:每轮后,连通分量数量至少减半,因此最多有 O(log n) 轮。每轮可以在 O(m) 时间内完成,总时间为 O(m log n)。该算法天然适合并行计算。
  • Kruskal算法 (1956)

    1. 将所有边按权重从小到大排序。
    2. 按顺序检查每条边。如果当前边连接两个不同的连通分量,则将其加入生成树,并合并这两个分量。
    3. 重复步骤2,直到生成树包含 n-1 条边。
    • 分析:排序需要 O(m log m) 时间。使用并查集数据结构来维护连通分量,m 次查找和合并操作的总时间可优化至 O(m α(m)),其中 α 是增长极慢的反阿克曼函数。因此总时间为 O(m log n)
  • Prim算法 (1930)

    1. 从任意一个顶点开始,将其加入生成树集合。
    2. 在每一轮中,选择连接生成树集合与集合外顶点的所有边中权重最小的一条,将其及其连接的顶点加入集合。
    3. 重复步骤2,直到所有顶点都加入集合。
    • 分析:朴素实现需要 O(m log n) 时间。可以使用优先队列(如二叉堆)来维护从树集到外部顶点的最小边。每次操作(插入、删除最小值、降低关键字)需要 O(log n) 时间,总时间仍为 O(m log n)

迈向线性时间:数据结构的威力

上一节我们看到经典算法达到了 O(m log n) 的时间复杂度。本节中我们来看看如何通过改进数据结构和算法策略来逼近线性时间。

一个关键的突破来自斐波那契堆。这种优先队列数据结构支持以下操作:

  • 插入(Insert)O(1) 摊还时间。
  • 删除最小值(Delete-Min)O(log n) 摊还时间。
  • 降低关键字(Decrease-Key)O(1) 摊还时间。

将斐波那契堆应用于Prim算法,可以将总运行时间改进为 O(m + n log n)。对于稠密图(m ≈ n²),这接近线性;但对于稀疏图(m ≈ n),它仍然是 O(n log n)

为了进一步优化,Fredman和Tarjan提出了一种巧妙的思想,它本质上是在Borůvka算法和Prim算法之间进行插值。其核心步骤如下:

  1. 设定一个阈值 k
  2. 从某个顶点开始运行Prim算法,但仅当当前生成树组件的外部邻域顶点数小于 k 时才继续
  3. 一旦邻域大小达到 k,就停止该组件的扩展。
  4. 重复此过程,从不同顶点出发构建多个这样的“碎片”。
  5. 将每个碎片收缩为一个“超级顶点”,得到一个新图。
  6. 在新图上递归地应用此过程。

通过精心设置每轮递归中不断增长的 k 值,可以证明该算法的总运行时间为 O(m log n),其中 log n 是迭代对数,这是一个增长极其缓慢的函数(例如,log*(2^65536) = 5)。


随机化与线性期望时间算法

尽管有了 O(m log n)* 的算法,但确定性的线性时间算法仍未找到。然而,利用随机化技术,我们可以在线性期望时间内解决问题。这就是Karger、Klein和Tarjan的算法。

该算法的核心思想是同时利用蓝规则和红规则,并通过随机采样来大幅减少需要处理的边数。其框架非常简洁:

  1. 采样:从原图 G 中随机采样大约一半的边,构成子图 G'
  2. 递归:递归地计算 G' 的最小生成树 T'
  3. 验证与过滤:利用 T' 和红规则,识别出原图 G 中所有“明显很重”的边(即对于 T'G 中某条边构成的环,该边是环上最重的边)。根据红规则,这些边不可能在最终的最小生成树中,可以安全删除。
  4. 再次递归:在删除大量边后得到的、边数大幅减少的图上,再次递归计算最小生成树。

通过精巧的分析可以证明,每一步都能显著减少图的规模,使得算法的总体期望运行时间为 O(m)。这至今仍是(期望时间下的)最优结果。


总结

本节课我们一起学习了最小生成树的基础知识。我们从割规则和环规则出发,回顾了Borůvka、Kruskal和Prim这三种经典的 O(m log n) 算法。接着,我们看到了斐波那契堆如何将Prim算法改进到 O(m + n log n),以及Fredman和Tarjan通过插值思想实现的 O(m log n)* 算法。最后,我们了解了Karger等人的随机化算法如何在线性期望时间内解决该问题,这展示了随机化在算法设计中的强大力量。寻找确定性的线性时间最小生成树算法,仍然是一个悬而未决的开放性问题。

02:最小生成树与最小代价有向树生成

在本节课中,我们将继续学习最小生成树算法,并探讨一个在有向图中与最小生成树类似的问题——最小代价有向树生成问题。我们将介绍一个随机化的最小生成树算法,并详细讲解最小代价有向树生成问题的经典解法。


随机化最小生成树算法

上一节我们介绍了最小生成树的两个核心规则:割规则和环规则。本节中,我们将利用环规则来构建一个高效的随机化算法。

算法核心概念

首先,我们定义两个关键概念。设 F 是图中的一个森林(不一定是生成树)。对于任意一条边 e

  • 如果 e 属于由森林 F 和边 e 构成的图的最小生成树,则称 eF-轻边
  • 如果 e 在由森林 F 和边 e 构成的唯一环中是最重的边,则称 eF-重边

根据环规则,F-重边不可能出现在原图的最小生成树中,因此可以被安全地移除。

算法步骤

以下是随机化最小生成树算法(Karger-Klein-Tarjan算法)的步骤:

  1. 预处理:首先,对原图运行三轮 Borůvka 算法。这能在线性时间内将图的顶点数量减少到一个较小的常数倍,为后续递归提供“缓冲空间”。
  2. 递归采样:在预处理后的图 G' 中,以 1/2 的概率独立随机采样每条边,得到边集 E1
  3. 递归计算:在由 E1 导出的子图上递归地计算一棵生成树 T1
  4. 识别并过滤重边:找出原图 G' 中所有相对于 T1T1-重边,并将它们从边集中移除。这一步可以通过一个称为“MST验证”的算法在线性时间内完成。
  5. 最终计算:在剩余的边集(即所有T1-轻边)上递归地计算最小生成树,并返回结果。

算法正确性与效率分析

算法的正确性基于环规则:被移除的T1-重边不可能属于最终的最小生成树。

算法的效率关键在于一个引理:在采样边集 E1 上计算出的生成树 T1,其T1-轻边的期望数量不超过原图边数的两倍。这个引理的证明巧妙地运用了“延迟决策原则”:

  • 我们按权重递增的顺序考虑所有边,模拟Kruskal算法的过程。
  • 在考虑一条边时,我们才“抛硬币”决定它是否在采样集 E1 中。
  • 如果一条边连接了当前森林中的两个不同连通分量,它才可能成为轻边。此时,我们抛硬币决定是否将其加入森林(即是否在 E1 中)。
  • 由于每次抛硬币(遇到轻边)时,只有 1/2 的概率会实际执行合并操作(加入森林),而整个过程中最多执行 n-1 次合并,因此我们期望抛硬币(遇到轻边)的次数为 O(n)

基于此引理,我们可以建立递归式并证明算法的期望运行时间为 O(m + n),即线性时间。


最小代价有向树生成

现在,我们转向有向图中的问题。给定一个有向图 G=(V, A)、边权 c(e) 和一个指定的根节点 r,目标是找到一个以 r 为根的最小代价有向树生成

问题定义

一个有向树生成 T 需要满足:

  1. T 在忽略方向后是一棵连通树。
  2. 除了根节点 r 外,每个顶点有且仅有一条出弧。
  3. T 中所有边的总代价最小。

Edmonds 算法

以下是解决该问题的经典 Edmonds 算法步骤:

  1. 代价规约:对于每个非根顶点 v,将其所有出弧的权重减去其中的最小值 min_v。这一步确保每个顶点都至少有一条权重为 0 的出弧,且不会改变最优解的结构(所有解的代价同增减 sum(min_v))。
  2. 选择零权边:让每个非根顶点选择一条权重为 0 的出弧。这些边构成的集合记为 F
  3. 检查与收缩
    • 如果 F 构成一棵以 r 为根的有向树生成,则算法结束,F 即为最优解。
    • 否则,F 中必然包含有向环(因为每个点一条出边,且不连通到 r)。任意选择一个这样的环 C
    • 将环 C 中的所有顶点收缩为一个新的超级顶点 v_C
    • 处理边的权重:对于指向环 C 内某点的边 (u, w),将其修改为指向 v_C,并将权重更新为 c'(u, v_C) = c(u, w) - c(w, w的下一条出边)。这里减去的值是边 (w, w的下一条出边) 在步骤1规约后的代价(通常为0)。对于从环 C 指向外部的边,则正常从 v_C 引出。
  4. 递归求解:在收缩得到的新图 G' 上递归求解最小代价有向树生成。
  5. 解展开:得到 G' 的解后,进行反向操作:
    • 将超级顶点 v_C 展开回环 C
    • G' 的解中若包含进入 v_C 的边 (u, v_C),则在原图中对应地选择其代表的进入环 C 的边 (u, w)
    • 在环 C 中,断开边 (w, w的下一条出边),并选择环上所有其他边。这样保证了环上每个点仍有一条出边,且整体连通。

算法正确性直觉

算法的正确性基于一个等价性:原图 G 的最优解代价等于收缩后图 G' 的最优解代价。收缩操作相当于预先承诺在环内使用代价为0的边连接,并将节省的代价体现在进入环的边的权重调整上。递归求解后,展开步骤能恢复出一个合法且代价相等的原图解。


线性规划视角

最小代价有向树生成问题可以通过线性规划来建模和分析,这引入了对偶性的强大思想。

整数规划模型

首先,为每条弧 a 引入 0-1 变量 x_a,表示是否选择该弧。目标是最小化总代价 sum(c(a) * x_a)。约束条件包括:

  1. 出度约束:每个非根顶点 v 恰好选一条出弧。sum_{a ∈ δ+(v)} x_a = 1
  2. 连通性约束:对于任何不包含根节点 r 的非空顶点子集 S,至少有一条从 S 指向外部的弧被选中,以确保 S 能连接到根。sum_{a ∈ δ+(S)} x_a ≥ 1

这是一个整数规划问题,其最优解对应最小代价有向树生成。

线性规划松弛与对偶

x_a ∈ {0,1} 松弛为 0 ≤ x_a ≤ 1,得到线性规划松弛问题。有趣的是,Edmonds 算法找到的解不仅是整数规划的最优解,也是这个线性规划松弛的最优解。

为了证明这一点,我们考察该线性规划的对偶问题。为每个不包含根的非空子集 S 引入对偶变量 y_S ≥ 0。对偶问题的目标是最大化 sum(y_S),约束条件是:对于每条弧 a=(u,v),所有包含 u 但不包含 v 的集合 S 对应的 y_S 之和不能超过该弧的代价 c(a)。即:sum_{S: u∈S, v∉S} y_S ≤ c(a)

弱对偶定理指出,对偶问题的任何可行解的目标值都不超过原始问题(线性规划松弛)的最优值。而 Edmonds 算法过程中,为每个收缩的强连通分量(对应一个集合 S)赋予的 y_S 值(即进入该分量的最小边权调整量),恰好构造出了对偶问题的一个可行解,并且其目标值等于算法找到的原始问题解的目标值。根据强对偶定理,这便证明了算法解的最优性。


总结

本节课中我们一起学习了两个重要内容:

  1. 随机化最小生成树算法:通过采样、递归和利用“延迟决策原则”分析轻边数量,得到了一个期望线性时间的优美算法。
  2. 最小代价有向树生成问题及其Edmonds算法:通过代价规约、收缩环、递归求解与展开的步骤,高效解决了有向图中的类似生成树问题。我们还从线性规划和对偶性的角度理解了该算法的深层原理,这为后续学习(如匹配问题)奠定了基础。

03:线性规划与最小树形图

在本节课中,我们将要学习如何运用线性规划理论来分析和证明最小树形图算法的正确性。我们将从回顾线性规划及其对偶理论开始,然后为最小树形图问题构建一个线性规划模型,并利用对偶理论来证明之前所学算法的正确性。最后,我们将简要回顾最短路径问题及其经典算法。

线性规划与对偶理论回顾

上一节我们介绍了最小树形图的 Edmonds 算法。本节中,我们来看看如何用线性规划理论来证明该算法的正确性。首先,我们需要回顾线性规划及其对偶的基本概念。

一个线性规划问题通常包含一个线性目标函数和一组线性约束。对于一个最小化问题,我们可以将其写成如下形式:

最小化 c^T x
满足 A x ≥ b
x ≥ 0

其中,c 是目标函数系数向量,x 是决策变量向量,A 是约束矩阵,b 是约束右侧向量。

对于任何一个线性规划(称为原问题),都存在一个对应的对偶问题。从原问题到对偶问题的转换是机械的:

  • 原问题是最小化,对偶问题则是最大化。
  • 原问题的每个约束在对偶问题中对应一个变量。
  • 原问题的每个变量在对偶问题中对应一个约束。
  • 原问题的约束右侧 b 成为对偶问题的目标函数系数。
  • 原问题的目标函数系数 c 成为对偶问题的约束右侧。

具体地,上述原问题的对偶问题为:

最大化 b^T y
满足 A^T y ≤ c
y ≥ 0

关于对偶理论,有两个核心定理:

  1. 弱对偶定理:如果 x 是原问题的可行解,y 是对偶问题的可行解,那么 c^T x ≥ b^T y。这意味着原问题最优值是所有对偶可行解值的上界。
  2. 强对偶定理:如果原问题和对偶问题都有最优解,那么它们的最优值相等,即 c^T x* = b^T y*

最小树形图的线性规划模型

现在,我们为最小树形图问题构建一个整数线性规划模型,然后将其松弛为线性规划。

给定一个有向图 G=(V, E),每条弧 a ∈ E 有一个权重 c_a,以及一个根节点 r。我们希望选择一个弧的集合,构成一棵以 r 为根的最小权重树形图。

我们为每条弧 a 引入一个决策变量 x_a,表示该弧是否被选中(1 表示选中,0 表示不选)。整数规划模型如下:

最小化 ∑_{a ∈ E} c_a * x_a
满足

  1. 出度约束:对于除根 r 外的每个顶点 v,恰好有一条出弧被选中。
    ∑_{a ∈ δ^+(v)} x_a = 1, 对于所有 v ∈ V \ {r}
  2. 连通性约束:对于任何不包含根 r 的非空顶点子集 S,至少有一条从 S 外部指向 S 内部的弧被选中。
    ∑_{a ∈ δ^+(S)} x_a ≥ 1, 对于所有 S ⊆ V \ {r}, S ≠ ∅
  3. 整数约束x_a ∈ {0, 1}, 对于所有 a ∈ E

为了得到一个线性规划,我们将整数约束松弛为 x_a ≥ 0。我们称这个线性规划的最优值为 LP*。显然,LP* 是原整数规划最优值的一个下界,因为线性规划的解空间更宽松。

接下来,我们写出这个线性规划的对偶问题。原问题有指数级数量的连通性约束,因此对偶问题将有指数级数量的变量 y_S,每个变量对应一个不包含根 r 的非空集合 S

对偶问题如下:

最大化 ∑_{S ⊆ V \ {r}, S ≠ ∅} y_S
满足
对于每条弧 a = (u, v) ∈ E,所有被该弧“跨越”的集合 S(即 u ∉ Sv ∈ S)对应的 y_S 之和不超过该弧的权重。
∑_{S: u ∉ S, v ∈ S} y_S ≤ c_a, 对于所有 a ∈ E
y_S ≥ 0, 对于所有 S

利用对偶证明算法正确性

我们将通过以下两步来证明 Edmonds 算法的最优性:

  1. 算法产生一个原整数规划的可行解(即一个树形图),其权重为 ALG。因此,整数规划的最优值 OPT_IP ≤ ALG
  2. 我们将根据算法的执行过程,构造一个对偶问题的可行解 y,并证明其目标函数值 ∑ y_S 恰好等于 ALG

根据弱对偶定理,任何对偶可行解的值都是原问题最优值的下界,即 ∑ y_S ≤ LP* ≤ OPT_IP。结合第一步,我们得到 ALG = ∑ y_S ≤ LP* ≤ OPT_IP ≤ ALG。这意味着所有不等式都取等号,因此 ALG = OPT_IP,且线性规划与整数规划之间没有间隙(LP* = OPT_IP),从而证明了算法的最优性。

现在,我们来看如何构造对偶解 y。回顾 Edmonds 算法的过程:

  • 算法不断减少从各个顶点出发的弧的权重,直到每个顶点(除根外)都至少有一条权重为 0 的出弧。
  • 每次为一个顶点 v 减少其所有出弧的权重时,减少的量 Δ_v 等于其最小出弧权重。
  • 如果这些 0 权重的弧构成了一个环 C,算法会将这个环收缩成一个超级顶点,并递归求解。

我们可以将对偶变量 y_S 解释为集合 S 愿意支付的“价格”或“税款”,以获取连接到根的机会。算法的执行过程自然地定义了对偶解:

  • 初始时,所有 y_S = 0
  • 当算法为单个顶点 v 减少其出弧权重 Δ_v 时,我们令 y_{ {v} } += Δ_v。这可以理解为顶点 v 为了“逃离”自身,愿意支付 Δ_v
  • 当算法收缩一个环 C 时,我们令 y_C += Δ_C,其中 Δ_C 是收缩后超级顶点需要减少的出弧权重。这可以理解为环 C 中的所有顶点联合起来,共同支付 Δ_C 以“逃离”这个环(即连通分量)。

可以证明,这样构造的 y_S 满足对偶问题的所有约束。关键观察是:算法始终保证每条弧的“缩减成本”(即原始成本 c_a 减去所有包含其终点但不包含其起点的集合 Sy_S 之和)保持非负。这正是对偶约束 ∑_{S: u ∉ S, v ∈ S} y_S ≤ c_a 所要求的。

因此,我们构造的对偶解是可行的,并且其目标值 ∑ y_S 等于算法在每一步中减少的权重总和,也就是最终树形图的总权重 ALG。这就完成了证明。

最短路径问题概述

在证明了最小树形图算法的正确性后,我们转向另一个经典问题:最短路径。最短路径问题有多种变体,我们将主要关注单源最短路径和全源最短路径。

单源最短路径:给定一个图(边权可为负,但无负权环)和一个源点 s,计算从 s 到图中所有其他顶点的最短路径距离。

  • 非负权边:经典的 Dijkstra 算法可以在 O(m + n log n) 时间内解决,其中 m 是边数,n 是顶点数。
  • 允许负权边:Bellman-Ford (Shimbel) 算法可以在 O(mn) 时间内解决。近年来有突破性进展,出现了 O(m log^8(n) log W) 的算法(W 为最大边权绝对值)。

全源最短路径:计算图中所有顶点对之间的最短路径距离。

  • 对于非负权边,可以运行 n 次 Dijkstra 算法,总时间为 O(nm + n^2 log n)
  • 对于允许负权边的情况,一个巧妙的方法是 Johnson 算法。其核心思想是使用 可行势能

可行势能与 Johnson 算法

可行势能(或可行价格)是给每个顶点 v 分配一个值 φ(v),使得对于每条边 (u, v),其 缩减权重 ĉ_{uv} = c_{uv} + φ(u) - φ(v) 为非负。

关键性质是:在原始权重 c 下的最短路径,与在缩减权重 ĉ 下的最短路径是相同的(路径序列相同,仅路径长度相差一个只与起点和终点有关的常数)。由于 ĉ 非负,我们可以在新图上运行高效的 Dijkstra 算法。

Johnson 算法的步骤如下:

  1. 寻找可行势能:通过向图中添加一个连接所有顶点的新源点,并运行一次 Bellman-Ford 算法,得到从该源点到各点的最短距离,这些距离即可作为可行势能 φ(v)
  2. 计算缩减权重:根据 φ 计算所有边的 ĉ_{uv}
  3. 运行 n 次 Dijkstra:对于每个顶点作为源点,在具有非负权重 ĉ 的图上运行 Dijkstra 算法,得到缩减权重下的最短路径距离 d̂(u, v)
  4. 还原原始距离:原始权重下的最短路径距离为 d(u, v) = d̂(u, v) - φ(u) + φ(v)

Johnson 算法的总时间复杂度为 O(nm + n^2 log n),这比在允许负权的图上直接运行 n 次 Bellman-Ford 的 O(n^2 m) 要高效得多。

总结

本节课中我们一起学习了如何运用线性规划和对偶理论来证明组合优化算法(如最小树形图的 Edmonds 算法)的正确性。我们看到了通过构造一个与算法过程紧密相关的对偶可行解,可以优雅地证明算法的最优性,并同时表明该问题的线性规划松弛是紧的(无间隙)。此外,我们还回顾了最短路径问题的基本算法,并介绍了用于全源最短路径的 Johnson 算法及其核心——可行势能的概念。这些工具和思想在高级算法设计中至关重要。

04:最短路径进阶

在本节课中,我们将继续探讨最短路径问题,并介绍几种高级方法。我们将首先回顾矩阵乘法在最短路径计算中的应用,并讨论其局限性。接着,我们将介绍一种针对特殊图(无向、无权图)的快速全对最短路径算法。最后,我们将引入近似全对最短路径树的概念,并探讨其在解决旅行商问题等近似算法中的应用。

矩阵乘法方法

上一节我们回顾了单源和全对最短路径的基本算法。本节中,我们来看看如何使用矩阵运算的视角来重新审视全对最短路径问题。

我们定义一个图的权重矩阵 A,其中:

  • 如果存在从顶点 i 到 j 的有向边,则 A[i][j] 等于该边的权重。
  • 如果不存在这样的边,则 A[i][j] 为无穷大(∞)。
  • 对角线元素 A[i][i] 设为 0。

接着,我们定义一种特殊的矩阵乘法,称为 Min-Plus 乘积。对于两个矩阵 AB,其 Min-Plus 乘积 C = A ⊙ B 定义为:

C[i][j] = min_k (A[i][k] + B[k][j])

这个运算的含义是,对于所有可能的中间顶点 k,计算从 i 到 k 再到 j 的路径长度,然后取最小值。

基于这个定义,我们可以发现一个关键性质:矩阵 A 的 k 次 Min-Plus 幂(即 AA ⊙ ... ⊙ A,共 k 次)中的元素 (A^k)[i][j],表示从顶点 i 到 j 的、最多使用 k 条边的最短路径长度。

由于任何简单最短路径最多使用 n-1 条边(n 为顶点数),因此计算 A^(n-1) 就能得到全对最短路径。通过重复平方法(例如计算 A, A^2, A^4, A^8...),我们可以在 O(log n) 次矩阵乘法内完成计算。

然而,问题在于计算 Min-Plus 乘积本身。对于一般的半环结构(Min-Plus 代数是一种半环),目前尚无已知的、显著优于朴素 O(n^3) 时间的算法。这是一个重要的未解决问题:能否获得亚立方时间(即 O(n^(3-ε)))的全对最短路径算法?

Seidel 算法:针对特殊图的快速算法

尽管一般情况下的 Min-Plus 乘积难以优化,但对于无向、无权图,我们可以利用标准矩阵乘法(在常规代数下)来获得更快的全对最短路径算法。这就是 Seidel 算法。

算法的核心思想是递归地对图进行“平方”操作。

首先,我们定义图 G 的平方图 G²:

  • G² 与 G 具有相同的顶点集。
  • 在 G² 中,顶点 u 和 v 之间存在边,当且仅当在 G 中,u 和 v 之间的距离最多为 2。这意味着要么 (u, v) 是 G 中的边,要么存在一个顶点 w,使得 (u, w) 和 (w, v) 都是 G 中的边。

构造 G² 的邻接矩阵只需要一次标准的布尔矩阵乘法(检查是否存在长度为 2 的路径)。

设 d_G(u, v) 为图 G 中 u 到 v 的距离,d_G²(u, v) 为图 G² 中 u 到 v 的距离。它们之间存在一个简单的关系:

d_G(u, v) ∈ { 2 * d_G²(u, v), 2 * d_G²(u, v) - 1 }

也就是说,原图距离是平方图距离的两倍,或者两倍减一。

为了区分这两种情况,算法使用了一个巧妙的判据。令 N(v) 表示顶点 v 在原图 G 中的邻居集合。可以证明:

  • 如果 d_G(u, v) = 2 * d_G²(u, v),那么对于 v 的所有邻居 w,都有 d_G²(u, w) ≥ d_G²(u, v)
  • 如果 d_G(u, v) = 2 * d_G²(u, v) - 1,那么对于 v 的所有邻居 w,都有 d_G²(u, w) ≤ d_G²(u, v),并且至少存在一个邻居满足严格小于。

因此,我们可以通过检查 v 的所有邻居在 G² 中的距离平均值是否严格小于 d_G²(u, v) 来判断是否应该减去 1。这个平均值可以通过一次矩阵乘法(距离矩阵乘以一个由邻居度数的倒数缩放的邻接矩阵)快速计算。

以下是 Seidel 算法的高层步骤:

  1. 输入:无向、无权连通图 G。
  2. 构造 G²(使用一次布尔矩阵乘法)。
  3. 递归地在 G² 上运行算法,得到所有顶点对在 G² 中的距离矩阵 D
  4. 对于原图 G 中的每一对顶点 (u, v),将距离初始化为 2 * D[u][v]
  5. 使用一次矩阵乘法计算判据矩阵,对于满足判据的 (u, v),将其距离减 1。
  6. 返回最终的距离矩阵。

该算法的运行时间为 O(n^ω log n),其中 ω 是标准矩阵乘法的指数。这展示了快速矩阵乘法在特定图问题中的强大应用。

近似全对最短路径树及其应用

现在,让我们转向一个不同的概念:近似全对最短路径树。我们希望找到一个图 G 的生成树 T,使得对于所有顶点对 u, v,树 T 中的距离 d_T(u, v) 不会比原图距离 d_G(u, v) 大太多。即,存在一个拉伸因子 α,使得 d_T(u, v) ≤ α * d_G(u, v)

不幸的是,对于确定性的树,即使 α = n-1 的近似也可能需要(考虑一个环的情况)。然而,如果我们允许算法是随机化的,并且只要求期望意义上的近似,情况就会好转。

我们想要一个随机算法,它输出一个随机生成树 T,满足:

  1. 对于所有 u, v,必然有 d_T(u, v) ≥ d_G(u, v)(因为树是子图)。
  2. 对于所有 u, v,期望距离满足 E[ d_T(u, v) ] ≤ α * d_G(u, v)

这种“期望近似”的性质非常有用。例如,考虑在度量空间(满足三角不等式的完全图)上近似求解旅行商问题。如果我们有一个期望拉伸因子为 α 的随机全对最短路径树 T,我们可以:

  1. 在树 T 上找一个最优的旅行商环游 R(在树上,这可以通过欧拉环游构造,长度不超过 2 倍树边总权,而最小生成树是 TSP 的 2-近似)。
  2. 将环游 R 映射回原图 G。由于树中每条边在期望上被拉伸了最多 α 倍,根据期望的线性性质,环游 R 在原图中的期望长度最多是 α 倍于原图最优环游的长度。

这就将寻找原图的 TSP 近似解,转化为寻找一个具有小期望拉伸因子 α 的随机生成树。研究表明,存在随机算法能够实现 α = O(log n),并且这是最优的(存在图需要 Ω(log n) 的拉伸因子)。

在下节课中,我们将介绍一种称为低直径分解的强大工具,并展示如何利用它来构造期望拉伸因子为 O(log² n) 的随机生成树。

总结

本节课中我们一起学习了:

  1. 使用 Min-Plus 矩阵乘法框架理解全对最短路径,并认识到其计算效率上的挑战。
  2. Seidel 算法,它巧妙地利用标准矩阵乘法,为无向无权图提供了 O(n^ω log n) 时间的全对最短路径算法。
  3. 近似全对最短路径树的概念,特别是其随机化与期望近似的版本,并看到了它在近似旅行商等问题中的应用潜力。这为我们接下来学习低直径分解技术做好了铺垫。

05:低延展生成树

在本节课中,我们将学习低延展生成树。这是一种将任意度量空间(或图)近似为树结构的方法。我们将首先介绍一个重要的工具——低直径分解,然后利用它来构造低延展生成树。

低直径分解

上一节我们介绍了低延展生成树的概念,本节中我们来看看构造它的核心工具:低直径分解。

低直径分解是一个随机过程,它可以将一个图(或度量空间)的顶点集划分成若干“簇”。每个簇的直径(即簇内任意两点在图中的最大距离)都很小。同时,对于图中的每一条边,它被划分到不同簇的概率与该边的长度成正比。

以下是低直径分解的正式定义:
给定一个图 G=(V, E) 和一个参数 D > 0,低直径分解将顶点集 V 划分为若干簇 V1, V2, ..., Vk,满足两个性质:

  1. 每个簇 ViG 中的直径至多为 D
  2. 对于每条边 (u, v),其被切割(即 uv 属于不同簇)的概率至多为 β * (dist_G(u, v) / D),其中 β 是一个我们希望尽可能小的参数。

我们将证明,对于任意度量空间,都存在一个低直径分解,其参数 β = O(log n),其中 n 是顶点数。

构造算法与证明

我们通过一个迭代算法来构造低直径分解。算法的核心思想是:随机选取中心点,并以一个几何随机变量为半径“切出”一个簇,然后在剩余顶点上重复此过程。

以下是算法的伪代码描述:

function LDD(V, D):
    while V 非空:
        从 V 中任意选取一个顶点 c
        令半径 r 为一个几何随机变量,其成功概率 p = (8 log n) / D
        定义簇 S = { u ∈ V | dist(c, u) ≤ r }
        将 S 作为一个输出簇
        V = V \ S
    end while
end function

现在,我们来验证这个构造满足低直径分解的两个性质。

性质1(低直径):
由构造可知,簇 S 中的任意顶点 u 到中心 c 的距离 dist(c, u) ≤ r。根据三角不等式,簇内任意两点 u, v 的距离 dist(u, v) ≤ dist(c, u) + dist(c, v) ≤ 2r。我们需要保证 2r ≤ D。由于 r 是几何随机变量,其期望 E[r] = 1/p = D/(8 log n)。利用切尔诺夫界等不等式,可以证明 r > D/2 的概率非常小(≤ 1/n^4)。通过并集界限,所有簇的半径超过 D/2 的概率也很低。因此,以高概率,每个簇的直径至多为 D

性质2(边切割概率):
考虑任意一条边 (u, v),设其长度为 d = dist(u, v)。我们关注第一个中心点 c 使得 uv 进入其半径范围内的时刻。由于几何分布的无记忆性,从该时刻起,在接下来的 d 步内获得“成功”(即停止)的概率上界为 d * p。如果在这 d 步内停止,则 uv 可能被分割到不同簇;否则,它们将进入同一个簇。因此,边 (u, v) 被切割的概率上界为 d * p = d * (8 log n / D) = O(log n) * (d / D)。这就证明了 β = O(log n)

低延展生成树的构造

有了低直径分解这个强大工具,我们现在可以构造低延展生成树。回忆一下,我们的目标是得到一个生成树的分布,使得对于任意顶点对 (u, v),树中的距离至少是原图距离,并且期望树距离至多是原图距离的 α 倍,其中 α 尽可能小。

我们将展示一个构造,使得 α = O(log n * log Δ),这里 Δ 是原图的直径。其核心思想是递归地应用低直径分解,每次将直径减半,并递归地为每个小直径子图构建树,最后将这些子树连接起来。

递归构造算法

以下是构造算法的递归描述:

function LowStretchTree(V, i):
    // 前置条件:子图 V 的直径至多为 2^i
    if |V| == 1 then
        返回一个单节点树
    end if
    // 1. 低直径分解:将 V 分解为簇 V1, V2, ..., Vk,每个簇直径至多为 2^(i-1)
    对 V 运行低直径分解,参数 D = 2^(i-1)
    // 2. 递归构建子树
    for 每个簇 Vj do
        Tj = LowStretchTree(Vj, i-1) // 递归调用,直径减半
        令 rj 为树 Tj 的根节点
    end for
    // 3. 连接子树
    新建一个根节点 R
    for 每个子树 Tj do
        在 R 和 rj 之间添加一条边,并将该边的长度设为 2^i
    end for
    返回以 R 为根的树
end function

算法从 LowStretchTree(全体顶点, log2(Δ)) 开始调用,其中 Δ 是原图直径的估计上界。

分析

我们需要证明这个构造满足低延展生成树的条件。

距离下界:
由于我们添加的边长度(2^i)都大于或等于对应簇间在原图中的可能距离(由直径保证),并且递归子树内部也保持了距离下界,因此整个树中任意两点距离不低于原图距离。

期望延展上界(α = O(log n * log Δ)):
我们对递归层数进行归纳。考虑任意顶点对 (u, v),设其原图距离为 d。在递归的当前层(对应直径上界 2^i),有两种情况:

  1. uv 在低直径分解中被分到不同簇。由低直径分解的性质,这个事件的概率至多为 O(log n) * (d / (2^(i-1)))。如果被分割,在树中,uv 都需要先走到当前层的根 R,距离最多为 2 * 2^i(根据构造,从任意节点到其子树根的距离不超过 2^i,再到 R 又是 2^i)。因此,这种情况下的期望距离贡献是 O(log n) * (d / 2^i) * O(2^i) = O(log n) * d
  2. uv 在低直径分解中被分到同一个簇。这个事件的概率是 1 - O(log n) * (d / 2^i)。此时,uv 的距离由递归子树 Tj 决定。根据归纳假设,在子树中的期望距离至多为 O(log n * (i-1)) * d

将两种情况结合,并利用期望的线性性质,可以得到当前层树中 uv 的期望距离上界为 O(log n * i) * d。因为递归深度 i 最多为 O(log Δ),所以总的期望延展因子 α = O(log n * log Δ)

应用:度量空间上的线性问题

低延展生成树的一个重要应用是为度量空间上的线性问题提供近似算法。所谓“线性问题”,是指目标函数是顶点对之间距离的线性组合的问题,例如 k-中心问题、旅行商问题(在某些形式下)等。

解决这类问题的一个通用范例如下:

  1. 度量空间近似为树: 利用低延展生成树,将原度量空间 (V, d) 近似为一个树度量空间 (V, d_T),其中期望距离满足 d(u,v) ≤ E[d_T(u,v)] ≤ α * d(u,v)
  2. 在树上求解: 许多在一般图上难解的问题,在树结构上往往有高效的最优算法(例如动态规划)。
  3. 解的回溯与近似保证: 将在树上找到的最优解 S_tree 直接作为原问题的解。设原问题最优解为 OPT,其目标函数值为 F(OPT)。由于目标函数是距离的线性函数,根据期望的线性性质,解 S_tree 在树上的目标函数值 E[F_tree(S_tree)] ≤ F_tree(OPT)(因为 S_tree 在树上最优)。而 F_tree(OPT) ≤ α * F(OPT)(因为树上每条边距离期望至多是原图的 α 倍)。同时,原图中解 S_tree 的目标函数值 F(S_tree) ≤ F_tree(S_tree)(因为树距离不小于原图距离)。综合可得 E[F(S_tree)] ≤ α * F(OPT)。因此,我们得到了一个 α 近似的期望。

总结与拓展

本节课中我们一起学习了低延展生成树的构造与应用。我们首先引入了低直径分解这一关键工具,并证明了对于任意 n 点度量空间,都存在参数 β = O(log n) 的低直径分解。随后,我们通过递归应用低直径分解,构造出了延展因子 α = O(log n * log Δ) 的低延展生成树。最后,我们探讨了如何利用这种树嵌入技术,为度量空间上的线性优化问题提供通用的近似算法框架。

需要指出的是,存在更复杂的算法可以将延展因子进一步降低到最优的 O(log n),这需要更精细地处理不同递归层级之间的交互。此外,低直径分解和树嵌入技术本身也是算法设计中非常有用的工具,在分布式计算、线性系统求解等领域都有重要应用。

度量空间嵌入是一个丰富的研究领域,低延展生成树只是其中一种将复杂空间简化为树结构的方法。其他著名的嵌入还包括约翰逊-林登斯特劳斯引理,它可以将高维欧几里得空间嵌入到维数低得多的空间,同时几乎保持所有点对之间的距离。这些工具共同构成了算法研究中理解和处理复杂度量数据的基础。

06:单源最短路径(续)🚀

在本节课中,我们将学习一篇2022年的前沿论文,它提出了一种针对带负权边(但无负权环)图的单源最短路径(SSSP)新算法。该算法显著优于经典的贝尔曼-福特算法,其运行时间与图中负权边的最小值 C 相关。

概述

我们处理的是带权有向图 G = (V, E),边权 w(e) 可以是负整数,但图中不存在负权环。目标是计算从单一源点 s 到所有其他顶点的最短路径距离。

经典的贝尔曼-福特算法运行时间为 O(mn)。我们将要学习的算法,其运行时间约为 m * polylog(m) * C,其中 C 是边权负值部分的一个上界(例如,所有边权 w(e) >= -C)。核心思想是通过一系列“归约”步骤,逐步将图的边权调整至非负,从而能够使用更高效的迪杰斯特拉算法。

上一节我们回顾了基础概念,本节中我们来看看这个新算法的核心框架和关键思想。

核心概念与预备知识

在深入算法之前,我们需要理解几个核心概念。

势能函数(价格函数)

一个势能函数 φ: V -> R 为每个顶点分配一个实数值。给定边权 w,我们可以定义归约边权 w_φ(u->v)

w_φ(u->v) = w(u->v) + φ(u) - φ(v)

我们称势能函数 φ可行的,如果对于所有边 e,其归约边权都是非负的,即 w_φ(e) >= 0

为什么可行势能函数如此重要?
如果找到了一个可行势能函数 φ,那么在新边权 w_φ 下,所有边权非负。此时,原图 G 中的最短路径结构与新图 G_φ 中的完全一致(尽管路径长度可能改变)。因此,我们可以在 G_φ 上运行迪杰斯特拉算法来快速求解原问题。

然而,找到一个可行势能函数本身通常就需要计算最短路径,这似乎成了一个“先有鸡还是先有蛋”的循环问题。新算法的巧妙之处就在于逐步逼近一个可行势能函数。

算法总体框架

算法的总体思路是一个缩放过程:

  1. 从原始边权 w 开始(满足 w(e) >= -C)。
  2. 通过某种方法,找到一个势能函数 φ1,使得归约后的边权 w_φ1 满足 w_φ1(e) >= -C/2。这样,边权的“负性”减半了。
  3. w_φ1 作为新的边权,重复上述过程。经过大约 log C 轮后,归约边权的负值将变得非常小(例如 >= -1/n^2)。
  4. 最后,利用边权为整数的特性,通过一个简单的舍入操作,彻底消除剩余的微小负权,从而得到一个完全非负的图,进而用迪杰斯特拉算法求解。

整个算法的效率取决于步骤2:如何将边权的负值上界从 -C 降低到 -C/2。接下来,我们将聚焦于这一核心步骤,并假设我们要处理的是从 -2-1 的情况(通过缩放,通用情况可化为此情形)。

核心步骤:从 -2-1

我们的子目标是:给定边权 w,满足 w(e) >= -2,找到一个势能函数 φ,使得归约边权 w_φ(e) >= -1

我们将使用三个关键的算法工具:

  1. K轮贝尔曼-福特:用于在最短路径跳数较少的图上快速计算近似距离。
  2. K轮迪杰斯特拉:用于处理边权接近非负的图。
  3. 有向图的低直径分解:这是算法中最关键的一步。

第一步:低直径分解

我们首先将每条边的权值加上2,得到新边权 w+2。此时,(w+2)(e) >= 0,即图 Gw+2 权值下是一个非负权图

我们在非负权图 G(w+2) 上运行有向图低直径分解(LDD) 算法。该算法随机地删除一部分边,使得剩下的图分裂成若干个强连通分量(SCC),并且每个强连通分量在 w+2 权值下的直径(最长最短路径长度)至多为某个参数 D。同时,它保证每条边 e 被删除的概率至多为 w+2(e) / D * polylog(n)

这个过程的结果是,我们得到了一组强连通分量“团块”,以及三类边:

  • 团块内边(白色边):位于各个强连通分量内部。
  • DAG边(红色边):连接不同强连通分量的边。由于强连通分量之间不存在环,这些边自然地形成了一个有向无环图(DAG)结构。
  • 被删除边(黄色边):被LDD过程删除的边。

第二步:分阶段修复边权

现在,我们回到目标权值 w+1(注意,我们的目标是修复 w,但等价地可以修复 w+1 使其非负)。我们将分三个阶段,为三类边分别找到合适的势能函数。

以下是修复过程的步骤:

阶段一:修复团块内边(白色边)
对于每个强连通分量 C,我们考虑其对应的子图 C(w+1)(权值为 w+1)并添加一个超级源点 s_hats_hatC 中所有顶点有长度为0的边。我们需要在这个图上计算从 s_hat 出发的最短路径,以此作为该分量内顶点的势能值。关键观察是:由于该分量在 w+2 权值下直径至多为 D,可以证明在 w+1 权值下,从 s_hat 到分量内任何顶点的最短路径所包含的边数(跳数)也至多为 O(D)。因此,我们可以仅运行 O(D) 轮贝尔曼-福特算法来高效计算这些距离(势能)。对所有分量并行处理,总时间复杂度约为 O(mD)

阶段二:修复DAG边(红色边)
在阶段一之后,白色边的归约权值已经非负。现在我们需要修复连接不同分量的红色边,同时保持白色边的非负性不变。由于红色边构成了一个DAG,我们可以采用一个简单的拓扑排序方法:按照DAG的拓扑顺序处理强连通分量,依次为每个分量设定一个合适的偏移量。具体来说,可以令每个分量的势能值比其前驱分量的势能值高出某个固定值(例如1)。因为红色边在 w+1 下的权值至少为 -1,这个简单的偏移量足以保证所有红色边在归约后也变为非负。这一步可以在 O(m) 时间内完成。

阶段三:修复被删除边(黄色边)
最后,我们需要处理被LDD删除的黄色边。这些边的数量是受控的。回忆LDD的性质:一条边 e 被删除的概率约为 (w+2(e))/D。对于在 w+1 下权值为负的边(即需要修复的边),其 w+2(e) 的值很小(在0到1之间)。因此,这类边被删除的期望数量至多为 O(m/D)

由于需要修复的负权边(黄色边)数量很少,我们可以直接在这些边上运行多轮迪杰斯特拉算法来调整势能。假设有 K 条这样的边,大约需要 O(K) 轮迪杰斯特拉,总成本约为 O(mK)。结合期望数量 O(m/D),此阶段期望时间复杂度为 O(m^2 / D)

平衡与递归

现在,我们有两个主要的时间开销:

  1. 阶段一的贝尔曼-福特:O(mD)
  2. 阶段三的迪杰斯特拉:O(m^2 / D)

通过设置 D = sqrt(m),可以使总时间达到 O(m^{3/2})。但这还不够好。

关键的优化在于递归!在阶段一,我们不是在每个强连通分量上运行贝尔曼-福特,而是递归地调用整个算法本身。也就是说,我们将“修复团块内边”这个子问题,看作是一个新的、规模更小的SSSP问题(并且这些子图的直径上界 D 更小)。通过递归,我们可以避免直接使用代价高的贝尔曼-福特。

最终,通过精心设置递归参数和低直径分解的直径阈值,整个算法可以达到近乎线性的运行时间 m * polylog(n) * polylog(C)

最终步骤:处理微小负权与总结

经过 log C 轮缩放后,我们得到的归约边权满足 w_φ(e) >= -1/n^2。此时,图中可能还存在极少数权值非常接近零的负权边。

我们利用边权为整数的初始条件。由于每轮缩放中的运算保持有理数的精确性,最终得到的势能函数 φ 和归约边权 w_φ 也是有理数。我们可以将所有负权边(其权值在 (-1/n^2, 0) 区间)直接置为0。

为什么这个操作是安全的?
考虑任意一条路径,修改其上的边权(从微小负值改为0)对路径总长度的改变最多为 1/n。由于原始图中所有边权都是整数,任意两条不同路径的长度差至少为1。因此,这个微小的改变不足以让一条非最短路径“超越”原本的最短路径,从而保证了最短路径结构的稳定性。

至此,我们得到了一个所有边权非负的图,只需运行一次迪杰斯特拉算法即可得到最终的最短路径结果。

总结

本节课我们一起学习了一个突破性的单源最短路径算法,它巧妙地结合了多种思想:

  • 势能函数与缩放:通过逐步调整势能,将负权图转化为非负权图。
  • 低直径分解:利用非负权图的性质进行图分解,控制负权边的分布。
  • 分治与递归:将问题分解到直径更小的子图中递归求解,避免高成本操作。
  • 舍入技巧:利用整数权值的特性,最终消除微小负权。

该算法将SSSP在带负权无负环图上的时间复杂度提升到了近乎线性,是算法设计中的一个杰出范例。

07:匹配理论

在本节课中,我们将要学习图论中的一个核心概念——匹配。我们将从匹配的基本定义开始,逐步探讨如何寻找最大匹配,并介绍用于证明匹配最大性的关键定理,特别是针对二分图的柯尼希定理。

匹配的基本定义

首先,我们定义什么是匹配。给定一个无向无权图,一个匹配是图中边的一个子集,满足其中任意两条边不共享端点。

用公式表示,对于一个匹配 M,对于所有属于 M 的边 ef,有:

e ∩ f = ∅

这意味着边 ef 不能有公共顶点。

空集也是一个匹配,但我们通常关心的是最大匹配,即包含边数最多的匹配。如果一个匹配覆盖了图中的所有顶点,则称之为完美匹配。

最大匹配与增广路径

上一节我们介绍了匹配的定义,本节中我们来看看如何判断一个匹配是否是最大的。这里的关键概念是增广路径。

给定一个匹配 M,一条 M-交错路径 是指路径上的边在匹配 M 内和匹配 M 外交替出现。如果一条交错路径的起点和终点都是 M 未覆盖的顶点(即自由顶点),那么这条路径被称为 M-增广路径

增广路径有一个重要性质:它的长度是奇数,并且包含的非匹配边比匹配边多一条。

如果我们找到一条 M-增广路径 P,我们可以通过取对称差来获得一个更大的匹配 M‘

M' = M Δ P

其中 Δ 表示对称差运算。新匹配 M‘ 的大小比 M 大 1。

因此,一个匹配 M 是最大匹配,当且仅当图中不存在 M-增广路径。这为我们提供了一个寻找最大匹配的算法思路:从一个匹配(例如空匹配)开始,不断寻找增广路径并扩展匹配,直到找不到增广路径为止。

二分图与柯尼希定理

上一节我们介绍了通过增广路径寻找最大匹配的通用思路,本节中我们来看看在二分图这一特殊且重要的图类中,匹配问题有更深刻的理论结果。

在二分图中,顶点集可以划分为两个不相交的子集 LR,所有边都连接 LR 中的顶点。

与匹配相关的另一个概念是点覆盖。一个点覆盖是图中顶点的一个子集,使得图中的每一条边都至少有一个端点在这个子集中。

对于任何图,最大匹配的大小不会超过最小点覆盖的大小。因为点覆盖必须“击中”匹配中的所有边,而匹配中的边互不相交。

柯尼希定理指出,在二分图中,最大匹配的大小恰好等于最小点覆盖的大小。这是一个非常优美的最大最小定理。

为了证明这个定理并同时给出寻找最大匹配或证明其最大性的算法,我们考虑以下搜索过程:

  1. 从左侧所有自由顶点开始。
  2. 进行广度优先搜索,交替经过非匹配边和匹配边。
  3. 如果搜索到达一个右侧的自由顶点,我们就找到了一条增广路径。
  4. 如果搜索无法继续且未找到增广路径,则搜索过程会定义出一个点覆盖。

具体来说,令 U 为搜索过程中访问到的左侧顶点集合,Z 为从左侧自由顶点通过交错路径能到达的所有顶点集合。那么,点覆盖 C 可以构造为 C = (L \ Z) ∪ (R ∩ Z)。可以证明 C 是一个点覆盖,且其大小等于当前匹配 M 的大小。根据最大匹配不超过最小点覆盖的原理,当前匹配 M 就是最大匹配。

这个算法在二分图中可以在 O(mn) 时间内找到一个最大匹配,其中 m 是边数,n 是顶点数。

一般图中的匹配

上一节我们看到了二分图中匹配问题的优美解法,本节中我们来看看在一般(非二分)图中,情况会变得更加复杂。

柯尼希定理在一般图中不再成立。一个简单的反例是长度为3的奇环(三角形),其最大匹配大小为1,但最小点覆盖大小为2。

然而,贝尔热定理(关于增广路径的等价性)在一般图中仍然成立。因此,核心挑战仍然是如何寻找增广路径,或者当不存在增广路径时,如何给出一个紧凑的证明。

对于一般图,图特定理给出了最大匹配的另一种刻画。对于图的任意一个顶点子集 U,考虑从图中删除 U 后得到的图 G - U。设该图有 k 个奇连通分支(即包含奇数个顶点的连通分支)。那么,任何匹配的大小最多为:

|M| ≤ (|V| + |U| - k) / 2

图特定理指出,最大匹配的大小恰好等于对所有子集 U 取上述表达式的最小值:

ν(G) = min_{U ⊆ V} (|V| + |U| - odd(G-U)) / 2

其中 ν(G) 表示最大匹配的大小,odd(G-U) 表示 G-U 中奇分支的数量。

一般图中寻找增广路径:花收缩算法

上一节我们介绍了证明一般图匹配最大性的图特定理,本节中我们来看看如何在一般图中实际寻找增广路径。这里的关键思想是处理搜索过程中可能遇到的奇环。

在一般图中进行类似二分图的增广路径搜索时,可能会遇到“花”。一个花由一个偶长度的“茎”(一条交错路径)和一个奇长度的“花蕾”(一个奇环,在环的某点与茎相连)组成。

花的核心性质是:如果图中存在一条增广路径,那么在将花收缩为单个顶点(称为“伪顶点”)后的新图中,也存在一条增广路径。反之亦然。

埃德蒙兹的“花收缩”算法正是基于这一观察:

  1. 在寻找增广路径的搜索过程中,如果发现一个花(奇环)。
  2. 将该花收缩为一个伪顶点。
  3. 在收缩后的新图上递归地继续搜索增广路径。
  4. 如果在收缩后的图中找到了增广路径,可以将其“展开”回原图,得到原图中的一条增广路径。

通过反复应用花检测和收缩,算法最终要么找到一条增广路径,要么确定不存在增广路径(此时可以结合图特定理构造出证明匹配最大性的证书 U 集合)。这个算法证明了在一般图中也可以在多项式时间内找到最大匹配。

本节课中我们一起学习了匹配理论的基础。我们从匹配和增广路径的定义出发,看到了如何利用增广路径来增大匹配。在二分图中,我们学习了柯尼希定理及其证明算法,该算法能同时找到最大匹配或最小点覆盖。对于一般图,我们了解到图特定理给出了最大匹配的极小极大刻画,而埃德蒙兹的花收缩算法则提供了寻找增广路径的有效方法。匹配是一个内容丰富且联系广泛的领域,为许多组合优化问题提供了基础。

08:多项式方法

在本节课中,我们将学习一种用于解决匹配问题的强大工具——多项式方法。我们将看到如何利用线性代数和多项式理论,以随机化的方式高效地检测图中是否存在完美匹配。


从匹配到完美匹配

我们讨论的是无向图中的匹配问题。图可能有权重。匹配是一个边的集合,其中任意两条边不共享公共端点。匹配的权重是其所有边权重之和。

完美匹配是指大小恰好为图大小一半的匹配,即图中的每个顶点都被匹配。

一个重要的事实是:如果你能找到最大基数匹配,你就能找到完美匹配。反之亦然。因此,今天的算法主要围绕寻找完美匹配展开。


回顾与引入

上次课程中,我们看到了如何寻找最大基数匹配。对于二分图,我们有高效的算法。对于非二分图(即一般图),我们看到了一个易于实现但运行时间较长的算法。

目前已知的最佳算法运行时间接近线性。今天,我们将采用一种完全不同的线性代数方法来寻找匹配。这个想法可以追溯到László Lovász,他展示了如何利用随机化思想为二分图和非二分图设计匹配算法。

我们首先需要了解的核心工具是多项式方法。


多项式理论基础

我们将讨论多项式,包括单变量多项式(如 3x² - 7x + 5)和多变量多项式(如 3x₁x₂ + 7x₁² - 9x₂)。

代数基本定理:一个非零的 d 次单变量多项式最多有 d 个根。

对于多变量多项式,情况更为复杂。一个形如 x₁ 的多项式可以有无限多个根(例如,令 x₁ = 0x₂ 取任意值)。然而,我们有一个强大的定理来约束其根的数量。

Schwartz-Zippel 引理:设 P 是一个 n 变量、总次数为 d 的非零多项式。设 S 为一个有限集合。如果我们从 Sⁿ 中均匀随机地选取一个点 x,那么 P(x) = 0 的概率至多为 d / |S|

换句话说,即使对于多变量多项式,随机命中其根的概率也很小,只要集合 S 足够大。这个引理是多项式方法的基石。


二分图中的完美匹配检测

现在,我们来看如何将完美匹配问题与多项式联系起来。

给定一个左右顶点数相等的二分图 G,我们构造一个 Edmonds 矩阵 E(G)。该矩阵的行为左部顶点,列为右部顶点。对于图中的每条边 (i, j),我们在矩阵的 (i, j) 位置放入一个独立的变量 x_{i,j};如果没有边,则放入 0

关键定理:图 G 的 Edmonds 矩阵的行列式 det(E(G)) 是一个多项式。这个多项式是非零多项式,当且仅当图 G 有一个完美匹配。

原理:行列式的定义是遍历所有排列 σ 的求和。每个排列对应一个可能的“匹配”方案(将左部顶点映射到右部顶点)。只有当排列 σ 中所有的边 (i, σ(i)) 都存在于图中时,对应的项才不为零。因此,非零项的存在直接对应于完美匹配的存在。

然而,直接展开这个行列式(有 n! 项)是不可行的。这时,Schwartz-Zippel 引理就派上用场了。

随机化算法

  1. 从一个大集合 S(例如,大小为 2n)中,为 Edmonds 矩阵中的每个变量独立、随机地选取一个值进行代入。
  2. 计算所得数值矩阵的行列式。
  3. 如果行列式不为零,则输出“存在完美匹配”。
  4. 如果行列式为零,则输出“不存在完美匹配”。

误差分析

  • 如果原多项式为零(即无完美匹配),那么代入任何值后行列式都为零。算法总是回答正确。
  • 如果原多项式非零(即有完美匹配),根据 Schwartz-Zippel 引理,随机代入后得到零值的概率至多为 d / |S| ≤ n / (2n) = 1/2。因此,算法犯错的概率至多为 1/2

通过独立重复测试 t 次,可以将错误概率降低到 (1/2)^t。计算一个数值矩阵的行列式可以在 O(n^ω) 时间内完成(ω 是矩阵乘法指数),因此这是一个高效的随机化算法。


一般图中的完美匹配检测

对于非二分图,我们使用类似的思路,但构造的是 Tutte 矩阵 T(G)

对于一个有 n 个顶点的图,Tutte 矩阵是一个 n × n 的斜对称矩阵。对于每条边 (i, j),我们在位置 (i, j) 放入变量 x_{ij},在位置 (j, i) 放入 -x_{ij}。对角线元素为 0

Tutte 定理:图 G 的 Tutte 矩阵的行列式 det(T(G)) 是一个多项式。这个多项式是非零多项式,当且仅当图 G 有一个完美匹配。

证明思路与二分图类似,但需要利用斜对称矩阵行列式的性质(Pfaffian)。同样,我们可以使用随机代入和行列式计算来检测完美匹配,得到运行时间为 O(n^ω) 的随机化算法。


从检测到查找

上述算法只能检测是否存在完美匹配。一个自然的问题是:如果有一个可以检测完美匹配的黑盒,能否用它来找出一个具体的完美匹配?

答案是肯定的。以下是基本思路:

  1. 对于图中的每条边 e,我们询问:图 G \ {e}(移除边 e 后的图)是否仍有完美匹配?
  2. 如果答案是“是”,说明存在不包含 e 的完美匹配,那么 e 不是必需的,可以安全移除。
  3. 如果答案是“否”,说明所有完美匹配都必须包含 e。那么我们将 e 加入最终匹配,并从图中移除 e 的两个端点及其关联的所有边。

这个方法需要对每条边调用一次检测黑盒,总时间为 O(m * n^ω)。可以通过更巧妙的分治策略(例如,对每个顶点的边进行二分搜索)将时间优化到 O(n * n^ω)。目前已知最快的随机化查找算法运行时间也是 O(n^ω)


一个开放问题:红蓝完美匹配

最后,我们介绍一个尚未被确定性多项式时间算法解决的挑战性问题,以展示多项式方法的更多技巧。

问题描述:给定一个二分图,其边被涂成红色或蓝色。问:是否存在一个恰好包含 k 条红边的完美匹配?

对于这个问题,存在随机化的多项式时间算法,但尚不知道确定性的多项式时间算法。

算法思路(简述)

  1. 构造一个矩阵,其中蓝边对应位置赋值为 1,红边对应位置赋值为变量 y
  2. 该矩阵的行列式 P(y) 是一个关于 y 的多项式。y^k 项的系数(模掉符号)恰好是恰好包含 k 条红边的完美匹配的数量。
  3. 为了获取这个系数,我们可以计算 P(y)n+1 个不同点(如 y = 0, 1, 2, ..., n)的值。这需要 n+1 次行列式计算。
  4. 通过拉格朗日插值法,我们可以从这 n+1 个点值唯一地重构出多项式 P(y),从而读出 y^k 项的系数。

拉格朗日插值法回顾:给定一个 d 次多项式在 d+1 个不同点的值,可以唯一确定该多项式。构造一组基多项式 Q_i(x),使得 Q_i 在第 i 个点值为 1,在其他给定点值为 0。则目标多项式就是这些点值乘以对应基多项式的线性组合。

这个算法目前是随机化的,因为需要防止不同匹配项在多项式中的抵消。将其去随机化是一个有趣的开放问题。


总结

本节课我们一起学习了解决匹配问题的多项式方法

  1. 我们首先了解了 Schwartz-Zippel 引理,它指出多变量多项式随机命中根的概率很低。
  2. 利用这个引理,我们为二分图构造了 Edmonds 矩阵,为一般图构造了 Tutte 矩阵。它们的行列式非零与否完美对应了图中是否存在完美匹配。
  3. 通过给矩阵变量随机赋值并计算数值行列式,我们得到了高效的随机化算法来检测完美匹配。
  4. 我们讨论了如何将检测算法转化为查找算法。
  5. 最后,我们探讨了 红蓝完美匹配 这一开放问题,并展示了如何使用插值等多项式技巧来设计算法。

多项式方法的核心在于,它将一个组合问题(匹配)转化为一个代数问题(多项式非零性检测),从而能够利用强大的代数工具和随机化技巧获得高效算法。

09:带权匹配

在本节课中,我们将学习基于线性规划的带权匹配技术。我们将回顾线性规划的基础知识,并探讨如何将其应用于解决二分图上的完美匹配问题。

线性规划基础回顾

上一节我们介绍了匹配问题的组合与矩阵方法。本节中,我们将转向线性规划技术。首先,让我们回顾一些线性规划的基本概念,以确保大家理解一致。

线性规划通常具有以下形式:

最小化 C^T X
约束条件为 A X ≥ B
且 X ≥ 0

其中,X 是 R^n 中的向量,A 是 m × n 矩阵,C 是 R^n 中的向量,B 是 R^m 中的向量。

这个系统定义了一个由有限多个半空间交集构成的凸集,称为多面体。如果这个多面体被包含在一个足够大的球内,则称其为多胞形。

在求解线性规划时,一个关键事实是:我们只需关注多面体的“角点”,而无需考虑其内部的所有连续点。这些角点可以通过三种等价的方式来定义。

以下是三种定义角点的方式:

  1. 极值点:点 X 是极值点,如果它不能表示为集合中任意两个其他点的凸组合。
  2. 顶点:点 X 是顶点,如果存在一个成本向量 C,使得对于集合中所有其他点 Y,都有 C^T X < C^T Y。
  3. 基本可行解:点 X 是基本可行解,如果存在 n 个线性独立的约束在 X 处取等号(即约束是“紧的”)。

这三种定义在描述多面体角点时是等价的。在不同情境下,我们会使用不同的定义来论证问题。

此外,给定一组点 S,其凸包定义为这些点所有可能的凸组合所构成的集合。一个多胞形正是其顶点集的凸包。

匹配问题的线性规划建模

现在,我们来看如何将匹配问题表述为线性规划。给定一个图 G,每个完美匹配 M 都可以用一个特征向量 χ_M ∈ {0, 1}^{|E|} 来表示,其中边 e 对应的坐标为 1 当且仅当 e ∈ M。

我们定义完美匹配多胞形 P_M(G) 为所有完美匹配特征向量的凸包。求解最小成本完美匹配问题,等价于在这个多胞形上优化一个线性目标函数:

最小化 C^T X
约束条件为 X ∈ P_M(G)

这个表述本身很复杂,因为 P_M(G) 可能包含指数数量的顶点。关键在于,对于二分图,我们可以用少量线性约束来紧凑地描述这个多胞形。

二分图完美匹配多胞形

对于二分图,我们可以写出以下线性规划:

最小化 Σ_{e ∈ E} c_e x_e
约束条件为:
对于所有左部顶点 i: Σ_{j: (i,j) ∈ E} x_{ij} = 1
对于所有右部顶点 j: Σ_{i: (i,j) ∈ E} x_{ij} = 1
对于所有边 e: x_e ≥ 0

注意,我们并没有显式地要求 x_e 为整数。神奇之处在于,这个线性规划的多面体的顶点恰好都是整数解(即 0 或 1),而这些整数解正好对应着图的完美匹配。这意味着我们可以放心地去掉整数约束,直接求解这个线性规划,最优解自动就是一个完美匹配。

为了证明这一点,我们可以使用之前提到的角点定义。以下是使用“极值点”定义的证明思路。

证明(使用极值点定义)
假设 X 是该线性规划多面体的一个极值点。我们考虑 X 的支撑集,即满足 x_e > 0 的边集。

  • 首先,支撑集中不能包含环。因为如果包含环,我们可以沿着环交替地对边权加一个很小的 ε 和减 ε,构造出两个不同的可行点,而 X 恰好是这两点的凸组合,这与 X 是极值点矛盾。
  • 既然支撑集无环,它就是一个森林。在二分图中,完美匹配的约束要求每个顶点的关联边权值和为 1。考虑森林中的一个叶子顶点,与其相连的唯一一条边在支撑集中,其权值必须为 1。通过反复剥离叶子顶点,我们可以推导出支撑集实际上就是一个完美匹配,且每条边的权值都是 1。因此,X 必然是一个完美匹配的特征向量。

这个证明展示了该多面体的极值点都是完美匹配。反之,任何完美匹配显然也满足所有约束,并且是一个极值点。因此,我们紧凑的线性规划确实精确地描述了完美匹配多胞形。

另一种证明:使用基本可行解

我们也可以使用“基本可行解”的定义来证明该多面体的整性。这个证明利用了克莱姆法则和矩阵的全单模性质。

证明思路(使用基本可行解定义)
假设 X 是一个基本可行解。根据定义,存在一组数量等于变量数(即边数)的线性独立的紧约束。这些约束包括两类:一部分是顶点度数为 1 的等式约束,另一部分是将某些边权设为 0 的约束(x_e = 0)。
通过重新排列,我们可以将问题简化为求解一个线性系统 C * x' = 1,其中 C 是由那些未被设为 0 的边所对应的顶点等式约束系数构成的子矩阵。C 的每个元素是 0 或 1,且每列恰好有两个 1(因为每条边连接两个顶点)。
可以证明,这样的矩阵 C 的任何方子阵的行列式只能是 0、1 或 -1。由于我们选取的约束是线性独立的,对应的子矩阵 C 是非奇异的,因此其行列式只能是 ±1。
根据克莱姆法则,解 x' 的每个分量都等于两个整数行列式相除(分母为 ±1),因此 x' 的分量必然是整数。再结合约束 Σ x_e = 1,可知这些整数只能是 0 或 1。因此,X 是整数解,即一个完美匹配。

这个证明揭示了背后更深层的代数结构:约束矩阵具有全单模性(所有方子阵的行列式为 0, ±1),这保证了线性规划的最优基解自动为整数解。许多组合优化问题(如二分图匹配、最小代价树形图)的线性规划都具有这种良好的性质。

与非二分图情况的对比及延伸

需要注意的是,上述紧凑且具有整性的线性规划描述严重依赖于图的二分性质。对于非二分图,完美匹配多胞形的描述需要额外的约束(例如“奇环约束”)来保证整性,这使得线性规划变得更加复杂。

此外,二分图匹配问题可以看作是拟阵交问题的一个特例。拟阵交是组合优化中一个非常优美的框架,它统一了包括二分图匹配、最小代价树形图在内的许多问题。在这些问题中,相应的多胞形也常常是整的。

总结

本节课中,我们一起学习了:

  1. 回顾了线性规划的基本概念,包括多面体、极值点、顶点和基本可行解。
  2. 将二分图上的最小代价完美匹配问题建模为一个线性规划。
  3. 证明了该线性规划的多面体顶点恰好是完美匹配,因此去掉整数约束后仍能得到整数最优解。我们使用了两种不同的角点定义(极值点和基本可行解)来进行证明。
  4. 了解了证明背后的关键思想:支撑集无环论证和约束矩阵的全单模性。
  5. 简要提到了非二分图的复杂性以及拟阵交这一更广泛的框架。

通过线性规划的视角,我们为匹配问题找到了一个强大而优雅的解决方案框架。

10:加权匹配(续)🎯

在本节课中,我们将继续探讨最大权重完美匹配问题,特别是针对二分图的情况。我们将介绍一种基于市场定价思想的算法,并探讨其与线性规划对偶理论的联系。最后,我们将简要介绍一般图中完美匹配多面体的概念。


完美匹配多面体回顾

上一节我们介绍了完美匹配多面体的概念。对于一个图 ( G ),其完美匹配多面体 ( K_{PM}(G) ) 定义为所有完美匹配的凸包。具体来说,对于二分图 ( G = (L, R, E) ),我们之前证明了该多面体等价于以下线性规划(LP)的解集:

[
\begin{aligned}
\text{最大化} & \sum_{i \in L, j \in R} v_{ij} x_{ij} \
\text{满足} & \sum_{j \in R} x_{ij} = 1 \quad \forall i \in L \
& \sum_{i \in L} x_{ij} = 1 \quad \forall j \in R \
& x_{ij} \geq 0 \quad \forall (i,j) \in E
\end{aligned}
]

我们通过两种方式(极值点定义和基本可行解)证明了该LP的解集恰好等于 ( K_{PM}(G) )。本节我们将从第三个视角——市场定价算法——来重新审视这个问题。


市场定价算法🛒

我们将最大权重完美匹配问题建模为一个市场:左侧 ( L ) 代表物品,右侧 ( R ) 代表买家。每个买家 ( j ) 对物品 ( i ) 有一个估值 ( v_{ij} )。目标是分配物品给买家,使得社会总福利(即总估值)最大化。

算法核心思想是为每个物品设定一个价格 ( p_i )。买家根据当前价格选择能带来最大“效用”的物品。效用定义为估值减去价格:

[
u_{ij} = v_{ij} - p_i
]

每个买家 ( j ) 的效用 ( U_j ) 为其所有可能物品中的最大效用:

[
U_j = \max_{i \in L} u_{ij}
]

买家偏好的物品集合称为“偏好图” ( G_P ),包含所有使 ( u_{ij} = U_j ) 的边 ( (i,j) )。

以下是算法的具体步骤:

  1. 初始化所有物品价格 ( p_i = 0 )。
  2. 构建当前价格下的偏好图 ( G_P )。
  3. 检查 ( G_P ) 是否包含完美匹配。
    • 如果包含,则按该匹配分配物品,算法终止。
    • 如果不包含,则根据霍尔条件(Hall’s condition),存在一个买家集合 ( S ),其邻域 ( N(S) ) 的大小小于 ( |S| )。我们将这些过度需求的物品价格提高1单位。
  4. 重复步骤2-3,直到找到完美匹配。

算法正确性证明✅

为了证明该算法的正确性,我们考虑原问题的对偶线性规划。原问题(最大化社会总福利)的对偶问题如下:

[
\begin{aligned}
\text{最小化} & \sum_{i \in L} p_i + \sum_{j \in R} U_j \
\text{满足} & p_i + U_j \geq v_{ij} \quad \forall (i,j) \in E
\end{aligned}
]

其中 ( p_i ) 和 ( U_j ) 为对偶变量。在我们的算法中,( p_i ) 直接对应物品价格,而 ( U_j ) 对应买家 ( j ) 的最大效用。由定义可知,对于任意边 ( (i,j) ),有:

[
v_{ij} \leq p_i + U_j
]

因此,算法生成的 ( (p, U) ) 总是对偶可行解,给出了原问题最优值的一个下界。

当偏好图 ( G_P ) 包含完美匹配 ( M ) 时,对于匹配中的每条边 ( (i,j) ),有:

[
v_{ij} = p_i + U_j
]

将所有匹配边相加,得到:

[
\sum_{(i,j) \in M} v_{ij} = \sum_{i \in L} p_i + \sum_{j \in R} U_j
]

左侧是原问题的一个可行解(匹配 ( M ) 的总价值),右侧是对偶问题的目标值。根据线性规划强对偶定理,两者相等意味着我们同时找到了原问题和对偶问题的最优解。因此,算法输出的匹配是最大权重完美匹配。


算法收敛性📉

算法在每次迭代中,要么找到完美匹配并终止,要么提高某些过度需求物品的价格。每次提价会使对偶目标值 ( \sum p_i + \sum U_j ) 至少减少1(因为至少有一个买家的效用下降,且买家数多于物品数)。由于估值 ( v_{ij} ) 为整数,对偶目标值有下界(例如0),因此算法必然在有限步内终止。


与VCG机制的联系🔗

该定价算法自然地引出了Vickrey-Clarke-Groves(VCG)机制。在单物品拍卖中,该算法会导致物品以第二高的估值出售(第二价格拍卖)。在多物品情况下,算法产生的价格确保买家没有动机谎报估值,即机制是“真实”的。

VCG机制的核心思想是:每个买家支付的价格等于其参与拍卖导致的社会总福利的减少量。在我们的匹配场景中,算法产生的价格恰好具有这一性质。


一般图的完美匹配多面体🔶

对于非二分图,完美匹配多面体需要更复杂的描述。仅使用度数约束 ( \sum_{e \in \delta(v)} x_e = 1 ) 是不够的,因为可能存在分数解(如三角形图中每条边赋权1/2)不属于任何完美匹配的凸包。

为了刻画一般图的完美匹配多面体,我们需要添加额外的“奇集约束”:

[
\sum_{e \in \delta(S)} x_e \geq 1 \quad \forall S \subseteq V, |S| \text{为奇数}
]

其中 ( \delta(S) ) 表示跨越集合 ( S ) 的边集。该约束保证了对于任意奇数大小的顶点集,至少有一条匹配边与之相连。

Edmonds定理指出,添加奇集约束后,线性规划的解集恰好等于完美匹配多面体 ( K_{PM}(G) )。尽管该LP有指数级数量的约束,但通过“分离预言机”等技术,我们仍能在多项式时间内求解。


总结📚

本节课我们一起学习了:

  1. 市场定价算法:通过动态调整物品价格,利用偏好图寻找最大权重完美匹配。该算法本质上是匈牙利算法的一种现代诠释。
  2. 对偶理论:算法中的价格和效用自然对应线性规划的对偶变量,算法收敛于最优解。
  3. 机制设计联系:算法产生的价格与VCG机制相关,能激励买家真实报告估值。
  4. 一般图匹配:介绍了完美匹配多面体的完整描述需要奇集约束,并提及了Edmonds的重要定理。

这种将组合优化问题(匹配)与经济思想(市场定价)相结合的方法,展示了不同领域之间深刻而优美的联系。

11:集中度量与尾概率界

在本节课中,我们将学习概率论中的一个核心现象——集中度量,它表现为各种大偏差界或尾概率界。我们将探讨如何量化一个随机变量偏离其期望值的概率,并学习几个关键的界,包括马尔可夫不等式、切比雪夫不等式以及更强大的切尔诺夫界。这些工具对于分析随机算法至关重要。

集中度量的核心思想

上一节我们介绍了课程的整体安排,本节中我们来看看集中度量的核心思想。我们想要理解一个随机变量 X。假设 X 的期望是 μ。我们想知道 X 偏离 μ 很大的概率是多少。

我们希望证明,X 偏离其均值的概率很小。这就是我们想要捕捉的现象。我们想弄清楚“很大”和“很小”具体指什么,X 的哪些性质决定了这些参数,以及如何量化它们并将其用于算法设计。这是接下来几节课的目标。

我脑海中通常浮现的画面是:随机变量是实值的。随机变量有一个均值,通常它不会偏离均值太多。但超出某个范围后,它远大于或远小于均值的概率就很小了。我们通常称这部分为上尾,另一部分为下尾。一般来说,分布函数或密度函数不一定长这样,它们可能是离散随机变量,也可能不对称,但这是你应该记住的图景。这就是我们试图捕捉的现象。

经典大偏差界

以下是几个经典的大偏差界,我们在算法设计中经常使用。

马尔可夫不等式

马尔可夫不等式指出,对于任何非负随机变量 X,有:

P(X ≥ λ) ≤ E[X] / λ

特别地,X 大于其均值两倍的概率至多为 1/2,大于三倍均值的概率至多为 1/3。这有点像定量的鸽巢原理:不可能每个人都高于平均值。

切比雪夫不等式

切比雪夫不等式(有多种拼写方式)指出:

P(|X - μ| ≥ kσ) ≤ 1 / k²

其中 σ 是 X 的标准差。证明很简单:我们想对 |X - μ| ≥ kσ 定界。这等价于 (X - μ)² ≥ k²σ²。然后我们对这个新随机变量应用马尔可夫不等式,得到期望 E[(X - μ)²] 除以 k²σ²,而 E[(X - μ)²] 正是方差的定义,所以结果就是 1 / k²

当然,我们还可以用四阶矩来获得界,例如 P(|X - μ|⁴ ≥ k⁴σ⁴) ≤ 1/k⁴,这给出了另一个界。一般来说,如果你能控制矩,就可以立即读出这样的界。这些界的好坏取决于你的应用场景。

应用示例:二项分布与球箱模型

让我们通过几个快速应用来说明问题。

二项分布示例

设 X 服从二项分布 B(n, p),即 n 次独立伯努利试验(成功概率为 p)的成功次数之和。那么 E[X] = npVar(X) = np(1-p)

马尔可夫不等式告诉我们 P(X ≥ λ) ≤ np / λ
切比雪夫不等式告诉我们 P(|X - np| ≥ k√(np(1-p))) ≤ 1/k²

假设 p = 1/2,则均值是 n/2,标准差约为 √n / 2。切比雪夫不等式表明,偏离均值约 √n 量级的概率下降得像 1/k² 一样(二次下降)。这已经比马尔可夫不等式好很多了。

球箱模型示例

考虑 n 个球和 n 个箱子。每个球独立且均匀地随机落入一个箱子。我们关心最大负载,即装有最多球的箱子里的球数。

对于任何一个特定的箱子,其负载服从二项分布 B(n, 1/n),期望负载为 1,方差约为 1。根据切比雪夫不等式,任何一个箱子的负载超过 1 + k 的概率至多为 1/k²。例如,负载超过 11 的概率至多为 1/100。对所有 n 个箱子应用并集界限可知,存在一个负载超过 11 的箱子的概率至多为 n/100。这暗示期望最大负载最多是 O(√n) 量级。

然而,更精确的答案(利用我们即将发展的技术)是 O(log n / log log n)。如果我们有时间,还会讨论“二选一”策略:每个球随机选择两个箱子,并放入当前负载较小的那个。在这种策略下,期望最大负载仅为 O(log log n)!这是一个显著的改进。

切尔诺夫界

切比雪夫界给出了二次下降,但我们可以得到更好的指数下降,这就是切尔诺夫界(也称为霍夫丁界或伯恩斯坦界)。

切尔诺夫界陈述

X₁, X₂, ..., Xₙ 是独立的随机变量,且满足 0 ≤ Xᵢ ≤ 1。令 S = Σᵢ Xᵢμ = E[S]

那么,对于任意 ε > 0,有:

P(S ≥ (1+ε)μ) ≤ exp(-ε²μ / 3)   (对于 0 < ε ≤ 1)
P(S ≤ (1-ε)μ) ≤ exp(-ε²μ / 2)

更一般的形式是:对于任意 t > 0,有:

P(S ≥ μ + t) ≤ exp( -t² / (2μ + 2t/3) )
P(S ≤ μ - t) ≤ exp( -t² / (2μ) )

切尔诺夫界的威力

与切比雪夫界的二次下降相比,切尔诺夫界提供了指数下降(或高斯型下降)。这意味着,要获得一个像 1/poly(n) 这样小的失败概率,我们只需要偏离期望值 O(√(log n)) 量级,而不是 O(√n) 量级。

应用回球箱模型:对于单个箱子,负载超过 1 + 5 log n 的概率,利用切尔诺夫界可以约束为 exp(-Θ(log² n)),这小于 1/n²(通过选择合适的常数)。然后应用并集界限可知,所有箱子的负载都小于 O(log n) 的概率很高。这样我们就轻松地将上界从 √n 改进到了 log n

应用:超立方体上的随机路由

现在,我们来看一个更复杂的应用:超立方体上的随机路由。

问题描述

考虑一个 d 维超立方体 Q_d,它有 2^d = n 个顶点。每个顶点最初有一个数据包,每个包需要发送到另一个顶点,且所有目的地构成一个置换(即每个顶点恰好是一个包的目的地)。数据包沿着超立方体的边传输。每条边在每个时间步只能发送一个包。每个顶点为其每条出边维护一个队列。目标是设计一个路由方案,使得所有包都能在尽可能短的时间内到达目的地。

一个朴素的路由算法是比特修正路由:每个包从左到右检查其当前地址与目的地址的比特,修正第一个不同的比特,如此重复直到到达目的地。然而,这个算法存在最坏情况:存在特定的置换,使得许多包必须通过同一个中间节点,导致完成时间至少为 Ω(√n / log n),而不是我们希望的 O(d) = O(log n)

瓦利安特-布雷布纳算法

一个更好的随机算法是瓦利安特-布雷布纳算法

  1. 第一阶段:对于每个起始顶点 i 的包,随机选择一个超立方体中的顶点 r_i 作为中间点。使用比特修正路由将包从 i 发送到 r_i
  2. 第二阶段:使用比特修正路由将包从 r_i 发送到其最终目的地 π(i)

定理:对于任意固定的置换 π,以高概率(超过随机中间点的选择),所有包都能在 O(d) 步内送达。

证明思路(第一阶段)

我们聚焦于证明第一阶段能在 O(d) 步内以高概率完成。第二阶段的证明是对称的。证明基于以下几个关键断言:

  1. 期望负载低:对于任何一条边 e,使用它的路径的期望数量很小(通过对称性计算约为 1/2)。
  2. 路径相交性质:两条比特修正路径最多在一个连续的线段上相交(不会分叉再合并)。
  3. 延迟引理:一个包 i 的延迟最多是其路径长度加上与其路径相交的其他包的数量。
  4. 相交包数量有界:以高概率,对于每个包 i,与其路径相交的其他包的数量 S_i 最多为 O(d)

结合这些断言:每个包路径长度最多为 d,与其相交的包数最多为 O(d),因此总延迟为 O(d)

切尔诺夫界的用武之地

断言4的证明正是使用切尔诺夫界的地方。S_i 是许多指示变量(包 j 的路径是否与包 i 的路径相交)的和。这些指示变量是独立的(因为中间点 r_j 是独立选择的)且有界(0或1)。我们已经知道 E[S_i] ≤ d/2(因为路径期望长度为 d/2,且每条边上的期望相交数通过对称性计算很小)。直接应用切尔诺夫界,我们可以证明 P(S_i ≥ 4d) 是指数小的(如 exp(-Ω(d)) = n^{-Ω(1)})。然后通过并集界限,所有包 i 都满足 S_i ≤ 4d 的概率很高。

这样就完成了证明的核心。延迟引理(断言3)有一个巧妙的组合证明,它通过“滞后值”的概念,将包 i 的每次延迟唯一地归咎于某个以特定滞后值离开其路径的其他包,从而确保总延迟不超过路径长度加上相交包数。

总结

本节课中,我们一起学习了集中度量这一核心概率工具。我们从基础的马尔可夫不等式和切比雪夫不等式出发,了解了它们如何提供随机变量偏离期望的界。然后,我们重点学习了更强大的切尔诺夫界,它对于独立有界随机变量之和,能给出指数衰减的尾概率界。我们通过球箱模型的例子,看到了切尔诺夫界如何将最大负载的界从 O(√n) 改进到 O(log n)。最后,我们探讨了超立方体上随机路由这一复杂应用,展示了如何利用切尔诺夫界来分析随机算法的性能,并证明了瓦利安特-布雷布纳算法能在 O(log n) 步内以高概率完成路由。这些尾概率界是分析随机算法时不可或缺的工具。

12:测度集中 II

在本节课中,我们将继续学习测度集中理论。首先,我们将回顾并详细展示Valiant和Brehner的“收费论证”证明。随后,我们将深入探讨切尔诺夫界的证明过程,并了解其扩展形式。最后,我们将介绍维度约简的基本思想,这是切尔诺夫界的一个强大应用。

Valiant-Brehner 收费论证回顾

上一节我们介绍了在超立方体网络中数据包路由的延迟分析问题。本节中,我们来看看Valiant和Brehner提出的“收费论证”证明细节。

该论证的核心思想是:每个数据包I的延迟不会超过其路径长度加上干扰它的其他数据包数量。形式化地说,设数据包I的路径为P,长度为|P|。设S_I为所有路径与P至少共享一条边的其他数据包的集合。定理表明,数据包I到达目的地的时间最多为 |P| + |S_I|。

以下是论证的关键步骤:

  1. 生成令牌:每当数据包I被延迟一个时间单位,它就生成一个令牌。
  2. 传递令牌:这个令牌会被当时导致I延迟的那个数据包携带。
  3. 令牌限制:每个数据包在任何时刻最多携带一个令牌。
  4. 令牌离场:当其他数据包离开路径P或到达目的地时,它们会各自携带一个令牌离开。

由于最多有|S_I|个其他数据包,每个最多携带一个令牌离开,因此I最多能被延迟|S_I|次。加上路径本身的长度|P|,就得到了总时间上界。

这个论证通过动画演示可以更清晰地理解:令牌在导致延迟的数据包之间传递,并最终随这些数据包离开系统,从而限制了总延迟次数。

切尔诺夫界证明

现在,让我们回到测度集中性的核心工具——切尔诺夫界,并详细看看其证明过程。

设X_1, ..., X_n为独立的随机变量,取值于[0,1]。记μ_i = E[X_i],S = Σ_{i=1}^n X_i,μ = E[S] = Σ μ_i。切尔诺夫界指出,对于任意λ > 0:
P(S ≥ μ + λ) ≤ exp( -λ²/(2(μ+λ)) )
P(S ≤ μ - λ) ≤ exp( -λ²/(2μ) )

我们将证明上尾不等式。证明的核心是使用矩母函数和马尔可夫不等式。

证明步骤:

  1. 引入指数函数:对于任意t > 0,有:
    P(S ≥ μ + λ) = P( e^{tS} ≥ e^{t(μ+λ)} )

  2. 应用马尔可夫不等式
    P( e^{tS} ≥ e^{t(μ+λ)} ) ≤ E[e^{tS}] / e^

  3. 利用独立性分解矩母函数
    E[e^{tS}] = E[ Π_{i=1}^n e^{tX_i} ] = Π_{i=1}^n E[e^{tX_i}]

  4. 计算单个矩母函数:由于X_i ∈ [0,1]且E[X_i]=μ_i,有:
    E[e^{tX_i}] = (1-μ_i)e^{t0} + μ_ie^{t1} = 1 - μ_i + μ_i e^t

  5. 组合并应用不等式:我们需要最小化这个上界。通过一系列代数运算(包括使用不等式1+x ≤ e^x及其反向形式),并对参数t进行优化(求导并令其为零),最终可以得到:
    P(S ≥ μ + λ) ≤ exp( - (μ+λ) log(1 + λ/μ) + λ )
    进一步简化即可得到标准形式 exp( -λ²/(2(μ+λ)) )。

证明的关键技巧在于通过指数变换放大偏差,利用独立性分解期望,然后通过优化自由参数t来得到最紧的界。

切尔诺夫界的扩展

切尔诺夫界的基础形式要求随机变量独立。然而,在许多实际场景中,我们可以放宽条件。

以下是几种重要的扩展情况:

  • 负相关:如果随机变量是负相关的(例如,从n个元素中随机抽取k个,指示变量是否被选中),那么类似切尔诺夫的不等式仍然成立。
  • 鞅差序列:对于鞅差序列(即E[X_i | X_1,...,X_{i-1}] = 0),即使变量不独立,也有阿祖马不等式等形式给出集中性保证。
  • 对数矩母函数与散度:切尔诺夫界可以优雅地用对数矩母函数ψ(t) = log E[e^{tX}]及其勒让德变换(或称为速率函数)I(a) = sup_{t>0} {at - ψ(t)} 来表示。对于伯努利变量,I(a)恰好是KL散度D(a||p)。这种表述将概率尾界与信息论中的散度联系起来。

这些扩展使得切尔诺夫界能够应用于更广泛的随机过程和分析中。

维度约简简介

最后,我们探讨切尔诺夫界的一个经典应用:约翰逊-林登斯特劳斯引理,它揭示了维度约简的惊人可能性。

问题的核心是:给定高维空间中的n个点,能否将它们映射到低得多的维度的空间中,同时近似保持所有点对之间的距离?

约翰逊-林登斯特劳斯引理指出,对于任意ε∈(0,1),存在一个映射f: R^D → R^k,其中k = O(ε^{-2} log n),使得对于原始点集S中任意两点x,y,其像的距离满足:
(1-ε) ||x-y||² ≤ ||f(x)-f(y)||² ≤ (1+ε) ||x-y||²

更令人惊讶的是,这样的映射可以简单地通过一个随机线性变换来实现。

构造方法:
令映射f(x) = (1/√k) * M x,其中M是一个k×D的随机矩阵,其每个元素M_{ij}独立地服从标准正态分布N(0,1)。

证明思路(概要):

  1. 只需证明对于任意单位向量u(即||u||=1),其像的长度平方||f(u)||²集中在1附近。
  2. 注意到f(u)的第j个分量为(1/√k) Σ_{i=1}^D M_{ji} u_i。由于M_{ji}是独立高斯变量,这个和是一个高斯随机变量,其方差为Σ u_i² = 1。
  3. 因此,||f(u)||² = (1/k) Σ_{j=1}^k (高斯变量_j)²,即k个独立的标准高斯随机变量的平方和的平均值。
  4. 这个表达式是卡方分布除以k。我们可以计算其矩母函数,并应用切尔诺夫界来证明,当k足够大(~ log(1/δ)/ε²)时,有很高的概率使得| ||f(u)||² - 1 | ≤ ε。
  5. 最后,对所有的点对差向量(共n(n-1)/2个)应用此结论,并利用联合界,即可证明映射f以高概率保持所有点对距离。

这个结论意味着,即使将数据投影到维度仅为O(log n)的空间中,其几何结构也能得到极大程度的保留,这在机器学习、数据压缩和算法设计中有广泛应用。

总结

本节课中我们一起学习了:

  1. Valiant-Brehner收费论证的完整演示,该论证巧妙地使用令牌传递来界限网络路由延迟。
  2. 切尔诺夫界的详细证明过程,包括使用矩母函数、马尔可夫不等式和优化技巧。
  3. 切尔诺夫界的几种重要扩展,如负相关情形和鞅差序列,以及其与对数矩母函数、速率函数的关系。
  4. 约翰逊-林登斯特劳斯引理的基本陈述和随机构造方法,这是切尔诺夫界在维度约简中的一个深刻应用,展示了高维数据可以有效地被压缩到对数维度而几乎保持距离结构。

13:降维与压缩感知

在本节课中,我们将学习降维技术,特别是Johnson-Lindenstrauss引理,并探讨其一个令人印象深刻的应用——压缩感知。我们将看到,一旦证明了这样的降维结果,几乎可以“免费”获得其他有趣的算法思想。

回顾:Johnson-Lindenstrauss引理

上一节我们开始讨论降维,并提到了Johnson-Lindenstrauss引理。该引理指出,给定D维空间中的n个点(D非常大),存在一个映射,可以将这些点从D维降至 O(log n / ε²) 维,同时以高概率保持所有点对之间的距离,误差在 (1 ± ε) 因子内。

这与奇异值分解(SVD)不同,SVD在某种意义上是保持系统的“能量”,而Johnson-Lindenstrauss引理是保持所有成对距离。

构造与证明思路

该引理的构造出奇地简单。它是一个随机化算法,核心是构造一个矩阵 M

构造

  • 矩阵 M 是一个 k × d 的矩阵,其中每个条目 M_ij 都是独立的标准高斯随机变量。
  • 映射 f 定义为:f(x) = (1/√k) * M * x

主要断言
对于任意固定的单位向量 x,其映射后的长度平方(即 ||f(x)||²)以高概率被保持。

由于映射是线性的,我们可以将此断言应用于所有点对的差向量(适当缩放后),然后通过并集界限(union bound)即可证明Johnson-Lindenstrauss引理。因此,证明的重心在于证明上述断言。

直观理解

我们想将高维空间中的点投影到一个随机选择的k维子空间上。如何均匀随机地选择一个k维子空间?

一种方法是:先随机选取一个单位向量作为第一个基向量,然后在与第一个向量正交的空间中随机选取第二个向量,依此类推。然而,在高维空间中,如果我们只是独立地随机选取单位向量,它们几乎就是正交的。这是因为在高维球面上,绝大多数质量都集中在任何“赤道”附近的狭窄带状区域中。

因此,我们可以近似地通过独立选取高斯随机向量(其方向是球对称的)来构建这个“几乎正交”的基。矩阵 M 的每一行就对应这样一个基向量。缩放因子 1/√k 是为了归一化。

从降维到压缩感知

现在,我们来看一个由降维思想衍生出的强大应用——压缩感知。其核心思想是:如果一个信号是稀疏的,那么可以用非常少的测量值来恢复它。

问题设定

假设有一个未知的向量 x ∈ R^n。我们可以进行测量:每次提供一个向量 a,得到内积结果 a·x。我们的目标是通过尽可能少的测量来确定 x

一个简单的方法是使用单位向量进行测量(例如 a1 = (1,0,...,0)a2 = (0,1,...,0) 等),这需要 n 次测量。但如果已知 x 是稀疏的,即其非零元素的数量 ||x||_0 ≤ ss 远小于 n),我们能否用远少于 n 次的测量来恢复它?

关键思路:约束等距性(RIP)

以下是解决问题的关键思路和步骤:

第一步:构造测量矩阵
我们不再使用单位向量,而是使用一个精心设计的矩阵 A(称为感知矩阵)的行作为测量向量。设 Am 行(即 m 次测量),n 列。测量结果 b = A * x

第二步:利用稀疏性求解
我们想从 b = A * x 中恢复稀疏的 x。直接最小化 ||x||_0(非零元素个数)是一个NP难问题。一个巧妙的松弛方法是改为最小化 ||x||_1(L1范数)。这个方法被称为基追踪(Basis Pursuit)

第三步:理论保证
那么,什么条件下,最小化L1范数会得到与最小化L0范数相同的解(即真实的稀疏信号)?答案与感知矩阵 A 的一个性质有关,称为约束等距性(Restricted Isometry Property, RIP)

定义(RIP性质)
矩阵 A 满足 (s, ε)-RIP,如果对于所有最多有 s 个非零元素的向量 x,都有:
(1 - ε) ||x||² ≤ ||A x||² ≤ (1 + ε) ||x||²
这意味着 A 近似保持所有 s-稀疏向量的长度。

定理(Donoho等人)
如果感知矩阵 A 满足 (3s, ε)-RIP 性质(其中 ε 足够小,例如小于1/10),那么通过求解基追踪问题(最小化 ||x||_1 且满足 A x = b)可以精确恢复任何 s-稀疏的信号 x

第四步:如何获得RIP矩阵?
令人惊喜的是,我们熟悉的Johnson-Lindenstrauss型矩阵恰好满足RIP!具体来说:

  • A 为一个 m × n 的随机矩阵,其每个条目独立地服从高斯分布 N(0, 1/m) 或等概率的 {+1/√m, -1/√m}
  • 如果测量次数 m 满足 m = O(s log(n/s)),那么以高概率,矩阵 A 满足 (s, ε)-RIP 性质。

证明概览(L1最小化等价于L0最小化)

假设真实的稀疏信号是 x*,测量结果为 b = A x*。设通过基追踪得到的解为 ,满足 A x̃ = b||x̃||_1 ≤ ||x*||_1(因为 x* 也是一个可行解)。

定义误差向量 δ = x̃ - x*,则有 A δ = 0

证明的核心思路是分析 δ 的结构:

  1. 由于 ||x̃||_1 ≤ ||x*||_1,可以推导出误差 δx* 的支撑集 S 之外的部分(δ_{S^c})的L1范数,被 S 内的部分(δ_S)的L1范数所控制。
  2. 利用 A δ = 0 和矩阵 A 的RIP性质(特别是对 3s-稀疏向量的等距性),可以证明 δ 的能量(L2范数)必须主要集中在其最大的 3s 个分量上。
  3. 结合上述两点,最终可以推导出 δ 必须为零向量,即 x̃ = x*。这就证明了基追踪能精确恢复稀疏信号。

关于随机矩阵满足RIP的证明,其思路与Johnson-Lindenstrauss引理的证明类似:对所有可能的 s-稀疏向量支撑集进行并集界限,然后在每个固定的支撑集上,利用随机投影保持子空间中向量长度的概率结论。

总结

本节课我们一起学习了:

  1. Johnson-Lindenstrauss引理:通过随机高斯投影,可以将高维数据大幅降维并近乎完美地保持距离结构。其证明依赖于随机向量在高维空间中的几何性质(如几乎正交性)和概率集中不等式。
  2. 压缩感知:作为降维思想的一个深刻应用,它表明稀疏信号可以用远少于信号长度的测量值来恢复。关键步骤是使用满足RIP性质的随机矩阵进行测量,并通过求解L1范数最小化问题(一个线性规划)来重构信号。
  3. 理论连接:随机高斯/伯努利矩阵同时是Johnson-Lindenstrauss变换和压缩感知中理想感知矩阵的实例,这体现了不同领域间数学工具的统一与优美。

从数据降维到信号采集,这些概念展示了随机化和高维几何在现代算法设计中的强大力量。

14:流式算法与压缩感知

在本节课中,我们将完成对压缩感知理论的探讨,并初步介绍流式算法的基本概念。我们将学习如何通过L1最小化来恢复稀疏信号,并了解在数据流模型中如何用极小的空间进行近似计算。


压缩感知回顾

上一节我们介绍了压缩感知的基本问题:我们希望从一个观测向量 b 中恢复一个稀疏信号 x,其中 b = A xA 是我们设计的感知矩阵。

我们希望通过解决以下L1最小化问题(也称为基追踪)来找到 x

\min \|x\|_1 \quad \text{subject to} \quad A x = b

理论上,如果矩阵 A 满足特定条件,这个凸优化问题的解就是原始稀疏信号 x

为什么使用L1范数?

L1最小化是L0最小化(寻找非零项最少的解,这是一个NP难问题)的有效凸松弛。直观上,L1范数的单位球在坐标轴方向上是“尖”的,这使得最小化L1范数倾向于产生稀疏解(即许多分量为零)。相比之下,L2范数的单位球是光滑的球体,其解通常不稀疏。


限制等距性质

我们通过一个称为 限制等距性质 的概念来保证 A 的良好性能。

定义(RIP): 一个矩阵 A 满足 k 阶限制等距性质,如果存在一个小的常数 δ,使得对所有 k-稀疏向量 x,都有:

(1 - \delta) \|x\|_2^2 \leq \|A x\|_2^2 \leq (1 + \delta) \|x\|_2^2

这意味着 A 几乎保距地作用于所有稀疏向量。

我们的证明分为两个核心部分:

  1. 声明一: 如果一个矩阵 A3s-稀疏向量满足RIP,那么用它作为感知矩阵进行L1最小化,就能精确恢复出任何 s-稀疏信号 x
  2. 声明二: 一个随机的 m × n 矩阵(例如,元素为独立高斯随机变量)在行数 m 约为 O(s log(n/s)) 时,能以高概率满足RIP。

声明一的证明思路

x* 是真实的 s-稀疏信号, 是L1最小化得到的解。定义 Δ = x̂ - x*。由于两者都满足 A x = b,我们有 A Δ = 0

证明的关键在于展示 Δ 必须为零向量。我们通过以下步骤进行:

  • Δ 的坐标分组:第一组 Sx* 的支撑集,剩下的坐标按绝对值大小分到桶 B1, B2, ... 中,每个桶大小为 s
  • 利用 A 的RIP性质,A 会保持每个稀疏块(如 Δ_S, Δ_Bj)的长度。
  • 利用 是L1最小化解的事实,可以推导出 ΔS 上的L1范数大于在其余部分上的L1范数。
  • 通过巧妙的“桶间比较”论证,可以证明 ΔS 之外部分的总L2范数远小于 ΔS ∪ B1 上的L2范数。
  • 结合 A Δ = 0 以及三角不等式,最终迫使 Δ = 0,从而证明 x̂ = x*。

这个证明运用了分组、范数比较和充电论证等技巧。


从有限点集到整个空间

声明二的证明需要证明随机矩阵能同时保持所有稀疏向量的长度。我们无法对无限个向量进行联合界,因此采用以下策略:

  1. 固定支撑集: 首先固定一个大小为 s 的坐标子集 S,只考虑支撑在 S 上的向量。
  2. 构造ε-网: 在 s 维单位球面上选取一个有限的点集 N(称为ε-网),使得球面上任何点都与 N 中某个点的距离不超过 ε。
  3. 保证网上的点: 证明随机矩阵 A 能以高概率保持 N 中所有点的长度(利用Johnson-Lindenstrauss引理类似的论证)。
  4. 扩展到整个球面: 利用线性性和三角不等式,论证如果 A 保持了网上所有点的长度,那么它就能保持球面上所有点的长度(误差会放大,但可控)。
  5. 对所有支撑集取并集: 最后,对所有可能的 s 大小支撑集进行联合界。支撑集的数量是 C(n, s),网的大小是 O(1/ε)^s。通过设置足够的行数 m,可以抵消这些数量,使得整体失败概率很小。

ε-网、覆盖/打包以及从有限样本推广到连续空间的思路,在高维几何和算法中非常常见。


流式算法简介

现在,我们转向一个不同的计算模型——流式模型。在该模型中,数据以一个很长的序列(流)的形式依次到达,算法只能单遍扫描数据,并且只能使用远小于数据量的内存空间。

模型与动机

想象一个网络路由器,每秒钟需要处理数百万个数据包。它没有足够的内存存储所有数据包信息,但需要实时计算一些重要的统计量,如不同IP地址的数量、高频数据流等。

流式算法的核心是利用随机化近似,在极小的空间(通常是亚线性空间,如对数或多对数空间)内,给出具有理论保证的近似答案。


流式算法示例

以下是几个经典的流式问题及其简单算法。

1. 多数元素问题

问题: 给定一个数据流,如果存在一个元素出现次数严格超过总元素数的一半,则找出该元素;否则,可以返回任意结果。

以下是解决该问题的算法,它仅需 O(1) 空间(存储一个候选元素和一个计数器):

  • 初始化: 候选元素 cand = None,计数器 count = 0
  • 对于流中每个元素 x
    • 如果 count == 0,则设 cand = xcount = 1
    • 否则,如果 x == cand,则 count += 1
    • 否则,count -= 1
  • 最终返回 cand

直观理解: 该算法可以看作是一个“配对相消”的过程。每次遇到两个不同的元素,就将它们“配对”并消除。如果存在绝对多数元素,那么经过所有配对后,剩下的元素一定是它。

2. 计数-最小草图

问题: 在一个数据流中,元素会不断被插入(insert)或删除(delete)。我们需要随时回答关于任意元素 e 的查询:当前流中 e 的(近似)计数是多少?

一个朴素的方法是维护一个大小为 n(元素全集大小)的数组来计数,但空间开销太大。

计数-最小草图 提供了一个更节省空间的近似方案:

  • 我们维护一个宽度为 w、深度为 d 的二维计数器数组 count[d][w],以及 d 个两两独立的哈希函数 h1...hd,每个函数将元素映射到 {0,..., w-1}
  • 更新: 当遇到元素 e 的插入时,对每一行 i,执行 count[i][hi(e)] += 1。删除则执行 -= 1
  • 查询: 当查询元素 e 的计数时,返回 min_{i=1 to d} count[i][hi(e)]

原理: 由于哈希冲突,count[i][hi(e)] 的值是 e 的真实计数与其他哈希到同一位置元素计数的总和,因此它总是高估真实值。取 d 行中的最小值有助于减少这种高估误差。通过设置合适的 wd,可以以高概率保证查询误差在可控范围内。

这个思想也被应用于 布隆过滤器 等数据结构中。


总结

本节课我们一起学习了两个重要主题。
首先,我们完成了对压缩感知的讨论,理解了如何通过满足RIP性质的随机感知矩阵和L1最小化来高效恢复稀疏信号,并探讨了其背后的证明技巧。
其次,我们引入了流式算法模型,了解了在内存受限、数据持续到达的场景下如何进行近似计算。我们看到了像“多数投票”和“计数-最小草图”这样巧妙而高效的算法,它们用极小的空间解决了看似困难的问题。
这些内容展示了现代算法设计中,利用概率、近似和高维几何思想来突破传统计算限制的威力。

15:专家算法与在线学习 🧠

在本节课中,我们将要学习一个被称为“专家算法”的强大工具,它是“在线学习”领域的起点。我们将探讨加权多数算法及其近亲Hedge算法,并了解它们如何解决专家问题。最后,我们会简要提及“赌博机”问题,并理解这些概念是如何联系在一起的。

问题设定:专家问题

专家问题的设定如下:有 n 个专家。这里的“专家”只是指有观点的人,并不需要在任何可量化的意义上成为真正的专家。每一天 t,会发生以下过程:

  1. 每个专家做出一个预测。
  2. 你根据这些预测做出一个决策。
  3. 你观察到实际的结果。
  4. 如果你的决策与实际结果不符,你就犯了一个错误。

你的目标自然是尽量减少你犯错误的总数。

完美专家的简单情况

首先,我们考虑一个简单情况:假设存在一个从不犯错的完美专家。

以下是解决此问题的一种算法思路:

  • 从专家1开始,一直遵循他的预测,直到他犯错。
  • 一旦他犯错,就将他排除,转向专家2,依此类推。
  • 如果专家 N 是那个完美专家,那么在最坏情况下,你最多会犯 N-1 个错误。

然而,这个算法可以被对手轻易地迫使你犯 N-1 个错误。一个更好的确定性算法是遵循“多数意见”:每天,选择大多数专家预测的结果。如果多数意见错了,那么至少有一半的专家是错的,你可以将他们排除。这个过程就像二分搜索,你最多会犯 log₂ N 个错误。

加权多数算法

上一节我们介绍了存在完美专家时的简单算法。本节中,我们来看看更现实的情况:没有完美专家,但存在一个犯错误最少的“最佳专家”。

加权多数算法是一个强大的确定性算法,其思路如下:

  • 初始化:为每个专家 i 分配初始权重 w_i = 1
  • 预测:在每一天 t,根据专家们的预测和权重计算加权多数意见,并选择该意见作为你的决策。
  • 更新:观察结果后,对于每一个预测错误的专家,将其权重乘以 1/2(或一个小于1的因子)。

这个算法的性能可以用以下定理描述:
定理:设最佳专家在整个过程中犯了 M 个错误。那么,加权多数算法犯的错误数最多为 ≈ 2.4 * (M + log₂ N)

证明概要(使用势函数法)

  1. 定义势函数 Φ_t 为时间 t 时所有专家权重的总和。初始势 Φ_0 = N
  2. 观察势函数的变化:
    • 如果算法没有犯错,势函数可能下降,但不会上升。
    • 如果算法犯错,那么至少有一半的权重(加权多数意见的权重)在错误的专家身上。这些专家的权重被减半,因此势函数至少减少到原来的 3/4
  3. 另一方面,最佳专家犯了 M 次错,其最终权重至少为 (1/2)^M。由于权重非负,最终势函数 Φ_final ≥ (1/2)^M
  4. 结合以上两点,我们有 (1/2)^M ≤ Φ_final ≤ (3/4)^A * N,其中 A 是算法犯错的次数。
  5. 两边取对数并整理,即可得到 A ≤ 2.4 (M + log₂ N)

这个证明简洁而强大,是算法分析中势函数法的经典应用。

确定性算法的局限与随机化

上一节我们分析了确定性加权多数算法的性能。本节中,我们来看看为什么需要随机化,以及随机化如何带来更好的理论保证。

对于确定性算法,存在一个根本限制:没有任何确定性算法能保证犯错数少于最佳专家的两倍。考虑一个简单反例:只有两个专家,一个总是预测“是”,另一个总是预测“否”。无论你的确定性算法如何选择,对手都可以宣布相反的结果为真实结果,从而使你每天都犯错。然而,其中一个专家总是对的(至少一半的时间是对的)。因此,你的错误数至少是最佳专家错误数的两倍。

这就引出了随机化加权多数算法。其核心思想是:不再确定性地选择加权多数意见,而是以与权重成比例的概率随机选择一个专家,并遵循他的预测

以下是随机化加权多数算法的步骤:

  • 初始化:每个专家的权重 w_i = 1
  • 预测:在时间 t,以概率 p_i(t) = w_i(t) / (∑_j w_j(t)) 随机选择专家 i,并采用他的预测。
  • 更新:观察到损失向量 l_t(例如,专家 i 犯错则 l_t[i]=1,否则为0)后,更新权重:w_i(t+1) = w_i(t) * (1 - ε)^{l_t[i]},其中 ε 是一个小参数(0 < ε ≤ 1/2)。

这个算法的性能保证非常出色:
定理:对于任意 ε (0 < ε ≤ 1/2),随机化加权多数算法的期望错误数最多为 (1+ε) * M + (ln N)/ε,其中 M 是最佳专家犯的错误数。

M 较大时,算法犯错的比率趋近于最佳专家的犯错比率 M/T(其中 T 是总轮数),仅多出一个 ε 的因子,外加一个与专家数 N 相关的对数项“启动成本”。这比确定性算法的“2倍”保证要好得多。

乘性权重算法框架

随机化加权多数算法可以推广到一个更通用的在线决策框架,称为乘性权重算法(或 Hedge 算法)。

在这个框架中,每一轮 t

  1. 算法选择一个概率分布 p_t(在 N 个选项的单纯形上)。
  2. 对手(或环境)选择一个损失向量 l_t,其每个分量在 [0, 1] 区间(或 [-1, 1])。
  3. 算法遭受的损失是内积 <p_t, l_t>
  4. 算法根据观察到的损失向量更新权重:w_i(t+1) = w_i(t) * (1 - ε * l_t[i])。一个等价的常用形式是 w_i(t+1) = w_i(t) * exp(-ε * l_t[i])(Hedge 更新)。

定理(乘性权重/Hedge):对于上述算法,对于任意专家 i,算法的总期望损失满足:
∑_t <p_t, l_t> ≤ (1+ε) * ∑_t l_t[i] + (ln N)/ε
或者,采用 exp 更新时,有更紧的界:∑_t <p_t, l_t> ≤ ∑_t l_t[i] + ε * ∑_t (l_t[i])^2 + (ln N)/ε

这个定理是在线学习领域的基石之一。它意味着,在 hindsight(事后看来),算法的累积表现可以与任何一个固定专家的累积表现相媲美,仅差一个很小的 ε 因子和一个对数项。证明同样基于势函数 Φ_t = ∑_i w_i(t) 的分析,思路与前文类似。

总结与展望

本节课中我们一起学习了专家问题及其核心算法。

  • 我们从存在完美专家的简单情况入手,理解了多数投票和二分搜索的思想。
  • 接着,我们介绍了加权多数算法,这是一个确定性算法,其错误数约是最佳专家的 2.4 倍加上一个对数项。我们使用势函数法完成了优雅的证明。
  • 然后,我们认识到确定性算法的理论极限(2倍),从而引入了随机化加权多数算法。该算法以概率方式选择专家,实现了期望错误数 (1+ε) 倍于最佳专家加上 (ln N)/ε 的更强保证。
  • 最后,我们将问题抽象为更通用的乘性权重(Hedge) 在线决策框架,该框架通过指数权重更新,保证了算法累积损失与任一固定决策者累积损失的可比性。

这些简单而深刻的算法和证明是在线学习、博弈论乃至优化算法设计中的基础工具。在接下来的课程中,我们将探讨如何将这些思想应用于“赌博机”等更复杂的场景,在只能获得部分反馈(而非完整损失向量)的情况下做出决策。

16:次模函数

在本节课中,我们将要学习次模函数。这是一种在组合优化、机器学习等领域中非常强大的抽象概念,它描述了“收益递减”的性质。我们将了解其定义、例子、性质以及相关的优化算法。

概述

我们之前见过许多经典的组合优化问题,例如最大匹配、最小生成树、最大割、最小割以及集合覆盖问题等。一般来说,组合优化问题可以写成以下形式:

最小化/最大化 f(S)
约束条件: S ∈ ℱ

其中,U 是基础元素集(例如图中的边), 是可行解集合(例如所有生成树的集合)。到目前为止,我们主要优化的是线性目标函数,即每个元素有一个权重,集合的成本就是其元素权重的线性求和。

线性(模)函数

对于一个集合函数 f,如果我们向已选集合 S 中添加一个新元素 e,其成本的增加量总是等于 e 自身的权重,而与 S 的具体内容无关,那么这个函数就是线性的或模的。形式化地,对于所有 S ⊆ Ue ∉ S,有:

f(S ∪ {e}) - f(S) = w(e)

这个性质等价于函数可以表示为 f(S) = Σ_{e∈S} w(e) + C(其中 C 是常数)。我们之前处理的大多数问题都涉及这种模函数。

次模函数的定义

然而,现实世界中的许多成本或收益函数并不满足这种简单的线性关系。例如,在商店购物时,购买的商品越多,新增一件商品的边际成本(由于折扣)可能会降低。这种“收益递减”的性质正是次模函数所刻画的。

次模函数有两种等价的定义方式:

定义一(收益递减):
一个集合函数 f: 2^U → ℝ 是次模的,如果对于所有 A ⊆ B ⊆ U 和所有 e ∉ B,满足:

f(A ∪ {e}) - f(A) ≥ f(B ∪ {e}) - f(B)

这意味着,当你的已有集合更大时,添加一个新元素带来的边际收益(或成本增加)不会变大,反而可能变小或保持不变。

定义二(并交不等式):
一个集合函数 f 是次模的,如果对于所有子集 A, B ⊆ U,满足:

f(A) + f(B) ≥ f(A ∪ B) + f(A ∩ B)

这个定义在证明某些性质时非常有用。

次模函数的例子

以下是次模函数的一些常见例子:

1. 覆盖函数
假设有多个社区(集合),每个人(元素)属于某些社区。选择一个人可以“覆盖”他所属的所有社区。覆盖函数 f(S) 定义为集合 S 中的人所覆盖的社区总数。这是一个次模函数,因为当你已经选择了一些人后,新增一个人能带来的新社区数量(边际收益)会减少。

2. 拟阵秩函数
给定一个拟阵,其秩函数 r(S) 定义为集合 S 中包含的最大独立集的大小。这个函数是次模的(也是单调的)。

3. 熵函数
设有 n 个随机变量 X1, ..., Xn。对于子集 S ⊆ [n],定义 f(S) 为这些随机变量 {Xi | i∈S} 的联合熵。这个函数是次模的。

4. 图割函数
对于一个图(有向或无向),给定顶点子集 S,割函数 f(S) 定义为从 S 指向其补集 V\S 的边的数量(对于无向图,是连接 SV\S 的边的数量)。这是一个次模函数,但它不是单调的(选择更多顶点可能使割值变小)。

单调性与对称性

  • 单调性:如果对于所有 A ⊆ B,有 f(A) ≤ f(B),则函数 f 是单调的。覆盖函数、拟阵秩函数是单调次模的。图割函数是非单调次模的。
  • 对称性:如果对于所有子集 S,有 f(S) = f(U \ S),则函数 f 是对称的。无向图的割函数是对称次模的。一个单调且对称的函数只能是常数函数。

优化问题与访问模型

现在,我们考虑在约束条件下优化次模函数,例如:

最大化 f(S)
约束条件: |S| ≤ k

其中 f 是次模函数。我们假设通过一个价值预言机来访问函数:输入一个集合 S,预言机返回 f(S)。算法的效率以查询预言机的次数来衡量。

单调次模函数的最大化(贪婪算法)

对于单调次模函数在基数约束 |S|≤k 下的最大化问题(例如最大 k 覆盖问题),一个简单的贪婪算法能提供优秀的近似解。

算法描述:

  1. 初始化 S = ∅
  2. 进行 k 轮迭代,每轮中:
    • 找到能使边际收益 f(S ∪ {e}) - f(S) 最大的元素 e ∉ S
    • e 加入集合 S
  3. 返回集合 S

近似比分析:
该贪婪算法能保证找到的解 S 满足:

f(S) ≥ (1 - 1/e) * f(OPT) ≈ 0.632 * f(OPT)

其中 OPT 是最优解。这个近似比是紧的,因为最大 k 覆盖问题存在同等的近似难度下界。

证明思路(简述):
St 为第 t 轮迭代后的集合,OPT 为最优解。定义 uncover(t) = f(OPT) - f(St) 为剩余未覆盖的“价值”。关键步骤是证明在每一轮,贪婪选择的元素带来的边际收益至少是 uncover(t) / k。由此可推导出 uncover(t+1) ≤ (1 - 1/k) * uncover(t)。经过 k 轮后,uncover(k) ≤ (1-1/k)^k * f(OPT) ≤ f(OPT)/e,因此 f(Sk) = f(OPT) - uncover(k) ≥ (1-1/e)f(OPT)

非单调对称次模函数的最大化(随机算法)

对于非单调但对称的次模函数(如无向图最大割),最大化问题没有基数约束。一个极其简单的算法是:随机选择一个集合。即,独立地以 1/2 的概率决定每个元素是否属于 S

近似比分析:
对于任何非负的对称次模函数,随机算法返回的集合 S 的期望价值满足:

E[f(S)] ≥ (1/2) * f(OPT)

这是一个 1/2 近似的算法。对于非对称的非单调次模函数,随机算法也能保证 1/4 的近似比。

证明思路(对称情况简述):
对于任意最优解 S* 和任意集合 X,可以构造其三个“兄弟”集合 Y, Z, W,使得 {X, Y, Z, W} 构成一个划分上的对称组。利用次模性的定义二(并交不等式),可以证明 f(X)+f(Y)+f(Z)+f(W) ≥ 2 * [f(S* ∩ X) + f(S* ∩ Y) + f(S* ∩ Z) + f(S* ∩ W)] = 2 * f(S*)。由于 X, Y, Z, W 出现的概率相同(各 1/4),因此随机集合的期望价值 E[f(S)] 至少是 (1/4) * 2 * f(OPT) = (1/2) f(OPT)

总结

本节课我们一起学习了次模函数这一核心概念。

  • 我们首先从线性(模)函数出发,引出了刻画“收益递减”的次模函数定义。
  • 我们看到了覆盖函数、拟阵秩函数、熵函数和图割函数等多个例子,并区分了单调性和对称性。
  • 在优化方面,对于单调次模函数在基数约束下的最大化,简单的贪婪算法能提供 (1-1/e) 的近似保证。
  • 对于非单调对称次模函数的最大化(如最大割),一个简单的随机算法就能达到 1/2 的近似比。
    次模函数是离散优化中一个非常强大和普遍的抽象,可以看作是凸性在离散领域的类比,在算法设计和机器学习中有着广泛的应用。

17:专家问题(续)与在线学习应用

在本节课中,我们将继续学习专家问题,并深入探讨其核心算法——Hedge算法。我们将证明该算法的性能保证,并展示如何利用这一强大的在线学习框架来解决零和博弈和线性规划等经典问题。通过本课,你将理解如何将看似复杂的优化问题转化为在线决策过程,并利用简单的更新规则获得近似最优解。


专家问题与Hedge算法回顾

上一节我们介绍了专家问题的基本设定。本节中,我们来看看其形式化描述与核心算法。

在专家问题中,每一轮 t

  • 你有 n 个专家。
  • 每个专家 i 给出一个预测,并遭受一个损失 l_t(i) ∈ [0, 1](或收益 g_t(i) ∈ [-1, 1])。
  • 你需要选择一个专家分布 p_t(即 p_t 位于概率单纯形上)。
  • 你观察到的损失是所选分布与损失向量的点积:loss_t = p_t · l_t
  • 你的目标是长期累积损失 ∑_t loss_t 尽可能小,即与最佳固定专家( hindsight )的累积损失 min_i ∑_t l_t(i) 的差距(称为遗憾 Regret)尽可能小。

我们之前介绍了一个确定性算法,但其性能有局限。因此,我们转向随机化算法,并抽象出以下简洁的在线决策游戏

  • 你每一轮选择一个向量 p_t ∈ Δ_n(概率单纯形)。
  • 对手(世界)选择一个向量 l_t ∈ [0, 1]^n(或 [-1, 1]^n)。
  • 你的损失是点积 p_t · l_t
  • 目标是最小化长期总损失。

Hedge算法 正是为此游戏设计的。它能保证你的总损失不超过 (1+ε) 倍的最佳专家损失,再加上一个对数项。

以下是Hedge算法的步骤:

  1. 初始化权重:对每个专家 i,设置初始权重 w_1(i) = 1(或根据先验知识设置)。
  2. 循环每一轮 t=1 to T
    a. 计算概率:根据权重计算选择每个专家的概率 p_t(i) = w_t(i) / (∑_j w_t(j))
    b. 根据 p_t 选择专家,并观察损失向量 l_t
    c. 更新权重:对每个专家 i,更新其权重 w_{t+1}(i) = w_t(i) * exp(-ε * l_t(i))(或使用 1-ε 近似)。

该算法的核心性能保证由以下定理描述。


Hedge算法性能定理与证明

上一节我们描述了Hedge算法,本节我们来证明其关键的性能上界。

定理:假设每一轮的损失 l_t(i) ∈ [0,1],Hedge算法(参数ε)保证对于任何专家 i,其总损失满足:
∑_{t=1}^T p_t · l_t ≤ (1+ε) ∑_{t=1}^T l_t(i) + (ln n)/ε

证明思路:我们通过追踪权重总和(势函数)的变化来证明。

  1. 定义势函数:令 Φ_t = ∑_{i=1}^n w_t(i) 为第 t 轮开始时的总权重。
  2. 观察势函数变化
    Φ_{t+1} = ∑_i w_t(i) * exp(-ε l_t(i))
  3. 使用近似:对于 x ∈ [0,1],有 exp(-εx) ≤ 1 - εx + ε^2 x^2。由于 l_t(i) ∈ [0,1],其平方不大于自身,因此 exp(-ε l_t(i)) ≤ 1 - ε l_t(i) + ε^2 l_t(i)
  4. 推导不等式
    Φ_{t+1} ≤ ∑_i w_t(i) * [1 - ε l_t(i) + ε^2 l_t(i)] = Φ_t - ε ∑_i w_t(i) l_t(i) + ε^2 ∑_i w_t(i) l_t(i)
    注意 ∑_i w_t(i) l_t(i) = Φ_t * (∑_i p_t(i) l_t(i)) = Φ_t * (p_t · l_t)
    因此,Φ_{t+1} ≤ Φ_t * [1 - ε (p_t · l_t) + ε^2 (p_t · l_t)] ≤ Φ_t * exp(-ε (p_t · l_t) + ε^2 (p_t · l_t))(因为 1+z ≤ e^z)。
  5. 递推与边界:将上述不等式从 t=1 递推到 T,得到:
    Φ_{T+1} ≤ Φ_1 * exp( -ε ∑_t (p_t · l_t) + ε^2 ∑_t (p_t · l_t) )
    同时,势函数 Φ_{T+1} 至少包含最佳专家 i* 的权重:
    Φ_{T+1} ≥ w_{T+1}(i*) = exp(-ε ∑_t l_t(i*))
  6. 结合并取对数
    exp(-ε ∑_t l_t(i*)) ≤ n * exp( -ε ∑_t (p_t · l_t) + ε^2 ∑_t (p_t · l_t) )
    两边取自然对数并整理:
    ∑_t (p_t · l_t) ≤ (1-ε)^{-1} ∑_t l_t(i*) + (ln n)/(ε(1-ε))
    ε 较小时,(1-ε)^{-1} ≈ 1+ε,即可得到定理形式。

推论(收益版本):如果我们将损失视为负收益(g_t = -l_t),且 g_t(i) ∈ [-1, 1],那么算法保证总收益满足:
∑_t p_t · g_t ≥ (1-ε) ∑_t g_t(i) - (ln n)/ε

平均遗憾:如果我们运行足够多的轮数 T,使得 T ≥ (ln n)/ε^2,那么平均每轮的遗憾(即 (算法损失 - 最佳专家损失)/T)将不超过 。这意味着随着时间推移,算法的平均表现可以无限接近最佳固定专家。


应用一:求解零和博弈

理解了Hedge算法的强大保证后,我们来看看如何将其应用于求解经典的零和博弈。

零和博弈由一个矩阵 M ∈ [-1, 1]^{m×n} 定义:

  • 行玩家(R)有 m 种纯策略(行动)。
  • 列玩家(C)有 n 种纯策略。
  • 当R选择行动 i,C选择行动 j 时,R获得收益 M[i][j],C获得收益 -M[i][j](因此称为“零和”)。
  • 玩家可以采用混合策略,即概率分布 p ∈ Δ_m(行玩家)和 q ∈ Δ_n(列玩家)。此时R的期望收益为 p^T M q

行玩家的目标是最大化收益,列玩家的目标是最小化R的收益(即最大化自己的收益)。冯·诺依曼极小极大定理指出,在混合策略下存在一个平衡点:
max_p min_q p^T M q = min_q max_p p^T M q = V
这个值 V 称为博弈的值。我们的目标是找到近似最优的混合策略对 (p*, q*)

以下是利用Hedge算法求解近似均衡点的过程:

  1. 行玩家运行Hedge算法:行玩家将每个“行”视为一个专家,维护一个行概率分布 p_t
  2. 列玩家最佳响应:在每一轮 t,列玩家观察行玩家的分布 p_t,并选择对其最佳响应的纯策略 j_t,即 j_t = argmin_j (p_t^T M)[j]。这相当于列玩家针对当前行策略的最小化操作。
  3. 行玩家更新:行玩家将列玩家选择的列 j_t 视为一个“收益向量”。具体来说,行玩家 i 的收益定义为 g_t(i) = M[i][j_t]。行玩家将这个收益向量 g_t 输入给Hedge算法,更新得到新的行分布 p_{t+1}
  4. 循环迭代:重复步骤2-3足够多的轮次 T
  5. 输出平均策略:计算平均行策略 p_hat = (1/T) ∑_t p_t 和平均列策略 q_hat = (1/T) ∑_t e_{j_t}(其中 e_{j_t} 是第 j_t 列为1的指示向量)。

原理分析

  • 对行玩家而言,Hedge算法保证其平均收益 (1/T) ∑_t p_t^T M e_{j_t} 至少接近针对列玩家平均策略 q_hat 的最佳行响应收益
  • 同时,由于列玩家每一轮都采取对 p_t 的最佳响应,其平均响应 (1/T) ∑_t min_q p_t^T M q 不大于 min_q p_hat^T M q(因为最小值函数是凹的)。
  • 将两者结合,可以证明输出的 (p_hat, q_hat) 近似满足极小极大定理,即 p_hat^T M q_hat ≈ V

应用二:求解线性规划(概念阐述)

Hedge算法的思想甚至可以扩展到求解线性规划(LP)。我们以一个简化的视角来阐述核心概念。

考虑一个线性规划:

最大化: v^T x
约束条件: A x ≤ b
           x ≥ 0

其中 Am×n 矩阵。

求解思路如下:

  1. 将约束视为专家:我们将每个约束 A_i x ≤ b_i 视为一个“专家”。算法维护一个在 m 个约束上的概率分布 p_t
  2. 构建平均约束:在每一轮 t,我们根据分布 p_t 将所有约束线性组合,得到一个单一的聚合约束(p_t^T A) x ≤ p_t^T b。记 α_t = p_t^T A, β_t = p_t^T b
  3. 求解子问题:求解一个只有一个约束的简化LP:
    最大化: v^T x
    约束条件: α_t^T x ≤ β_t
               x ≥ 0
    
    这个问题非常容易求解(本质是选择 v_i/α_{t,i} 最大的方向)。设解为 x_t。由于原问题的最优解 x* 满足所有约束,自然也满足这个聚合约束,因此 v^T x_t ≥ v^T x*。但 x_t 可能违反原问题的某些约束。
  4. 利用违反程度更新权重:我们需要告诉算法哪些约束更重要(被违反得更严重)。定义专家 i(即第 i 个约束)在第 t 轮的“损失”或“收益”为 A_i x_t - b_i(即约束的违反程度,越大表示越重要)。将这个向量输入给Hedge算法,更新概率分布 p_{t+1}。违反程度高的约束在下一轮会获得更高的权重。
  5. 迭代与输出:重复步骤2-4。最终,取解 x_t 的平均 x_hat 作为输出。可以证明,经过足够轮次后,x_hat 几乎满足所有约束( violation 很小),且目标值 v^T x_hat 接近最优值。

关键参数:此方法中的“宽度”(width)C,即 |A_i x_t - b_i| 可能的最大值,会影响收敛速率。控制宽度是实际应用中的重要技巧。


总结与前瞻

本节课中我们一起学习了专家问题在线学习框架的深入内容。

我们首先回顾并严格证明了Hedge算法的遗憾上界,理解了其 O(√(T log n)) 的遗憾增长率,这意味着平均遗憾随轮次增加而趋于零。随后,我们探索了该算法的两个强大应用:

  1. 求解零和博弈:通过让一个玩家运行Hedge,另一个玩家进行最佳响应,并计算平均策略,可以高效找到近似纳什均衡。
  2. 求解线性规划:通过将约束视为专家,反复构建并求解加权聚合约束,并根据解的违反情况更新约束权重,可以迭代地逼近LP的最优解。

这些应用展示了在线学习与优化之间的深刻联系。最后,我们提到了一个具体的例子——通过类似Hedge的权重更新规则来求解最大流问题,这将在后续内容中展开。这种将经典算法重新解读为在线学习过程的思想,不仅优美,而且往往能带来新的算法见解。


本节课中,我们掌握了如何利用简单的权重更新规则(Hedge)来解决复杂的决策与优化问题,核心在于将问题交互过程建模为在线学习,并利用遗憾最小化的强大保证。

18:使用专家算法求解线性规划

在本节课中,我们将学习如何使用专家算法(特别是乘性权重算法或Hedge算法)来求解线性规划问题。这是一种简单但功能强大的方法,尤其适用于寻找近似解。

概述

我们将从一个已知的Hedge算法保证开始,然后展示如何将其应用于求解线性规划。核心思想是将线性规划的每个约束视为一个“专家”,通过迭代调整对每个约束的重视程度(概率权重),最终找到一个近似最优且近似可行的解。


Hedge算法回顾

上一节我们介绍了Hedge算法的基本框架。本节中,我们来看看我们将作为黑盒使用的具体定理形式。

Hedge算法保证:固定一个误差参数 ε。对于任何取值范围在 [-ρ, ρ] 内的收益向量,只要运行时间 t 至少为 Ω(ρ² log(N) / ε²)(其中 N 是专家数量),Hedge算法确保对于任何专家 i,其平均收益满足以下关系:

平均收益(Hedge) ≥ (1 - ε) * 平均收益(专家 i) - O(ε)

这意味着,只要运行足够长的时间,Hedge获得的平均收益可以与任何专家(包括最佳专家)的收益相媲美,最多只有乘性和加性的微小损失。

关键点

  • 运行时间与收益向量的尺度 ρ 的平方成正比。
  • 运行时间与专家数量 N 的对数成正比。
  • 运行时间与误差参数 ε 的平方成反比。

这种对 ε 的依赖(1/ε²)在需要精确解时效率不高,但对于许多近似求解的场景已经足够好。


将线性规划转化为专家问题

现在,我们来看看如何将线性规划问题嵌入到专家框架中。

我们考虑如下形式的线性规划:

最大化: cᵀx
约束条件: Ax ≤ b
          x ≥ 0

其中 A 是一个 m × n 的矩阵(m 个约束,n 个变量),bm 维向量,cn 维向量。我们假设该线性规划是可行的。

我们的目标是找到一个解 ,使得:

  1. 目标值优越cᵀx̂ ≥ cᵀx*,其中 x* 是任意可行解(实际上我们会得到超优解)。
  2. 近似可行A x̂ ≤ b + ε * 1(即每个约束最多被违反 ε 个单位)。

我们将设计一个算法,其运行时间与 ρ² / ε² 相关,其中 ρ 被称为线性规划的“宽度”。


算法描述

上一节我们设定了目标,本节中我们来看看具体的算法步骤。

算法流程如下:

  1. 初始化专家:为线性规划的每一个约束(共 m 个)创建一个专家。初始化一个概率分布 p₁,通常是均匀分布(每个专家权重为 1/m)。
  2. 迭代过程(对于 t = 1T):
    a. 构建平均约束:使用当前的概率分布 p_tm 个约束进行加权平均。
    定义平均约束向量:αᵀ = p_tᵀ A
    定义平均右侧值:β = p_tᵀ b
    b. 求解子问题:求解一个仅包含这个平均约束的简化线性规划:
    最大化: cᵀx 约束条件: αᵀx ≤ β x ≥ 0
    设其解为 x_t。这是一个单约束问题,通常很容易求解。
    c. 计算收益向量:计算解 x_t 对每个原始约束的违反程度。
    对于第 i 个专家(约束),其收益定义为:
    g_t[i] = (b_i - A_i x_t) / ρ
    其中 A_i 是矩阵 A 的第 i 行。ρ 是一个尺度因子,用于确保收益落在 [-1, 1] 范围内。收益为正表示约束被违反(A_i x_t > b_i),算法会因此增加该约束的权重。
    d. 更新专家权重:将收益向量 g_t 输入 Hedge 算法,获得更新后的概率分布 p_{t+1}
  3. 输出:运行 T 轮后,输出所有 x_t 的平均值作为最终解:x̂ = (1/T) Σ x_t

直观理解:算法不断调整对各约束的重视程度。如果一个约束被频繁违反,其权重(概率)会增加,使得后续迭代中,平均约束更倾向于惩罚该约束,从而迫使算法寻找能更好满足该约束的解。


算法分析

我们已经描述了算法流程,现在来分析它为何能达到我们的目标。

x* 是原线性规划的一个可行解。

1. 证明目标值优越
由于 x* 对每个原始约束都可行,因此它对于任何加权平均约束 αᵀx ≤ β 也是可行的。在每一步 t,我们求解的是在平均约束下最大化 cᵀx 的问题,而 x* 是该问题的一个可行解,因此有:

cᵀx_t ≥ cᵀx*

对所有 t 取平均,立即得到:

cᵀx̂ ≥ cᵀx*

2. 证明近似可行
我们需要证明对于每个约束 i,有 A_i x̂ ≤ b_i + O(ε)
考虑 Hedge 算法的保证。对于第 i 个专家,经过 T 轮后,其平均收益满足:

(1/T) Σ g_t[i] ≥ (1-ε) * (某个基准) - O(ε)

经过推导(具体过程涉及将收益定义代入并利用平均约束的可行性),这个不等式可以转化为:

A_i x̂ - b_i ≤ O(ε) * ρ

通过设置 ρε 的关系,我们可以得到 A_i x̂ ≤ b_i + O(ε) 的形式。

运行时间:根据 Hedge 的保证,我们需要 T = Ω(ρ² log(m) / ε²) 轮迭代。因此,总运行时间取决于子问题求解的复杂度乘以 T

关键参数——宽度 ρρ 需要是收益向量 g_t 各分量的绝对值的上界。这通常取决于子问题解 x_t 的“规模”。如果 x_t 可能非常大,导致约束被严重违反,那么 ρ 就很大,算法需要更多轮迭代。因此,宽度 ρ 不仅取决于线性规划本身,还取决于我们求解平均约束子问题的方法


应用实例:最大流问题

理论分析表明宽度 ρ 至关重要。本节中我们通过最大流问题来看一个具体例子,并探讨如何通过巧妙求解子问题来控制宽度。

考虑一个单位容量的有向图 G=(V,E) 上的最大流问题。我们可以将其写成一个线性规划,其中变量 f_p 对应每一条从源点 s 到汇点 t 的路径 p

最大化: Σ f_p
约束条件: 对于每条边 e, Σ_{p: e ∈ p} f_p ≤ 1
          f_p ≥ 0

这个线性规划有指数级变量(所有路径)和 m 个约束(每条边一个)。

应用我们的算法

  • 专家:每条边对应一个专家。
  • 平均约束:给定边上的概率分布 q(代表权重),平均约束为:
    Σ_p f_p * (路径 p 在权重 q 下的长度) ≤ 1
    
    其中路径长度是路径上所有边的权重 q_e 之和。
  • 求解子问题:我们需要在 Σ_p f_p * len_q(p) ≤ 1f_p ≥ 0 的条件下,最大化 Σ_p f_p。这个单约束问题的解非常直接:将所有流量 F 都发送到当前权重 q 下最短的 s-t 路径上。即,找到最短路径 P*,令 f_{P*} = 1 / len_q(P*),其他 f_p=0
  • 收益与更新:收益与边的拥堵程度相关。发送流量后,该最短路径上的边变得拥堵,Hedge 算法会增加这些边的权重,使得后续迭代中,算法可能选择其他更“空闲”的路径。

初始算法的宽度问题:在这种简单实现中,每一步都将所有流量压到一条边上,可能导致某些边的流量 violation 很高。在最坏情况下,宽度 ρ 可能与最大流值 F 同阶,而 F 最大可达 O(m),导致总运行时间高达 O(m³),这并不高效。


改进:通过电气流降低宽度

上一节的例子暴露了宽度可能很大的问题。本节中我们看看如何通过改变子问题的求解方式来显著降低宽度。

核心思想是:不要将所有流量塞到一条路径上,而是将流量“分散”到许多路径上,使得没有单条边承载过大的流量。这样,每一步对任何单个约束的违反程度都会降低,从而减小宽度 ρ

对于无向图上的最大流问题,一个巧妙的方法是使用电气流(Electrical Flow)来求解平均约束子问题。

  • 电气流定义:将图中的每条边视为一个单位电阻,在源点 s 和汇点 t 之间施加 1 伏特的电压差,根据电路定律计算出的电流分布就是一种自然的 s-t 流。
  • 优良性质
    1. 分散性:电气流遵循最小能量耗散原理(能量 = Σ_e (流_e)² * 电阻),这天然地倾向于让流量分散到多条并行路径上,避免在单条边上集中过高电流。
    2. 可快速计算:计算电气流等价于求解一个图拉普拉斯(Laplacian)线性系统 Lφ = b,其中 bs 处为 +1,在 t 处为 -1。近年来已有算法可以在近线性时间 O~(m) 内近似求解此类系统。
  • 效果:使用电气流作为子问题的解,可以证明宽度 ρ 能从 O(m) 降至 O(√m / ε)。这是一个巨大的改进,能将最大流算法的运行时间从 O(m³) 提升到 O~(m^{3/2}),甚至通过进一步优化达到 O~(m^{4/3})(约10年前的先进水平)。

关键启示:宽度 ρ 并非线性规划固有的属性,它高度依赖于我们求解平均约束子问题的方法。一个智能的、能产生“均衡”解的子问题求解器,可以极大地提升主算法的效率。


总结与展望

本节课中我们一起学习了如何使用专家算法(乘性权重/Hedge)来求解线性规划。

  1. 框架:我们将每个约束视为专家,通过迭代调整权重、求解加权平均后的单约束问题,最终聚合得到一个近似最优且近似可行的解。
  2. 关键参数:算法的效率核心取决于宽度 ρ,它衡量了子问题解对原始约束的最大违反程度。
  3. 核心技巧:通过设计巧妙的子问题求解器(如最大流问题中的电气流),可以有效地控制宽度,从而设计出高效的近似算法。
  4. 历史定位:这种方法诞生于90年代,虽然对误差 ε 的依赖(1/ε²)不如后来出现的椭圆法(log(1/ε))那样能产生强多项式时间算法,但其思想简单、通用,并在许多现代算法设计中仍有广泛应用。

这种方法展示了在线学习、博弈论与优化算法之间的深刻联系。在接下来的课程中,我们可能会从凸优化、在线学习等不同视角重新审视这一算法,并看到梯度下降、正则化追随者等概念与此本质相通。

19:拉普拉斯矩阵与梯度下降

在本节课中,我们将学习图论中的拉普拉斯矩阵,并介绍优化算法中的梯度下降框架。我们将从拉普拉斯矩阵的定义和基本性质开始,然后探讨其在电气网络中的应用,最后介绍梯度下降算法的基本思想和收敛性保证。

拉普拉斯矩阵

上一节我们介绍了课程的基本信息,本节中我们来看看拉普拉斯矩阵。拉普拉斯矩阵是图论中的一个核心概念。通常,你可以在流形上定义拉普拉斯算子,但我们处理的是矩阵和图。

定义与构造

对于一个图,它有一个邻接矩阵 A。我们可以定义一个矩阵 D,它是一个对角矩阵,其对角线元素是各个顶点的度数,即 d1, d2, ..., dn

现在,拉普拉斯矩阵 L 定义为:
L = D - A

例如,在一个有6个顶点的图中,L 是一个6x6的矩阵。假设第一个顶点与第二个和第五个顶点相连,那么矩阵的第一行将在第二列和第五列有 -1,在对角线上有该顶点的度数2。这是一个对称矩阵。

我们讨论的是无向图。对于加权图,邻接矩阵 A 将是一个加权邻接矩阵。例如,如果一条边的权重是7,另一条是3,那么矩阵中对应的位置将是 -7 和 -3,而该顶点的加权度数(权重之和)将出现在对角线上。

基本性质

以下是拉普拉斯矩阵的一些基本事实:

  • L 的每一行和为零。证明很简单:L 乘以全1向量等于0。
  • L 的秩最多是 n-1。更准确地说,L 的秩等于 n 减去图的连通分量个数。这意味着 L 的秩亏缺恰好等于图的连通分量数。

拉普拉斯矩阵在谱图理论中非常重要。它本质上是邻接矩阵的一种变换形式,具有特别好的矩阵理论性质,例如特征值和特征向量。

另一种表示

单条边 ij 的拉普拉斯矩阵可以写为:
L_ij = (e_i - e_j)(e_i - e_j)^T
其中 e_ie_j 是标准基向量。

因此,整个图的拉普拉斯矩阵可以表示为所有边对应的这种外积之和:
L = Σ_{(i,j)∈E} (e_i - e_j)(e_i - e_j)^T

这种表示形式很好,因为它是向量与其自身的外积

考虑二次型 x^T L_ij x
x^T L_ij x = x^T (e_i - e_j)(e_i - e_j)^T x = (x_i - x_j)^2
这是一个平方项,非负。

这告诉我们关于拉普拉斯矩阵 L 的信息:对于任何图,x^T L x 都是非负的,因此它的所有特征值都是非负的。实际上,它有一个非平凡核。

具体来说,最小的特征值 λ1 总是等于0。如果图是连通的,那么第二小的特征值 λ2 大于0。因此,λ2 > 0 当且仅当图是连通的。这是一个有趣的事实:你可以通过查看拉普拉斯矩阵的第二特征值来判断图的连通性。

实际上,λ2λ1 的差(即 λ2 本身)通常被称为谱隙,它反映了图的连通程度。例如,如果 λ2 至少是某个通用常数,那么该图被称为扩展图

关联矩阵表示

让我们定义另一个矩阵:边-顶点关联矩阵 B。这个矩阵有 n 行(每个顶点一行)和 m 列(每条边一列)。对于每条连接顶点 ij 的边 e,它在第 i 行有一个 1,在第 j 行有一个 -1(或者反过来,方向不重要,只是为了记账)。

注意,这个矩阵的列正好是向量 (e_i - e_j)

现在有一个关于矩阵乘积的事实:A 乘以 B 可以写成 A 的列与 B 的行的外积之和。利用这个事实,我们可以得到:
L = B B^T

对于加权图,设 W 是一个对角矩阵,其对角线元素是各边的权重,那么加权拉普拉斯矩阵为:
L_weighted = B W B^T

这等价于对所有边 ij 求和:w_ij (e_i - e_j)(e_i - e_j)^T

一旦看到 L 可以写成 B B^T,你立刻可以得出 x^T L x = x^T B B^T x = ||B^T x||^2,这是一个平方长度,因此非负。

矩阵树定理

还有一个有趣的事实:对于连通图,拉普拉斯矩阵 L 去掉任意一行和一列后得到的子矩阵的行列式,等于图中生成树的数量。这是矩阵树定理的一个结论,也为凯莱公式提供了一种证明方法。

对于加权拉普拉斯矩阵,这个行列式等于所有生成树的权重(各边权重乘积)之和。

电气网络

上一节我们介绍了拉普拉斯矩阵的多种表示和性质,本节中我们来看看它在电气网络中的应用。我们之前讨论过电气网络,但速度很快,现在让我们重新梳理。

欧姆定律与基尔霍夫定律

回忆欧姆定律:对于一条边(电阻),设其电阻为 R_ij,电导为 w_ij = 1 / R_ij。如果沿 ij 方向有电位差 φ_j - φ_i,那么流经该边的电流 f_ij 为:
f_ij = w_ij (φ_j - φ_i)

假设我们已知所有顶点上的电位 φ,那么每条边上的电流流可以通过这个公式计算。实际上,所有边上的电流向量 f 可以表示为:
f = W B^T φ
其中 B^T 将顶点电位向量映射到边上的差值。

接下来是基尔霍夫电流定律:在每个顶点(除了源点 s 和汇点 t),流入的净电流必须为零。假设我们在源点 s 注入 1 安培电流,在汇点 t 抽出 1 安培电流,其他顶点没有外部电流。

对于任意非 st 的顶点 i,流入的总电流为:
Σ_{j} f_ji = 0
这等价于说 B f = b,其中 b 是一个向量,在 s 处为 1,在 t 处为 -1,其他地方为 0。

f = W B^T φ 代入 B f = b,我们得到:
B W B^T φ = b
即:
L φ = b

这是一个线性方程组。解出 φ 就得到了各点的电位。L 是秩亏的,其核包含全1向量,这意味着电位可以整体加上一个常数而不影响电流,解在相差一个常数意义下是唯一的。

这正是在求解一个电气网络问题:固定 st 的电位(或注入电流),让其他点的电位自由浮动,得到的解就是使电流从 s 流向 t 的电位分布。

梯度下降

上一节我们将拉普拉斯矩阵与电气网络中的线性方程组联系起来,本节中我们来看看如何求解这类优化问题,并引入梯度下降算法。

优化问题形式

求解 Lx = b 等价于最小化以下二次函数:
f(x) = (1/2) x^T L x - b^T x
因为该函数的梯度为 ∇f(x) = Lx - b,令梯度为零即得到 Lx = b

因此,我们之前找到的电流解实际上是这个能量函数的极小值点。

凸优化基础

我们面临的是一个典型的无约束凸优化问题:在 R^d 上最小化一个凸函数 f(x)。有时问题会有约束,即 x 必须属于某个凸集 K

凸函数 f 的定义是:对于所有 x, yλ ∈ [0,1],有
f(λx + (1-λ)y) ≤ λ f(x) + (1-λ) f(y)
或者等价地,对于可微函数,其图像总是在任一点切线的上方:
f(y) ≥ f(x) + ∇f(x)^T (y - x)

对于无约束优化,最优解 x* 满足 ∇f(x*) = 0。对于约束优化(x ∈ K),最优性条件变为:对于所有 y ∈ K,有
∇f(x)^T (y - x) ≥ 0
这意味着在最优解处,任何可行方向都与梯度方向成锐角(函数沿该方向上升)。

梯度下降算法框架

梯度下降是一个框架,而非单一算法。其基本思想很简单:

  1. 从一个初始点 x_0 开始。
  2. 对于 t = 0, 1, ..., T-1,进行迭代:
    x_{t+1} = x_t - η ∇f(x_t)
    其中 η > 0 称为学习率步长
  3. 迭代 T 步后,返回结果。可以返回最后一个点 x_T,也可以返回所有点的平均。

直观上,梯度方向是函数上升最快的方向,因此沿负梯度方向走一小步可以降低函数值。

对于有约束问题(x ∈ K),如果一步之后 x_{t+1} 跑出了可行域 K,我们需要将其投影K
x_{t+1} = Proj_K ( x_t - η ∇f(x_t) )
这称为投影梯度下降

如果函数不可微,可以使用次梯度代替梯度,算法变为次梯度下降。

收敛性保证

假设凸函数 f 在定义域 K 上具有有界梯度,即对于所有 x ∈ K,有 ||∇f(x)|| ≤ G。同时,假设初始点 x_0 与某个最优解 x* 的距离不超过 D

那么,通过适当选择步长 η,梯度下降算法在运行 T = O( (G D / ε)^2 ) 步后,可以找到一个点 x_hat,使得
f(x_hat) ≤ f(x*) + ε

这个保证表明,误差以 O(1/√T) 的速率下降。如果需要更高的精度(更小的 ε),则需要更多的迭代步数。如果函数具有更好的性质(如强凸性、平滑性),则可以获得更快的收敛速率,如 O(1/T) 甚至 O(exp(-T))

在线凸优化

梯度下降框架还可以扩展到在线凸优化 setting:

  • 在每一轮 t,算法选择一个点 x_t
  • 然后,环境揭示一个凸函数 f_t
  • 算法付出代价 f_t(x_t)
  • 目标是最小化遗憾,即算法付出的总代价与始终选择某个固定点 x* 所付出的总代价之差。

在这种情况下,使用梯度下降的变种(根据当前函数 f_t 的梯度更新)可以保证:
Σ_{t=1}^T f_t(x_t) ≤ Σ_{t=1}^T f_t(x*) + O(√T)
平均到每轮,遗憾以 O(1/√T) 的速率趋于零。这与我们在多臂赌博机等问题中看到的“无悔”保证类似。

总结

本节课中我们一起学习了图拉普拉斯矩阵和梯度下降算法。我们首先定义了拉普拉斯矩阵 L = D - A,并探讨了它的多种表示和性质,包括其特征值与图连通性的关系,以及它与关联矩阵 B 的联系(L = B B^T)。接着,我们看到了拉普拉斯矩阵如何自然地在电气网络模型中出现,用于描述电位和电流的关系。

然后,我们将求解线性方程组的问题转化为优化问题,并引入了梯度下降这一基本优化框架。我们描述了算法流程,讨论了有约束情况下的投影梯度下降,并给出了在梯度有界假设下的收敛性保证。最后,我们简要介绍了梯度下降在在线凸优化中的应用,展示了其强大的适用性。

20:梯度下降与镜像下降 🧠

在本节课中,我们将深入探讨梯度下降算法,并介绍其在线版本以及一个更通用的框架——镜像下降。我们将从梯度下降的基本框架开始,逐步分析其收敛性,并展示如何通过改变距离度量来推导出不同的算法,包括著名的Hedge算法。


概述 📋

梯度下降是一种用于最小化凸函数的迭代优化方法。其核心思想是从一个初始点出发,反复沿着函数梯度的负方向移动一小步,以逐步逼近函数的最小值点。本节课我们将首先回顾梯度下降的标准框架及其收敛定理,然后探讨其在线版本(在线梯度下降),最后引入镜像下降这一更通用的视角,它将梯度下降和Hedge等算法统一在一个框架下。


梯度下降框架 🔄

梯度下降是一个框架,因为它包含许多可以调整的参数。我们从初始点 ( x_1 ) 开始,然后重复多次以下步骤:沿着负梯度的方向迈出一步。步长由参数 ( \eta )(学习率)决定,它直接影响算法的收敛速度。( \eta ) 和初始点 ( x_1 ) 都需要仔细选择。最终,我们返回所访问过的所有点的平均值 ( \hat{x} )。

在约束优化版本中,我们迈出的步可能会使我们离开凸可行域 ( K )。此时,我们需要将点投影回 ( K ) 上。具体来说,我们定义 ( x_{t+1} ) 为 ( \tilde{x}{t+1} ) 在 ( K ) 上的投影,其中 ( \tilde{x} = x_t - \eta \nabla f_t(x_t) )。投影操作是找到 ( K ) 中与 ( \tilde{x}_{t+1} ) 欧几里得距离最近的点。

以下是算法的步骤总结:

  1. 选择初始点 ( x_1 \in K ) 和学习率 ( \eta )。
  2. 对于 ( t = 1 ) 到 ( T ):
    • 计算梯度 ( \nabla f_t(x_t) )。
    • 计算未投影点 ( \tilde{x}_{t+1} = x_t - \eta \nabla f_t(x_t) )。
    • 投影:( x_{t+1} = \Pi_K(\tilde{x}_{t+1}) )。
  3. 返回平均点 ( \hat{x} = \frac{1}{T} \sum_{t=1}^{T} x_t )。

收敛定理 📈

上一节我们介绍了梯度下降的流程,本节我们来看看它的理论保证。假设函数 ( f ) 是凸函数,且其梯度的范数以 ( G ) 为界(即 ( |\nabla f(x)| \leq G ))。同时,假设初始点 ( x_1 ) 与某个参考点(例如最优解)( x^* ) 的距离至多为 ( D )(即 ( |x_1 - x^*| \leq D ))。

那么,通过设置学习率 ( \eta = \frac{D}{G \sqrt{T}} ),并运行算法 ( T \geq \frac{DG}{\epsilon} ) 轮后,可以保证:
[
f(\hat{x}) \leq f(x^) + \epsilon
]
这意味着平均点 ( \hat{x} ) 的函数值在最优值 ( f(x^
) ) 的 ( \epsilon ) 范围之内。

这个定理表明,通过选择合适的步长和足够的迭代次数,梯度下降可以收敛到接近最优解的点。


在线梯度下降与遗憾界 ⏱️

现在,我们从离线优化转向在线环境。在线梯度下降的设定是:在每一轮 ( t ),算法需要先选择一个点 ( x_t \in K ),然后环境揭示一个凸损失函数 ( f_t ),算法遭受损失 ( f_t(x_t) )。算法的目标是最小化总遗憾(Regret),即算法遭受的总损失与某个固定点 ( x^* \in K ) 所遭受的总损失之差。

以下是该场景的定理表述:

假设函数序列 ( f_1, f_2, ..., f_T ) 都是凸函数,且梯度范数以 ( G ) 为界。令 ( x_1 ) 与任意参考点 ( x^* \in K ) 的距离至多为 ( D )。那么,在线梯度下降算法(使用与之前相同的投影步骤)保证:
[
\sum_{t=1}^{T} f_t(x_t) \leq \sum_{t=1}^{T} f_t(x^*) + \frac{\eta G^2 T}{2} + \frac{D^2}{2\eta}
]
右侧的后两项就是遗憾的上界。通过平衡这两项,即设置 ( \eta = \frac{D}{G\sqrt{T}} ),我们可以得到 ( O(\sqrt{T}) ) 的遗憾界。

这个定理的证明采用了势函数法。定义势函数 ( \Phi_t = \frac{1}{2\eta} |x_t - x*|2 )。证明的核心是表明每一轮的损失加上势能的变化,可以被某个固定点的损失加上一个常数项所控制。将所有轮次求和,并利用势函数的非负性和初始势能的上界,即可得到上述遗憾界。


从在线到离线 🔗

上一节我们证明了在线梯度下降的遗憾界,本节我们看看如何用它来推导出最初的离线收敛定理。如果我们令在线环境中的所有损失函数都相同,即 ( f_t = f ) 对于所有 ( t ) 成立,那么在线设定就退化为了离线设定。

根据詹森不等式和函数的凸性,有 ( f(\hat{x}) \leq \frac{1}{T} \sum_{t=1}^{T} f(x_t) )。将在线遗憾界的结论代入此不等式右侧,我们得到:
[
f(\hat{x}) \leq f(x^) + \frac{\eta G^2}{2} + \frac{D^2}{2\eta T}
]
然后,通过设置 ( \eta = \frac{D}{G\sqrt{T}} ),并令 ( T \geq \frac{DG}{\epsilon} ),就能保证 ( f(\hat{x}) \leq f(x^
) + \epsilon )。这就将在线分析和离线收敛联系了起来。


梯度下降的邻近算子视角 🔍

梯度下降还有另一种等价的解释,称为邻近算子(Proximal)视角。在每一步,我们并不直接计算梯度步,而是求解以下优化问题:
[
x_{t+1} = \arg\min_{x \in K} \left[ f_t(x_t) + \nabla f_t(x_t)^\top (x - x_t) + \frac{1}{2\eta} |x - x_t|^2 \right]
]
这个公式可以理解为:我们在当前点 ( x_t ) 处对函数 ( f_t ) 做一阶线性近似,然后加上一个正则项 ( \frac{1}{2\eta} |x - x_t|^2 ),该正则项惩罚了离 ( x_t ) 太远的点。( \eta ) 越小,正则项权重越大,步长就越小。

求解这个凸优化问题,令其梯度为零:
[
\nabla f_t(x_t) + \frac{1}{\eta}(x - x_t) = 0
]
即可得到熟悉的更新公式 ( x = x_t - \eta \nabla f_t(x_t) )。如果加上投影,就是约束版本。这个视角将梯度下降解释为“用线性模型近似原函数,并防止步子迈得太大”。


镜像下降:统一的框架 🌐

邻近算子视角自然地引出了镜像下降(Mirror Descent)的思想。其核心在于,我们可以将上述公式中的欧几里得距离平方 ( \frac{1}{2}|x-y|^2 ) 替换为其他更合适的距离度量函数 ( D(x, y) )。

镜像下降的更新规则为:
[
x_{t+1} = \arg\min_{x \in K} \left[ \eta \nabla f_t(x_t)^\top x + D(x, x_t) \right]
]
这里,( D(\cdot, \cdot) ) 是一个Bregman散度,它由某个强凸函数 ( h ) 生成:
[
D_h(x, y) = h(x) - [h(y) + \nabla h(y)^\top (x - y)]
]
Bregman散度衡量了在点 ( y ) 处用线性函数近似 ( h(x) ) 所产生的误差。

以下是不同选择带来的算法:

  • 选择 ( h(x) = \frac{1}{2}|x|^2 ),则 ( D_h(x, y) = \frac{1}{2}|x-y|^2 ),镜像下降退化为标准梯度下降。
  • 选择 ( h(x) = \sum_i x_i \log x_i )(负熵),其定义域为概率单纯形,则 ( D_h(x, y) ) 是KL散度 ( \sum_i x_i \log(x_i / y_i) )。将其代入镜像下降更新公式并求解,可以得到更新规则:
    [
    x_{t+1,i} \propto x_{t,i} \cdot e^{-\eta [\nabla f_t(x_t)]_i}
    ]
    这正是我们在学习在线学习时遇到的Hedge算法(或乘性权重更新算法)的更新形式。

因此,镜像下降提供了一个统一的框架:通过选择不同的距离生成函数 ( h ),我们可以恢复出梯度下降、Hedge以及其他多种算法。


镜像下降的遗憾界 🧮

与在线梯度下降类似,镜像下降也有相应的遗憾界定理。假设生成函数 ( h ) 是关于某个范数 ( |\cdot| ) 是 ( \alpha )-强凸的。那么,镜像下降算法保证存在常数 ( G ),使得对于任意 ( x^* \in K ),有:
[
\sum_{t=1}^{T} f_t(x_t) \leq \sum_{t=1}^{T} f_t(x^) + \frac{\eta}{2\alpha} \sum_{t=1}^{T} |\nabla f_t(x_t)|_^2 + \frac{D_h(x^, x_1)}{\eta}
]
其中 ( |\cdot|_
) 是对偶范数。这个形式与梯度下降的遗憾界非常相似,只是距离项和梯度范数项根据新选择的 ( h ) 和范数进行了调整。

以Hedge算法为例:

  • 可行域 ( K ) 是概率单纯形。
  • 选择 ( h ) 为负熵,它关于L1范数是强凸的(由Pinsker不等式保证)。
  • 损失向量的梯度(即损失向量本身)的L∞范数有界。
  • 初始点 ( x_1 ) 通常选为均匀分布,此时 ( D_h(x^*, x_1) ) 约为 ( \log n )。
    将这些代入通用定理,经过平衡项计算,我们就能得到Hedge算法经典的 ( O(\sqrt{T \log n}) ) 遗憾界。

总结 🎯

本节课我们一起深入学习了梯度下降及其扩展。我们从标准的梯度下降框架和收敛定理出发,探讨了其在在线学习环境下的形式,并证明了其遗憾界。通过邻近算子的视角,我们将梯度下降重新解释为线性近似加正则化的优化步骤。最后,我们引入了镜像下降这一强大而统一的框架,它通过选择不同的Bregman散度作为距离度量,将梯度下降、Hedge算法等众多一阶在线优化算法囊括其中。镜像下降的通用遗憾界定理为我们分析和设计适用于不同几何结构(如概率单纯形)的优化算法提供了有力工具。

21:椭球法、质心法及其他 🧮

在本节课中,我们将学习如何高效地求解凸优化问题。我们将介绍两种核心算法:质心法和椭球法。这两种算法都能在多项式时间内找到近似最优解,其运行时间与误差参数的对数相关,这比传统的梯度下降法要快得多。


概述

我们考虑一个凸优化问题:给定一个凸函数 f 和一个凸集 K,我们希望找到点 x,使得 **f(x)** 最小。由于精确解可能难以表示,我们允许一个误差 ε,目标是找到一个点 x,使得 f(x) ≤ f(x*) + ε

为了求解这个问题,我们需要以某种方式“访问”函数 f 和集合 K。通常,我们假设有以下“神谕”:

  • 梯度神谕:给定点 x,返回梯度 ∇f(x)
  • 值神谕:给定点 x,返回函数值 f(x)
  • 投影神谕:给定点 x,返回 K 中离 x 最近的点。
  • 强分离神谕:给定点 x,若 x 不在 K 内,则返回一个将 xK 分离的超平面。

梯度下降法是一种经典方法,但其运行时间与 1/ε² 成正比,这在 ε 很小时效率不高。本节课介绍的算法,其运行时间将与 log(1/ε) 成正比,这是一个巨大的改进。


质心法

上一节我们介绍了问题的基本设定。本节中,我们来看看第一种高效算法——质心法。其核心思想是进行一种“全局”的二分搜索,每次迭代都根据梯度信息,切掉当前凸体的一部分,从而快速缩小包含最优解的区域。

算法描述

算法步骤如下:

  1. 初始化:令 K₀ = K
  2. 对于 t = 0, 1, 2, ...,重复以下步骤,直到满足停止条件:
    • 计算当前凸体 Kₜ质心 cₜ
    • 查询函数 fcₜ 处的梯度 gₜ = ∇f(cₜ)
    • 定义新的凸体 Kₜ₊₁,它是 Kₜ 与一个半空间的交集。这个半空间由梯度方向决定,我们“切掉”那些沿着梯度方向(函数值可能增加)的部分:
      Kₜ₊₁ = Kₜ ∩ { x | gₜᵀ (x - cₜ) ≤ 0 }
      
  3. 在运行了 T 步后,我们从所有计算过的质心 {c₀, c₁, ..., cₜ} 中,选择函数值最小的那个作为最终输出

为什么有效?关键定理

该算法有效的关键在于一个关于凸体与其质心的几何定理——格伦定理

定理(格伦定理):设 K 是一个紧凸集,c 是其质心。任何通过质心 c 的超平面,都会将 K 分成两部分,每一部分的体积至少占总体积的 1/e(约 36.8%)。

这意味着,每次我们通过质心做一个切割(根据梯度方向),我们都能保证扔掉至少 1 - 1/e(约 63.2%)的体积。因此,凸体的体积会呈指数级下降。

算法分析

为了证明算法能找到近似最优解,我们进行如下构造和分析:

  1. 定义“好”区域:围绕最优解 x,我们构造一个小区域 K_δ,其中所有点的函数值都接近 **f(x)**。具体地,对于任意 x ∈ K_δ,有 f(x) ≤ f(x*) + 2Bδ,其中 B 是函数值的上界。如果我们令 δ = ε/(2B),那么 K_δ 中所有点的函数值都不超过 f(x*) + ε
  2. 体积衰减:根据格伦定理,每次迭代后,剩余凸体的体积至少衰减为原来的 (1 - 1/e) 倍。
  3. 必然切到好点:经过 T = O(n log(B/ε)) 步后,剩余凸体的体积将小于 K_δ 的体积。这意味着在之前的某一步,算法一定已经“切掉”了 K_δ 中的至少一个点(记作 y)。
  4. 质心也是好点:假设在第 t 步,质心 cₜ 的切割导致了 y 被切掉。根据凸函数的性质,有:
    f(y) ≥ f(cₜ) + gₜᵀ (y - cₜ)
    
    由于 y 被切掉,意味着 gₜᵀ (y - cₜ) > 0。因此 f(cₜ) ≤ f(y)。而 y 在好区域 K_δ 内,所以 f(y) ≤ f(x*) + ε。由此可得 f(cₜ) ≤ f(x*) + ε
  5. 最终输出:由于我们最终输出的是所有质心中函数值最小的那个,而其中至少有一个质心(即 cₜ)满足上述不等式,因此最终输出的 也满足 f(x̂) ≤ f(x*) + ε

算法的挑战

质心法在理论上是优美的,但在实践中面临一个主要挑战:精确计算凸体的质心通常是困难的(例如,对于多面体,精确计算质心是 #P-难问题)。不过,研究已经表明,近似计算质心是可行的(例如,通过从凸体中随机采样点并求平均),并且只要近似足够好,算法依然有效。这涉及到格伦定理的鲁棒性版本。


可行性问题与分离神谕

在深入椭球法之前,让我们先看一个相关的、更基础的问题:凸集可行性问题

假设我们知道一个凸集 K 包含在一个大球(半径 R)内,并且它本身包含一个小球(半径 r)。我们的目标是找到 K 中的任意一点。

我们通过一个强分离神谕来访问 K:给定一个点 x,神谕要么告诉我们 x ∈ K,要么返回一个分离超平面,证明 x 不在 K 内,并且 K 完全位于该超平面的另一侧。

如果我们拥有质心神谕,那么解决这个可行性问题的算法与之前的优化算法几乎相同:

  1. 从包含 K 的大球开始。
  2. 重复:计算当前凸体的质心 c,询问分离神谕。
    • c ∈ K,问题解决。
    • 否则,神谕返回一个分离超平面。我们保留包含 K 的那一半凸体(根据神谕的信息),更新当前凸体。
  3. 根据格伦定理,体积指数衰减。因为我们知道 K 包含一个半径为 r 的小球,其体积与 rⁿ 成正比,而初始大球体积与 Rⁿ 成正比。因此,最多经过 O(n log(R/r)) 步,当前凸体的体积将小于 K 中小球的体积,这意味着算法必然在此之前的某一步已经找到了 K 中的点(或者质心本身就在 K 中)。

这个可行性问题是许多优化问题的核心。例如,在凸优化中,所有函数值不超过 f(x*)+ε 的点也构成一个凸集(函数的下水平集),找到这个凸集中的点就等价于解决了优化问题。


椭球法

上一节我们看到,质心法的主要瓶颈在于质心的计算。本节中,我们来看看历史上第一个被证明是多项式时间的算法——椭球法。它由 Khachiyan 在 1970 年代提出,其核心思想是用一个更容易维护的几何对象——椭球,来包裹我们感兴趣的凸区域。

算法思路

椭球法解决了与质心法相同的可行性问题,但避免直接计算质心。

  1. 初始化:从一个包含目标凸集 K 的大球(一个特殊的椭球)E₀ 开始。
  2. 迭代:在第 t 步,我们有一个椭球 Eₜ,其中心为 cₜ
    • 检查中心 cₜ 是否在 K 中(使用分离神谕)。
    • 如果是,算法结束。
    • 如果不是,分离神谕会给出一个通过 cₜ 的超平面,并指出 K 位于该超平面的某一侧(记为半空间 H)。
    • 我们构造一个新的、体积最小的椭球 Eₜ₊₁,使得它包含 Eₜ ∩ H(即当前椭球与包含 K 的那一半的交集)。
  3. 更新椭球:关键步骤在于如何从 Eₜ 和分离超平面计算出 Eₜ₊₁。这个更新有封闭形式的公式,涉及对当前椭球矩阵进行一个特定的秩一更新。

为什么有效?体积衰减

与质心法类似,椭球法的有效性也依赖于体积的持续减少。可以证明,存在一个常数 C > 1,使得:

Vol(Eₜ₊₁) ≤ (1 - 1/(C*n)) * Vol(Eₜ)

也就是说,每次迭代,椭球的体积至少减少一个 1 - 1/(Cn) 的因子。这与质心法的常数因子衰减 (1 - 1/e) 不同,椭球法的衰减因子与维度 n 有关,衰减速度更慢。

复杂度分析

由于每次体积减少因子为 (1 - 1/(Cn)),为了将体积从初始的 Rⁿ 量级减少到小于目标小球的体积 rⁿ,所需的迭代次数 T 满足:

(1 - 1/(C*n))^T * Rⁿ ≤ rⁿ

取对数并近似计算,可得 T = O(n² log(R/r))。因此,椭球法的迭代次数是多项式级别的,尽管比质心法的 O(n log(R/r)) 多了一个因子 n

实际考虑与比特复杂度

椭球法在理论上是多项式时间算法,但在实际实现中必须考虑数值精度问题。更新公式涉及平方根等运算,如果使用无限精度实数运算,则不符合图灵机模型下的“多项式时间”定义。

Khachiyan 的主要贡献之一就是证明了,即使在有限精度(多项式位数)的算术下运行,累积的舍入误差也可以被严格控制,算法仍然有效。这需要将“强分离神谕”弱化为“弱分离神谕”(允许边界附近的误差),并精细地跟踪所有误差的传播。这方面的详细分析通常可以在关于线性规划的经典著作中找到。


总结

本节课我们一起学习了求解凸优化问题的两种高效算法:

  1. 质心法:通过迭代计算凸体的质心并沿梯度方向切割,实现体积的指数级衰减(每次至少减少 ~63%),从而在 O(n log(1/ε)) 步内找到 ε- 近似解。其理论核心是格伦定理。主要实践挑战在于质心的计算是困难的,但可通过近似采样克服。
  2. 椭球法:为了规避质心计算的难题,用一系列逐渐缩小的椭球来包裹目标凸集。每次迭代构造一个包含“未切割”部分的最小体积椭球。其体积衰减较慢(每次减少约 1/(Cn) 因子),导致需要 O(n² log(1/ε)) 步,但仍在多项式时间内。它是历史上第一个被证明可多项式时间求解线性规划的算法,其实现需仔细处理数值精度(比特复杂度)。

这两种算法都展示了如何利用凸集的几何性质(体积减少)和分离神谕,来设计出比局部搜索法(如梯度下降)更高效的全局优化算法。椭球法的一个重要延伸是,它可以用来求解那些约束条件数量指数级庞大、但具有高效分离神谕的线性规划问题,这体现了其强大的理论价值。

22:椭球法与多项式时间线性规划

在本节课中,我们将学习如何使用椭球法来解决凸集的可行性问题,并探讨如何将其应用于求解线性规划问题。我们将从回顾分离预言机开始,逐步构建椭球算法,并讨论其在求解线性规划时的关键细节和挑战。

上一节我们介绍了分离预言机和可行性问题的基本概念。本节中,我们将深入探讨椭球算法的具体步骤和原理。

分离预言机与可行性问题回顾

我们首先定义了一个称为分离预言机的概念。给定一个凸集 K 和一点 x,分离预言机执行以下操作之一:

  • 如果 x 属于 K,则输出“属于”。
  • 如果 x 不属于 K,则输出一个向量 a,使得对于所有 y ∈ K,满足 a·(y - x) ≤ 0。这提供了一个分离超平面。

基于分离预言机,我们定义了可行性问题:给定一个凸集 K,要么输出一个属于 K 的点,要么正确声明 K 为空集。

从可行性到优化

我们真正关心的是优化问题:在凸集 K 上最小化一个凸函数 f(x)。一个自然的想法是通过二分搜索来连接优化和可行性问题。

具体方法是,猜测一个值 v,然后检查集合 K_v = {x ∈ K | f(x) ≤ v} 是否非空。通过二分搜索 v,我们可以逼近最优值。

然而,这种方法存在一个问题:在实数集上进行二分搜索可能无法精确收敛,因为有理数在实数中是稠密的。尽管如此,这个思想在后续讨论中仍然非常重要。

椭球算法

现在,我们专注于解决可行性问题。我们假设凸集 K 满足以下条件:

  • K 包含在一个半径为 R 的大球内。
  • K 内部包含一个半径为 r 的小球。

给定分离预言机和参数 R, r,椭球算法步骤如下:

  1. 初始化一个包含 K 的椭球 E_0(例如,那个半径为 R 的大球)。
  2. 在每一步 t,计算当前椭球 E_t 的中心点 c_t。
  3. 将 c_t 提交给分离预言机:
    • 如果 c_t ∈ K,算法成功终止,输出 c_t。
    • 如果 c_t ∉ K,预言机返回一个分离超平面 a·(x - c_t) ≤ 0。我们知道 K 位于这个半空间内。
  4. 构造一个新的椭球 E_{t+1},使其成为包含交集 E_t ∩ {x | a·(x - c_t) ≤ 0} 的最小体积椭球。
  5. 重复步骤 2-4。

该算法基于两个关键事实:

  • 我们可以高效地找到包含半椭球的最小体积椭球。
  • 新椭球的体积会减小:Vol(E_{t+1}) ≤ e^{-1/(2(n+1))} * Vol(E_t),其中 n 是空间维度。

算法复杂度与终止条件

我们运行算法 T = O(n^2 * log(R/r)) 步。通过体积分析可知,经过这么多步后,椭球的体积将小于小球的体积。

因此,如果 K 非空(包含体积为 Vol(B_r) 的小球),我们必须在体积减至足够小之前找到一个属于 K 的点。否则,如果算法运行了 T 步仍未找到点,我们可以断定 K 为空集。

应用于线性规划

现在,我们将椭球法应用于线性规划。考虑一个线性规划可行性问题:K = {x ∈ R^n | Ax ≤ b},其中 A 是 m×n 矩阵。

我们需要确保椭球法的前提条件得到满足:

  • 有界性:如果 K 非空,它至少包含一个基本可行解。根据克莱姆法则,该解的每个分量都是两个行列式的比值,其分子和分母的比特复杂度受输入大小(n, m 和系数的比特长度 L)的多项式限制。因此,所有基本可行解都位于一个半径 R = 2^{poly(n, m, L)} 的大球内。
  • 内球存在性:如果 K 是全维的,则其内部包含一个半径 r = 2^{-poly(n, m, L)} 的小球。即使 K 不是全维的,也有技术手段(如限制到子空间或轻微膨胀集合)来处理。

分离预言机的实现:对于线性规划,分离预言机是容易实现的。给定一个点 x,我们只需检查是否满足所有约束 Ax ≤ b。如果全部满足,则 x ∈ K。如果存在违反的约束,例如 a_i^T x > b_i,那么超平面 a_i^T (y - x) ≤ 0 就是一个分离超平面。

从可行性到优化:再次探讨

对于优化问题 min c^T x, s.t. x ∈ K,我们希望通过二分搜索最优值 v 并反复求解可行性问题 K_v = {x ∈ K | c^T x ≤ v} 来解决。

挑战在于最优值 v* 可能是一个分母很大的有理数,直接对实数进行二分搜索无法精确命中。

解决方案如下:

  1. 我们知道最优值 v* 的分子和分母的比特大小是多项式有界的。
  2. 运行二分搜索,找到一个点 x,使得 c^T x 非常接近 v*,误差小于 2^{-poly(...)}
  3. 在这个极小的区间内,至多只有一个分母有界的有理数(即 v)。因此,我们可以从这个近似值 x 直接“跳转”到精确的最优解 v(例如,通过有理数重构技术)。

分离与优化的等价性

一个重要的结论是“分离蕴含优化”。对于具有多项式比特复杂度系数的线性规划,如果我们有一个针对其可行域的多项式时间分离预言机,那么我们就能在多项式时间内求解该线性规划(的优化版本),且运行时间仅依赖于变量数 n 和比特复杂度,而不依赖于约束数量 m

这非常强大,因为它允许我们求解约束数量指数级但分离预言机高效的线性规划。例如:

  • 完美匹配多面体:约束数量指数(所有奇集的约束),但分离预言机可通过求解最小奇割问题实现。
  • 树形图多面体:约束数量指数(所有包含根节点的割的约束),但分离预言机可通过求解最小割问题实现。

这种方法的核心思想是,我们不需要显式列出所有约束,只需在需要时能检测到违反的约束即可。

总结

本节课中我们一起学习了椭球法的基本原理和步骤。该方法通过迭代地用体积更小的椭球来逼近凸集,并结合分离预言机来求解可行性问题。我们详细探讨了如何将椭球法应用于求解线性规划,关键点在于确保可行域的内外球存在以及处理优化问题时的二分搜索与精度跳转。最后,我们了解了“分离蕴含优化”这一强大定理,它使得求解具有指数级约束但分离高效的线性规划成为可能。椭球法是第一个被证明能在多项式时间内求解线性规划的算法,奠定了理论计算机科学中的重要里程碑。

23:内点法 🧮

在本节课中,我们将学习求解线性规划(LP)的内点法。这是求解线性规划问题最广泛使用的方法之一,在理论和实践中都表现优异。我们将了解其核心思想、工作原理以及如何通过一系列步骤逼近最优解。

上一节我们介绍了椭球法和质心法,本节中我们来看看内点法。

核心思想与历史背景 📜

内点法的基本思想不是沿着多面体的边界(如单纯形法)移动,而是在可行域的内部沿着一条称为“中心路径”的轨迹移动,逐步逼近最优解。

以下是该领域的关键历史节点:

  • 1947年:George Dantzig 提出了单纯形算法。
  • 1976年:Leonid Khachiyan 提出了第一个多项式时间的椭球算法。
  • 1984年:Narendra Karmarkar 提出了具有多项式时间复杂度的内点法,并推动了其在实践中的应用。

问题设定与对偶 🔄

我们考虑标准形式的线性规划问题:
原始问题 (P): 最小化 c^T x,满足 Ax = b,且 x ≥ 0
对偶问题 (D): 最大化 b^T y,满足 A^T y + s = c,且 s ≥ 0

我们定义严格可行的开集:

  • P^0 = {x | Ax = b, x > 0}
  • D^0 = {s | ∃ y, A^T y + s = c, s > 0}

对于任何原始可行解 x 和对偶可行解 (y, s),根据弱对偶性,有:
c^T x - b^T y = x^T s ≥ 0
这个量 x^T s 被称为对偶间隙。当对偶间隙为0时,我们就达到了最优解(互补松弛条件)。因此,内点法的目标之一就是逐步减小这个对偶间隙。

中心路径与障碍函数 🛣️

我们不直接求解原始问题,而是求解一个“正则化”的问题,即在目标函数中加入一个障碍函数 B(x)。这个函数在可行域边界处趋向于无穷大,从而阻止解触及边界。

一个常用的障碍函数是对数障碍函数:
min c^T x + (1/η) * Σ_i log(1/x_i),满足 Ax = b
其中 η > 0 是一个参数。

η 很大时,障碍项 (1/η)B(x) 的影响很小,问题的解会停留在可行域内部(称为解析中心)。
η 趋近于0时,障碍项的影响消失,问题的解趋近于原始问题的最优解。

随着 η 从大到小变化,最优解 x(η) 形成一条从解析中心指向原始问题最优解的平滑路径,这条路径就是中心路径。内点法就是沿着这条路径进行追踪。

中心路径还有另一种等价定义。对于参数 μ > 0,中心路径是所有满足以下条件的点 (x, y, s) 的集合:

  1. Ax = b, x > 0 (原始可行性)
  2. A^T y + s = c, s > 0 (对偶可行性)
  3. x_i * s_i = μ, 对于所有 i (中心性条件)

这表示在中心路径上,所有互补乘积 x_i s_i 都等于同一个值 μ。当 μ → 0 时,我们得到最优解。

内点法算法框架 ⚙️

算法的大致步骤如下:

  1. 初始化:找到一个严格可行的初始点 (x^0, y^0, s^0),并使其靠近中心路径(例如,对应一个较大的 μ^0)。
  2. 迭代:当对偶间隙 x^T s > εε 为预设精度)时,重复:
    a. 选择一个新的、更小的中心性参数 μ_new = σ * μ,其中 0 < σ < 1
    b. 计算一个搜索方向 (Δx, Δy, Δs),使得新点 (x+Δx, y+Δy, s+Δs) 近似满足对应于 μ_new 的中心性条件。
    c. 沿着搜索方向更新当前点:(x, y, s) ← (x, y, s) + α (Δx, Δy, Δs),其中步长 α 确保新点仍保持严格可行性 (x>0, s>0)
  3. 终止:当对偶间隙足够小时,输出近似最优解。

搜索方向的计算 🧭

搜索方向通常通过近似求解中心性条件 (x+Δx) * (s+Δs) = μ_new * 1 得到(* 表示逐分量相乘,1 是全1向量)。直接求解这个非线性方程是困难的。

我们将其线性化。将中心性条件展开:
x*s + x*Δs + s*Δx + Δx*Δs = μ_new * 1
忽略二阶项 Δx*Δs,并利用当前点满足 x*s ≈ μ_old * 1,我们得到线性近似:
x*Δs + s*Δx ≈ μ_new * 1 - μ_old * 1 = (μ_new - μ_old) * 1

同时,为了保持原始和对偶可行性,我们需要 AΔx = 0A^T Δy + Δs = 0

因此,搜索方向 (Δx, Δy, Δs) 通过求解以下线性系统得到:

[ 0   A^T   I  ] [ Δx ]   [ 0                 ]
[ A   0     0  ] [ Δy ] = [ 0                 ]
[ S   0     X  ] [ Δs ]   [ μ_new*1 - x*s    ]

其中 XS 是以 xs 为对角元素的对角矩阵。这个系统称为修正牛顿方程。求解它只需要一次线性系统求解(如矩阵求逆)。

理论保证与步长选择 📏

算法的效率取决于每次迭代能将 μ 减小多少(即 σ 能多小)。理论分析表明,如果当前点足够接近中心路径,我们可以选择 σ = 1 - O(1/√n),其中 n 是变量个数。这意味着经过 O(√n * log(1/ε)) 次迭代,对偶间隙就能达到精度 ε

以下是两个关键的引理,保证了算法的正确性和收敛速度:

  • 引理1(可行性保持):如果当前点接近中心路径,且步长选择合适(即 μ 的减小幅度受控),则通过线性系统计算出的搜索方向能保证新点仍然严格可行 (x>0, s>0)
  • 引理2(近邻保持):如果当前点足够接近中心路径(例如,||x*s - μ*1|| 很小),那么经过一次牛顿步更新后,得到的新点将同样接近新的中心路径(对应于 μ_new)。这确保了我们可以始终在中心路径附近移动。

与牛顿法的联系 🔗

上述求解搜索方向的过程,可以视为在求解一系列受约束优化问题的牛顿法。具体来说,我们试图最小化带有对数障碍的函数 F(x, y, s) = c^T x - b^T y - μ Σ_i log(x_i s_i),并满足原始和对偶可行性条件。计算其牛顿步方向,恰好会导出之前提到的修正牛顿方程。因此,内点法也可以看作是在中心路径上应用牛顿法。

总结 📝

本节课中我们一起学习了求解线性规划的内点法。

  • 其核心思想是通过引入障碍函数,在可行域内部构造一条光滑的中心路径,并沿着这条路径逼近最优解。
  • 算法在每次迭代中求解一个线性系统(修正牛顿方程)来确定搜索方向,计算效率高。
  • 理论保证算法能在 O(√n * log(1/ε)) 次迭代内收敛,这使其成为一个多项式时间算法。
  • 内点法是连接优化理论与实践的典范,在商业求解器(如Gurobi、CPLEX)中广泛应用。

与单纯形法遍历顶点不同,内点法穿越可行域内部,这种不同的几何视角为解决线性乃至更广泛的凸优化问题提供了强大工具。

24:近似算法

在本节课中,我们将学习近似算法的基本概念,并探讨两个经典问题——集合覆盖和装箱问题——的近似解法。我们将看到,对于NP难问题,虽然无法在多项式时间内求得精确解,但可以设计出在多项式时间内运行并能保证解的质量(即近似比)的算法。

概述

我们首先介绍近似算法的通用框架:对于NP难问题,我们设计算法,使其在多项式时间内输出一个解,该解的成本(或目标函数值)不超过最优解的某个常数倍(即近似因子)。接着,我们将具体分析集合覆盖和装箱问题,学习贪心算法、线性规划松弛与舍入等关键技术。

集合覆盖问题

集合覆盖问题定义如下:给定一个包含n个元素的宇宙U,以及一个由m个子集构成的集合族S(每个子集S_i ⊆ U),目标是选择数量最少(或在加权版本中成本最低)的子集,使得这些子集的并集等于整个宇宙U。

贪心算法

对于集合覆盖问题,一个直观的算法是贪心算法。该算法在每一步选择当前“性价比”最高的集合,即覆盖最多尚未被覆盖元素的集合(在加权版本中,选择单位成本覆盖未覆盖元素数最多的集合)。

以下是贪心算法的步骤:

  1. 初始化未覆盖元素集合 U 为整个宇宙。
  2. U 不为空时,重复以下步骤:
    • 从集合族 S 中选择一个集合 S,该集合能覆盖 U 中尽可能多的元素(在加权版本中,最大化 |S ∩ U| / cost(S))。
    • S 加入解集,并从 U 中移除 S 覆盖的所有元素。

可以证明,贪心算法能实现 O(log n) 的近似比。对于未加权版本,分析思路是:假设最优解使用 k 个集合。在算法执行的每一步,由于至少存在一个最优解中的集合能覆盖至少 |U|/k 个当前未覆盖元素,因此贪心选择的集合至少也能覆盖这么多元素。通过递推可以证明,在选取 O(k log n) 个集合后,所有元素必然被覆盖。

线性规划松弛与舍入

上一节我们介绍了贪心算法,本节中我们来看看一种更系统化的方法:线性规划松弛与舍入。该方法分为四个步骤:

  1. 为原问题写出整数线性规划(ILP)公式。
  2. 松弛整数约束,得到线性规划(LP)。
  3. 在多项式时间内求解该LP。
  4. 将得到的分数解通过舍入技术转化为整数解(即原问题的可行解)。

对于集合覆盖问题,其ILP如下:为每个集合 S_j 引入0-1变量 x_jx_j=1 表示选择该集合。目标是最小化总成本 ∑ cost(S_j) * x_j,约束条件为对于每个元素 e,覆盖它的集合变量之和至少为1:∑_{j: e ∈ S_j} x_j ≥ 1

x_j ∈ {0,1} 松弛为 x_j ≥ 0,得到LP。求解该LP后,我们得到一个分数解 x*。舍入算法如下:以概率 min(1, α * x_j*) 独立地选择每个集合 S_j,其中 α = O(log n)。可以证明,经过适当调整(例如,对舍入后仍未覆盖的元素,额外选择覆盖它的最便宜集合),此方法能以高概率得到一个总成本至多为 O(log n) * OPT 的解,其中 OPT 是最优解的成本。

装箱问题

装箱问题定义如下:给定无限多个容量为1的箱子和n个物品,每个物品 i 有一个大小 s_i ∈ (0,1]。目标是将所有物品装入箱子,使得每个箱子中物品大小之和不超过1,并且使用的箱子数量最少。

简单近似算法

一个简单的算法是首次适应算法:依次处理每个物品,将其放入第一个能容纳它的箱子中;如果没有这样的箱子,则开启一个新箱子。

可以证明首次适应算法是一个2-近似算法。分析思路是:观察算法产生的解,除了最后一个箱子,其他所有箱子中物品的总大小都超过 1/2。否则,如果存在两个箱子装载量都不超过 1/2,那么后一个箱子中的物品本可以放入前一个箱子。因此,若算法使用了 B 个箱子,则所有物品的总大小至少大于 (B-1)/2。而最优解 OPT 显然至少为物品总大小(因为每个箱子容量为1),故有 物品总大小 ≥ (B-1)/2OPT ≥ 物品总大小,联立可得 B < 2*OPT + 1

基于配置的线性规划方法

上一节我们看到了简单的近似算法,本节中我们来看看一种能获得更优近似保证((1+ε)OPT + O(1))的高级方法,该方法基于线性规划。我们首先做出两个简化假设:

  1. 不同物品大小的种类数 B 是一个常数。
  2. 每个物品的大小至少为某个常数 ε > 0

在这些假设下,我们定义“配置”:一个配置是一个物品大小类型的多重集合,其总大小不超过1。由于物品大小至少为 ε,一个配置最多包含 1/ε 个物品;又因大小类型数 B 是常数,所以可能的配置总数 N 也是一个常数。

我们构建如下整数线性规划:为每个配置 C 引入变量 x_C,表示使用该配置的箱子数量。目标是最小化总箱子数 ∑ x_C。约束条件为:对于每种物品大小 s,所有配置中包含的该大小物品总数必须至少等于输入中该大小物品的总需求 n_s。即 ∑_{C} (C中大小s的物品数量) * x_C ≥ n_s

将此ILP松弛为LP(x_C ≥ 0)并求解。关键的一步是:我们求解一个基本可行解。对于一个有 N 个变量(配置数)和 B 个约束(物品类型数)的LP,其基本可行解中最多只有 B 个变量为非零值。我们将所有这些非零的 x_C 向上取整。由于非零变量最多只有 B 个(常数),每个变量取整最多增加1,因此最终解的总箱子数不超过 LP值 + B。而 LP值 ≤ OPT,所以我们得到了一个 OPT + O(1) 的近似解。通过更精细的分析和去除之前的两个假设(例如,通过物品大小舍入和预处理),可以最终得到 (1+ε)OPT + O(1) 的近似算法。

总结

本节课中我们一起学习了近似算法的基础。我们了解到,对于NP难问题,可以通过设计具有近似比保证的多项式时间算法来寻找接近最优的可行解。我们以集合覆盖问题为例,探讨了贪心算法和线性规划松弛与舍入两种技术,分别达到了 O(log n) 的近似比。接着,我们研究了装箱问题,介绍了简单的首次适应算法(2-近似)以及更复杂的基于配置线性规划的方法,后者能够达到 (1+ε)OPT + O(1) 的近似保证。这些技术和思想是近似算法领域的核心,可以应用于众多组合优化问题。

25:近似算法与半正定规划

在本节课中,我们将继续学习近似算法,特别是利用半正定规划(SDP)进行近似的方法。我们将首先完成上节课讨论的装箱问题线性规划,然后介绍SDP及其向量规划形式,最后探讨几个相关的应用问题。

装箱问题线性规划回顾

上一节我们介绍了装箱问题的基本设定,本节我们来看看如何通过线性规划来近似求解。

我们拥有 N 件物品,尺寸分别为 S1, S2, ..., SN,所有尺寸都在 0 到 1 之间。我们有无限多个容量为 1 的箱子。目标是最小化使用的箱子数量。我们希望得到一个使用 (1 + 7ε) * OPT + f(ε) 个箱子的算法。

以下是上节课我们为简化问题所做的两个假设:

  1. 物品尺寸的种类数有限。
  2. 每件物品的尺寸都大于等于 ε。

在这些假设下,我们给出了一种解法,随后我们将移除这两个假设。我们的处理方式是引入“配置”的概念。

一个配置是指一组物品尺寸的集合,其总尺寸不超过 1。例如,如果尺寸有 0.2, 0.3, 0.5,一个配置可以是包含 5 个 0.2 尺寸的物品,或者包含 4 个 0.2 尺寸和 3 个 0.3 尺寸的物品等。本质上,这些就是装箱的模式。

我们试图选择最少数量的配置。对于每种配置类型 C,令 X_C 为我们选择该配置的数量。我们需要满足:对于每种物品尺寸类型 S,所有包含 S 类物品的配置所提供的 S 类物品总数,必须至少等于我们拥有的 S 类物品数量 N_S。

更形式化地,令 A_{C,S} 为配置 C 中包含的 S 类物品数量。那么约束条件为:对于所有 S, Σ_C A_{C,S} * X_C ≥ N_S。同时,X_C ≥ 0。目标是最小化总配置数 Σ_C X_C。

这个线性规划的最优值最多是最优解 OPT。现在,考虑这个线性规划的一个基本可行解。变量数为 n,约束数为 B(即物品尺寸种类数)。在线性规划中,一个基本可行解最多有 B 个非零变量。

如果我们定义 X̂ 为将 X 中每个分量向上取整得到的结果,那么 X̂ 的 L1 范数(即分量和)最多比 X 的 L1 范数多 B。这意味着,即使我们将分数解向上取整,我们最多也只损失了 B 个箱子。

因此,我们希望 B 很小。但如果每种物品尺寸都唯一,B 就等于 N,这个界限就无用了。Fernandez、de la Vega 和 Lueker 提出了一种巧妙的方法来减少唯一尺寸的数量。

他们的思路如下:将所有物品按尺寸排序并排列起来。我们将这些物品分成 D 组(例如 D=5)。对于每一组,我们将组内所有物品的尺寸“放大”到该组中最大物品的尺寸。这样,我们就只有 B = D 种不同的物品尺寸了。

现在,我们需要分析这种“放大”操作对最优解的影响。假设我们为“放大后”(黄色)的物品找到了一个装箱方案。由于原始(白色)物品的尺寸更小,它们可以放入黄色物品所在的箱子中。所以,为黄色物品找到的方案对白色物品也有效。

主要问题在于,原始最优解可能对放大后的物品不可行,因为放大后的物品尺寸变大了。我们需要证明,放大后实例的最优解 OPT_rounded 不会比原始实例的最优解 OPT_original 大太多。

考虑原始最优解。我们可以尝试将放大后的物品“平移”到原始物品所在的箱子中。具体来说,除了每组的第一件物品(即尺寸被放大的那件),其他放大后的物品都可以放入对应原始物品所在的箱子。那些无法放入的“第一件”物品有多少件呢?最多有 N/D 件(每组一件)。因此,我们可以为这些物品单独开辟新箱子。

所以,我们有:OPT_rounded ≤ OPT_original + N/D。

现在,我们选择 D = 1/ε²。那么 N/D = ε²N。由于每件物品尺寸至少为 ε,所有物品的总体积至少为 εN。而最优解 OPT_original 至少需要 ceil(总体积) 个箱子,因此 OPT_original ≥ εN。所以,ε²N = ε * (εN) ≤ ε * OPT_original。

综上,我们得到:OPT_rounded ≤ (1 + ε) * OPT_original + 1/ε²。这里我们关键用到了“物品尺寸至少为 ε”的假设。

那么,对于尺寸小于 ε 的“小物品”如何处理呢?思路很简单:先处理所有“大物品”(尺寸 ≥ ε),用上述方法得到一个近似最优的装箱方案。然后,我们尝试将这些小物品“填充”到已打开箱子的剩余空间中。如果一个箱子无法再放入任何小物品,说明它已经非常满了(剩余空间 < ε)。此时我们才需要为小物品打开新箱子。由于小物品尺寸很小,当需要打开新箱子时,其他所有箱子都至少装了 (1 - ε) 的体积,这本身就构成了一个 (1 + ε) 的近似。因此,小物品可以在最后以类似“见缝插针”的方式高效处理。

这就是 Fernandez de la Vega 和 Lueker 算法的核心思想。后续研究不断改进这个界限,目前最好的结果之一是 OPT + O(log² OPT)。一个重要的开放问题是能否达到 OPT + O(1)。

关于如何求解这个线性规划:由于物品尺寸种类数 D = 1/ε² 是常数,且每个配置最多包含 1/ε 件物品,因此可能的配置总数是常数个。理论上可以直接求解。在实践中,可以使用列生成方法,这涉及到对偶和单纯形法。

半正定规划简介

现在,让我们进入今天的主题:半正定规划。

首先,我们给出半正定矩阵的定义。我们只考虑实对称矩阵。一个实对称矩阵 A半正定的,如果对于所有实向量 x,都有 xᵀ A x ≥ 0。等价地,存在向量 v₁, ..., v_n,使得矩阵 A 的每个元素 A_{ij} = v_i · v_j(向量内积)。还存在其他等价定义,例如 A 可以表示为若干秩一矩阵的和。

半正定规划有两种等价的看待方式,各有其用处。

视角一:矩阵形式
我们将半正定规划视为线性规划的推广。我们有变量 X_{ij},它们自然地排列成一个矩阵 X。约束是线性的,形式为 A_k · X ≥ b_k,其中 · 表示矩阵的弗罗贝尼乌斯内积(即对应元素相乘后求和)。与线性规划的关键区别在于,我们要求变量矩阵 X 是半正定的,记作 X ≽ 0。因此,问题形式为:
最小化 C · X
满足 A_k · X ≥ b_k,对于 k = 1, ..., m
X ≽ 0

视角二:向量程序形式
这种视角更为几何化,通常也更实用。我们直接将变量视为向量 v₁, v₂, ..., v_n,它们的维度不受我们控制(但可以证明最优解不超过 n 维)。约束是这些向量内积的线性组合。例如,一个约束可能是 Σ_{i,j} a_{ij} (v_i · v_j) ≥ b。目标函数也是内积的线性组合。因为一个矩阵是半正定的,当且仅当它的元素可以表示为某些向量的内积。所以,向量程序形式与矩阵形式是等价的。

关于半正定规划,有几个重要事实:

  1. 对偶性:与线性规划类似,半正定规划也有对偶。弱对偶定理成立:任何原始可行解的目标值 ≥ 任何对偶可行解的目标值。强对偶性不一定成立,但在满足某些条件(如 Slater 条件)时成立。
  2. 解的大小:线性规划的解总是有理数且规模可控。而半正定规划的解可能是指数大小甚至是无理数。例如,可以构造一个 SDP 来强制变量间满足平方关系(如 x₂ = x₁², x₃ = x₂²,...),导致解呈双指数增长。因此,处理 SDP 时需要小心。
  3. 可求解性:如果假设解的大小是多项式级别的,那么存在内点法等算法可以在多项式时间内找到任意精度的近似解。对于今天的讲座,我们将假设 SDP 可以被精确求解。

应用:最大割问题的近似算法

半正定规划最早令人惊艳的应用之一就是用于近似求解最大割问题

给定一个无向无权图 G=(V,E),目标是找到一个划分 (S, V\S),使得跨越割的边数最多。这是 NP 难问题。

一个简单的随机算法是:独立地以 1/2 的概率将每个顶点放入 S。每条边被割的概率是 1/2,因此期望割的边数是 |E|/2。由于最优解最多割掉所有边,这是一个 1/2 近似的算法。贪心算法、局部搜索等也都能达到 1/2 的近似比。

Goemans 和 Williamson 在 1995 年提出了一个基于 SDP 的算法,将近似比大幅提升到了约 0.878

算法步骤如下:

  1. 整数二次规划建模
    为每个顶点 i 分配变量 x_i ∈ {+1, -1},+1 表示在 S 中,-1 表示在 V\S 中。那么,对于边 (i,j),如果它被割,则 (x_i - x_j)²/4 = 1(因为两者符号不同);否则为 0。因此,最大割问题等价于:
    最大化 Σ_{(i,j)∈E} (1 - x_i x_j)/2
    满足 x_i² = 1,对于所有 i。

  2. 松弛为向量程序(SDP)
    我们将标量变量 x_i 松弛为单位向量 v_i(模长为 1)。乘积 x_i x_j 被替换为内积 v_i · v_j。问题松弛为:
    最大化 Σ_{(i,j)∈E} (1 - v_i · v_j)/2
    满足 v_i · v_i = 1,对于所有 i。
    这是一个向量程序,可以等价地写成一个 SDP。这个 SDP 的最优值至少是原整数规划的最优值(即 OPT),因为我们可以将最优解中的 +1/-1 映射为两个反向的单位向量。

  3. 随机超平面舍入
    求解 SDP 后,我们得到一组单位向量 v_i。然后,我们随机选取一个单位球面上的随机向量 g(例如,服从多维标准正态分布,然后归一化)。对于每个顶点 i,如果 v_i · g ≥ 0,则将其放入 S;否则放入 V\S。

分析:
对于一条边 (i,j),设其对应的两个向量夹角为 θ,即 v_i · v_j = cos θ。在随机超平面舍入中,这条边被割当且仅当 g 落在将 v_iv_j 分开的区域内。这个概率恰好是 θ/π。
因此,边 (i,j) 被割的期望概率是 θ/π。
而 SDP 目标函数中,这条边的贡献是 (1 - cos θ)/2。
我们需要比较这两个量。定义函数 α_GW = min_{0≤θ≤π} [ (θ/π) / ((1 - cos θ)/2) ]。通过计算(或数值求解),这个最小值约为 0.878。这意味着,对于每条边,舍入算法得到的期望值至少是 SDP 值的 0.878 倍。由于 SDP 值 ≥ OPT,因此算法的期望割边数至少是 0.878 * OPT。

后续研究表明,在独特的游戏猜想下,0.878 这个近似比对于多项式时间算法是最好的。这为算法的紧性提供了有力的证据。

半正定规划的延伸:平方和规划

最后,我们简要介绍一个由半正定规划衍生出的强大框架:平方和规划。这将在我们后续的课程中详细讨论。

考虑一个经典问题:给定一个多元多项式 P(x₁, ..., x_n),判断它是否非负,即是否对所有实数输入都满足 P(x) ≥ 0。这是一个非常基础且困难的问题(即使是受限版本也是 NP 难的)。

一个充分条件是:如果多项式 P 可以写成一个平方和,即存在多项式 h₁(x), ..., h_k(x),使得 P(x) = Σ_i [h_i(x)]²,那么 P(x) 显然是非负的。

因此,我们可以提出一个“松弛”的判定问题:给定多项式 P,它是否具有一个平方和表示?如果答案是“是”,那么 P 非负;如果答案是“否”,我们则无法确定。

令人惊讶的是,判断一个多项式是否为平方和这个问题,可以通过一个半正定规划来求解!我们将在假期后的课程中展示如何构造这个 SDP。

需要指出的是,存在一些非负多项式不是平方和。但根据 Artin 对希尔伯特第 17 问题的解答,任何非负多项式都可以写成一个平方和与一个非零多项式的商。

平方和规划是近年来在算法、优化和机器学习中非常活跃和强大的工具,由 Lasserre 等人发展起来。它为解决一系列困难问题提供了统一的框架。

总结

本节课中我们一起学习了:

  1. 完成了装箱问题的线性规划近似算法分析,理解了如何通过分组和放缩技术处理物品尺寸,以及如何处理大小物品。
  2. 介绍了半正定规划的基本概念、两种等价形式(矩阵形式和向量程序形式)以及其重要性质。
  3. 深入探讨了半正定规划在最大割问题上的经典应用:Goemans-Williamson 算法。我们看到了如何将组合优化问题建模为整数二次规划,松弛为 SDP,并利用巧妙的随机超平面舍入技术获得优于简单随机算法的近似比。
  4. 简要展望了由 SDP 扩展出的平方和规划框架,为后续学习更强大的优化工具做了铺垫。

下节课我们将讨论在线算法,并在之后深入探讨平方和规划。

26:在线算法

在本节课中,我们将要学习在线算法领域,特别是竞争性分析框架。我们将通过一个具体的列表访问问题来理解这一概念,并分析一个简单而高效的算法。

概述

在线算法处理的是数据具有不确定性的问题。算法需要在不知道未来请求的情况下,对一系列请求做出即时决策。我们使用竞争性分析来衡量在线算法的性能,即将其成本与一个知道完整输入序列的最优离线算法的成本进行比较。

竞争性分析框架

在竞争性分析中,我们关注算法的竞争比。对于一个最小化问题,算法A的竞争比定义为所有可能输入序列I上,算法A在I上的成本与最优离线算法在I上的成本之比的最大值。

公式竞争比(A) = max_I [ 成本_A(I) / 成本_OPT(I) ]

我们的目标是设计竞争比尽可能小(即接近1)的在线算法。

列表访问问题

为了具体说明,我们来看一个经典问题:列表访问。

问题描述

  • 我们有一个包含n个元素的列表,初始顺序任意。
  • 算法会收到一个请求序列,每个请求要求“查找”某个特定元素x。
  • 成本计算:
    • 查找成本:找到元素x在当前列表中的位置。如果x在第k个位置,则成本为k。
    • 交换成本(可选):算法可以在内部以成本1交换列表中任意两个相邻元素的位置。
  • 目标:最小化处理整个请求序列的总成本(查找成本 + 交换成本)。

上一节我们介绍了竞争性分析的基本概念,本节中我们来看看列表访问问题的一个具体算法。

算法示例与分析

以下是几个简单的算法及其表现:

  • 无交换算法:只进行查找,从不重新排序列表。

    • 对于重复请求列表末尾元素的序列,该算法每次查找成本为n,而最优算法可以将该元素移至前端,使后续查找成本为1。其竞争比可达Ω(n)。
  • 按频率排序算法:根据元素历史被请求的总频率来排序列表。

    • 存在反例:先反复请求元素1,再反复请求元素2,依此类推。该算法不会将新出现的频繁元素(如2)提前,导致高成本,而最优算法会及时调整。其竞争比也可能很差。

前移算法(Move-To-Front, MTF)

一个简单而高效的算法是“前移算法”(MTF)。

算法描述:每当查找一个元素后,立即将该元素移动到列表的最前端。

这个算法非常直观,它基于“最近被访问的元素很可能再次被访问”的局部性原理。

MTF算法的竞争性证明

我们通过势能分析法来证明MTF算法是4-竞争的(即竞争比不超过4)。

证明思路

  1. 我们同时追踪在线算法MTF(记为A)和某个最优离线算法OPT(记为B)的列表状态。
  2. 定义一个势函数Φ,它是两个列表状态差异的度量:Φ = 2 * (#逆序对)。一个逆序对指的是一对元素(x, y),在A列表中x在y前面,但在B列表中y在x前面。
  3. 初始时,A和B列表相同,势能为0。势函数始终非负。
  4. 我们将证明,对于每一个请求步骤,满足以下不等式:
    公式成本_A + ΔΦ ≤ 4 * 成本_B
    其中成本_A是MTF处理该请求的成本,ΔΦ是势能的变化,成本_B是最优算法OPT处理该请求的成本。
  5. 将整个请求序列的所有步骤不等式相加,得到:
    总成本_A + Φ_最终 - Φ_初始 ≤ 4 * 总成本_B
    由于Φ_初始 = 0Φ_最终 ≥ 0,因此总成本_A ≤ 4 * 总成本_B。这就证明了MTF是4-竞争的。

证明概要(单步分析)

  • 情况1:MTF处理查找请求。设请求元素为x。令S为在A和B列表中都在x之前的元素集合。MTF的成本是|S|+1(找到x)加上|S|(将x前移经过的元素数),即2|S|+1。移动x后,与S中元素产生新逆序,势能增加2|S|;与某些元素消除逆序,势能减少2|T|(T的定义见下文)。可以证明,成本_A + ΔΦ ≤ 4|S| + 2。而OPT的成本成本_B至少为|S|+1(因为它也必须找到x,而x在B列表中至少排在S中所有元素之后)。因此不等式成立。
  • 情况2:OPT执行交换。OPT可能以成本1进行交换,这最多创建2个新逆序(ΔΦ ≤ 2)。此时MTF无成本。我们有0 + ΔΦ ≤ 2 ≤ 4*1 = 4*成本_B,不等式同样成立。

通过这个证明,我们不仅确认了MTF的良好性能,也展示了势能分析法这一在线算法分析中的强大工具。

其他在线算法问题简介

在线算法研究涵盖许多有趣的问题,竞争性分析提供了分析它们的统一框架。

缓存(Paging)问题

这是列表访问问题的近亲,也是在线算法研究的起源问题之一。

  • 场景:拥有一个小缓存(容量k)和一个大内存。访问数据页时,若页在缓存中(命中)则成本为0;若不在(缺页),则需从内存调入,并可能从缓存中淘汰一页,成本为1。
  • 目标:最小化总缺页次数。
  • 著名结论
    • 确定性算法中,LRU(最近最少使用)等算法是k-竞争的,且这是最优的。
    • 随机化算法可以达到H_k-竞争的(H_k是第k个调和数,约等于ln k),且这也是最优的。

k-服务器(k-Server)问题

这是一个更一般的模型,在理论计算机科学中备受关注且尚未完全解决。

  • 场景:在某个度量空间(如一条线、一个网格)中有k个服务器。请求序列在空间中的点出现。必须指派一个服务器移动到请求点提供服务,成本是移动距离。
  • 目标:最小化总移动距离。
  • 挑战:即使在线段上,确定性贪心算法(派最近的服务器)的竞争比也是无界的。已知的“双覆盖”算法对任意度量空间是k-竞争的,但对于线段是否存在竞争比更优(如O(log k))的算法仍是开放问题。

凸体追逐(Convex Body Chasing)问题

这是一个连接在线算法与连续优化的现代问题。

  • 场景:算法控制一个d维空间中的点x_t。每一轮,揭示一个凸代价函数f_t(或一个凸集K_t,要求点必须落入其中)。算法选择新点x_t,并支付移动代价||x_t - x_{t-1}||和函数代价f_t(x_t)
  • 目标:最小化总代价。
  • 挑战:即使要求点必须依次落入一系列嵌套的凸集内,仅最小化移动距离,也存在√d的竞争比下界。能否达到O(√d)竞争比是开放问题。一个关键工具是凸集的“斯坦纳点”(Steiner Point),以其作为每轮的移动目标可证明获得O(d)的竞争比。

总结

本节课中我们一起学习了在线算法的核心框架——竞争性分析。我们通过列表访问问题深入探讨,分析了简单算法的缺陷,并重点学习了高效的前移算法及其势能分析证明法。此外,我们还简要了解了缓存、k-服务器和凸体追逐等经典及现代的在线算法问题,看到了竞争性分析在解决具有状态和记忆的在线决策问题中的强大应用。这些概念和技巧是设计应对数据不确定性算法的基石。

27:平方和范式 🧮

在本节课中,我们将要学习平方和范式。这是一种用于分析和优化多项式系统的强大框架。我们将从线性规划的对偶性出发,逐步探讨如何将其思想推广到多项式系统,并介绍平方和规划这一核心工具。

从线性规划到多项式系统

上一节我们介绍了线性规划中的强对偶性和Farkas引理。本节中我们来看看如何将这些思想推广到更复杂的多项式系统。

考虑一个多项式优化问题。给定一个多项式 P(x),我们希望在所有满足一组多项式等式和不等式约束的向量 x 上最大化 P(x)。具体形式如下:

最大化 P(x)
约束条件:
    F_i(x) ≥ 0, 对于所有 i
    G_j(x) = 0, 对于所有 j

其中,x 是一个向量,F_iG_j 都是多项式。一个著名的特例是最大割问题,它可以表述为:

最大化 Σ_{(i,j)∈E} (1 - x_i * x_j)/2
约束条件:
    x_i^2 = 1, 对于所有 i

这里的约束 x_i^2 = 1 等价于 x_i ∈ {-1, 1}。这个集合是离散的、非凸的,使得优化问题变得非常困难。

Farkas引理与证明系统

在线性规划中,Farkas引理为我们提供了一个判断系统是否可行的“证明系统”。它指出,对于一个线性系统 Ax ≤ b,以下两种情况恰好有一种成立:

  1. 系统是可行的(存在 x 使得 Ax ≤ b)。
  2. 系统是不可行的,并且存在一个非负向量 y,使得 y^T A = 0y^T b = -1

第二种情况提供了一个不一致性的证明:我们可以将原始不等式进行非负线性组合,得到 0 ≤ -1 这一矛盾。这个证明系统是完备的:任何不可行的线性系统都能通过这种方式被证明。

平方和范式:对多项式系统的推广

对于多项式系统,我们希望有一个类似的“证明系统”。我们希望说:要么多项式系统 K(由 F_i(x) ≥ 0G_j(x) = 0 定义)是可行的,要么我们可以证明它是不可行的。

一个自然的想法是模仿Farkas引理,尝试将约束进行组合。对于多项式,我们不能只使用标量系数,而需要使用多项式作为系数。更重要的是,为了保持不等式的非负性,我们要求用于乘不等式 F_i(x) ≥ 0 的系数多项式本身也是非负的。

以下是平方和范式的一个核心概念:

一个多项式是平方和,如果它可以写成其他多项式的平方和。例如:
H(x) = (2x_1 + 3x_2)^2 + (x_1 - x_3)^2

平方和多项式永远是非负的。平方和范式建议我们使用平方和多项式作为组合约束时的系数。

那么,我们期望的“多项式Farkas引理”大致如下:如果系统 K 不可行,那么存在平方和多项式 S_i(x) 和多项式 T_j(x),使得:
-1 = Σ_i S_i(x) * F_i(x) + Σ_j T_j(x) * G_j(x)

对于所有 x 恒成立。因为 F_i(x) ≥ 0S_i(x) 是平方和(故非负),所以右边第一项非负。而 G_j(x) = 0,所以右边第二项为零。这就得到了 -1 等于一个非负量的矛盾,从而证明了系统的不一致性。

然而,这个精确的表述并不总是成立。一个被称为 Positivstellensatz 的定理给出了正确的形式:如果系统 K 是紧致的(闭且有界),并且不可行,那么 -1 可以写成一个更复杂的表达式,该表达式涉及约束多项式的乘积与平方和多项式的组合。这为多项式系统提供了一个完备的证明系统。

检测平方和:半定规划的应用

为了实际使用平方和范式,我们需要解决一个基本问题:如何判断一个给定的多项式是否是平方和?

令人惊讶的是,这个问题可以通过半定规划来解决。

假设我们有一个 d 次多项式 P(x),我们想知道它是否能写成一些次数不超过 d/2 的多项式的平方和。

我们可以将 P(x) 表示为一系列单项式 x^α(其中 α 是指数向量)的线性组合。设 z 是一个向量,其分量是所有次数不超过 d/2 的单项式(例如 1, x_1, x_2, x_1^2, x_1x_2, ...)。

那么,P(x) 是平方和,当且仅当存在一个半正定矩阵 Q,使得 P(x) = z^T Q z 对所有 x 成立。这里,z^T Q z 展开后,Q 中的元素就对应了平方和表示中系数的各种乘积组合。

因此,判断 P(x) 是否为平方和,等价于寻找一个满足一组线性等式(这些等式由 P(x) 的系数决定)的半正定矩阵 Q。这正是一个半定规划问题,其规模约为 n^{O(d)}

通过伪期望进行优化

最后,我们来看如何利用平方和思想来近似求解困难的多项式优化问题。

考虑最小化 P(x) 在约束集 K 上的值。一个关键的思路是,我们不直接寻找最优解 x*,而是寻找一个在 K 上的概率分布 μ,使得期望值 E_{x~μ}[P(x)] 最小。最优解显然对应一个集中在 x* 上的分布。

然而,优化整个分布空间是困难的。我们观察到,对于多项式 P,其期望值仅依赖于分布 μ低阶矩(即 E[x^α] 对于小的 |α|)。

这引出了伪期望方法。我们定义一组变量 L(x^α),我们希望它们能代表某个分布 μ 的矩。我们要求这个线性泛函 L 满足:

  • L(1) = 1(概率分布归一化)。
  • 对于所有约束多项式 G_j,有 L(G_j) = 0(在约束集上期望为零)。
  • 对于所有约束多项式 F_i 和所有平方和多项式 S,有 L(S * F_i) ≥ 0(在非负函数上期望非负)。

然后,我们尝试在满足这些约束的条件下,最小化 L(P)。如果我们只对 SF_i*S 的次数加以限制(例如只考虑低阶平方和),那么这个问题就变成了一个关于矩变量 L(x^α) 的半定规划。

这个半定规划的解给出了原问题最优值的一个下界。其对偶问题恰好对应于寻找一个低阶的平方和证明,以证明 P(x) - λK 上是非负的(即 λ 是目标值的一个下界)。这就是平方和规划的基本框架。

总结

本节课中我们一起学习了平方和范式。我们从线性规划的Farkas引理出发,探讨了如何为多项式系统构建类似的证明系统,这引出了Positivstellensatz定理。我们了解到,判断一个多项式是否为平方和可以转化为半定规划问题。最后,我们介绍了利用伪期望和矩方法进行多项式优化的基本思路,该方法通过求解一个半定规划松弛来获得原问题的最优下界。平方和范式从而在计算复杂度和证明能力之间提供了一个强大的折衷工具。

28:鞅与集中性

在本节课中,我们将学习鞅的基本概念及其在算法分析中的应用。我们将从定义鞅开始,介绍一些基本的集中性界,然后探讨两个应用:随机图的色数分析和差异最小化问题。

鞅的定义与直观理解

上一节我们介绍了课程概述,本节中我们来看看什么是鞅。

鞅的核心思想很简单。考虑一系列独立同分布的随机变量 X₁, X₂, ..., Xₙ,每个变量以1/2的概率取+1,以1/2的概率取-1。定义部分和 Sₙ = X₁ + X₂ + ... + Xₙ。这是一个无偏随机游走。我们知道 Sₙ 会集中在均值0附近,其标准差为 √n

现在,考虑一个更复杂的过程。假设游走从0开始,当它首次到达边界 -A+B 时停止。此时,后续的随机变量不再独立,因为它们依赖于过去是否已触及边界。然而,我们仍然有一个关键性质:在给定过去所有信息 X₁, ..., Xₙ₋₁ 的条件下,增量 Xₙ 的期望值始终为0。更一般地,对于部分和 Sₙ,有:

E[Sₙ | S₁, ..., Sₙ₋₁] = Sₙ₋₁

满足这一性质的随机变量序列 {Sₙ} 就称为一个鞅。鞅可以理解为一种“公平博弈”:在已知所有历史信息后,下一步的期望收益就是当前的收益,没有系统性优势。

停时与可选停止定理

上一节我们定义了鞅,本节中我们来看看一个与之紧密相关的概念:停时。

停时是一个随机时间 T,其事件 {T = t} 是否发生仅由截至时间 t 的信息 S₁, ..., Sₜ 决定。例如,随机游走首次触及边界 -A+B 的时刻就是一个停时。而“最后一次出现正面”的时刻则不是停时,因为判断它需要知道未来的信息。

以下是可选停止定理的一个版本。

定理:设 {Sₙ} 是一个鞅,T 是一个停时。如果 E[T] < ∞ 且增量 |Sₙ - Sₙ₋₁| ≤ C(对某个常数 C 和所有 n 成立),那么有:

E[S_T] = E[S₀]

这个定理非常强大。让我们应用它来分析边界为 -A+B 的随机游走。设 S₀ = 0。根据定理,E[S_T] = 0。另一方面,我们可以直接计算 E[S_T]

E[S_T] = P_B * B + (1 - P_B) * (-A)

其中 P_B 是停止在 +B 的概率。令两者相等:

0 = P_B * B - (1 - P_B) * A

解得:

P_B = A / (A + B)

类似地,停止在 -A 的概率为 B / (A + B)。如果 A = B,则两个概率均为1/2。

计算期望停时

上一节我们计算了停止在边界的概率,本节中我们来看看如何计算到达边界所需的期望时间。

我们构造另一个鞅。定义 Qₙ = Sₙ² - n。可以验证 {Qₙ} 也是一个鞅,即 E[Qₙ | Q₁, ..., Qₙ₋₁] = Qₙ₋₁。对其应用可选停止定理,得到 E[Q_T] = E[Q₀] = 0

现在展开 E[Q_T]

E[Q_T] = E[S_T²] - E[T] = 0

我们已经知道 E[S_T²] = P_B * B² + (1 - P_B) * A²。代入 P_B = A/(A+B),计算得:

E[S_T²] = A * B

因此:

E[T] = E[S_T²] = A * B

这个结果符合直觉:边界距离原点越远(AB 越大),期望停时就越大。当 A = B 时,E[T] = A²,这与随机游走扩散需要 ~(距离)² 步的直觉相符。

鞅的集中不等式

上一节我们看到了鞅在停时上的性质,本节中我们来看看鞅的集中性。

对于独立随机变量之和,我们有霍夫丁不等式等集中性界。对于鞅,也有类似的结果,称为阿祖马-霍夫丁不等式。

定理(阿祖马-霍夫丁不等式):设 {Sₙ} 是一个鞅,满足 |Sᵢ - Sᵢ₋₁| ≤ cᵢ 对于所有 i 成立。那么对于任意 t > 0,有:

P( |Sₙ - E[Sₙ]| ≥ t ) ≤ 2 exp( -t² / (2 ∑ᵢ₌₁ⁿ cᵢ²) )

这个不等式告诉我们,鞅会以很高的概率集中在它的期望值附近,偏差由步长 cᵢ 控制。它是分析许多复杂随机过程的有力工具。

应用:随机图的色数

上一节介绍了鞅的集中不等式,本节中我们来看一个具体应用:随机图的色数。

考虑一个 Erdős–Rényi 随机图 G(n, p),它有 n 个顶点,每条边以概率 p 独立出现。色数 χ(G) 是对该图进行正常着色所需的最少颜色数,它是关于所有 n(n-1)/2 条边出现情况的随机变量。

我们想知道 χ(G) 是否集中在其期望值附近。直接应用阿祖马不等式,如果我们一条一条地暴露边(边暴露鞅),每次改变一条边最多改变色数1,那么 cᵢ = 1∑cᵢ² = m = n(n-1)/2。不等式给出:

P( |χ - E[χ]| ≥ t ) ≤ 2 exp( -t² / n² )

为了使这个概率很小(例如小于 1/poly(n)),我们需要 t = Ω(n √(log n))。这个界很弱,因为色数本身最大为 n

一个更聪明的办法是使用顶点暴露鞅。我们依次暴露每个顶所有与之前顶点的连边。当暴露一个新顶点时,最多只需要一种新颜色来着色它,因此对应的 cᵢ ≤ 1。现在只有 n 步,∑cᵢ² ≤ n。不等式变为:

P( |χ - E[χ]| ≥ t ) ≤ 2 exp( -t² / (2n) )

t = C√(n log n),我们可以使概率小于 1/poly(n)。这表明随机图的色数以高概率落在宽度为 O(√(n log n)) 的区间内。事实上,更精细的分析可以证明它集中在常数个整数值上。

鞅与滤波

上一节我们看到了顶点暴露鞅的威力,本节中我们从更抽象的视角理解鞅。

考虑一个概率空间,它包含所有可能的结果。一个滤波 {Fₙ} 是一系列不断增大的事件集合(σ-代数),代表了我们在不同时间点所掌握的信息。F₀ 信息最少(可能只知道概率是0或1),Fₙ 信息最多(可能知道所有细节)。

对于一个随机变量 F(例如图的色数),我们可以定义关于滤波 {Fₙ} 的条件期望序列:

Sₙ = E[F | Fₙ]

这个序列 {Sₙ} 自动构成一个鞅,称为 F 的 Doob 鞅。S₀ = E[F] 是全局期望,而 Sₙ 是在掌握了 Fₙ 信息后对 F 的最佳估计。最终,当掌握全部信息时,S_N = F 本身。

顶点暴露鞅正是这种 Doob 鞅的一个例子,其中滤波 Fₙ 由前 n 个顶点的所有连边信息生成。

总结

本节课中我们一起学习了鞅的基本理论及其算法应用。

我们首先定义了鞅,它描述了条件期望保持不变的公平随机过程。接着,我们引入了停时的概念,并学习了可选停止定理,用它来计算随机游走击中边界的概率和期望时间。然后,我们探讨了鞅的集中性质,特别是阿祖马-霍夫丁不等式,它表明鞅会以高概率集中在均值附近。最后,我们将这些工具应用于随机图色数的分析,通过构造顶点暴露鞅,证明了色数具有强烈的集中性。

鞅是分析具有复杂依赖关系的随机过程的强大框架,在随机算法、在线学习、金融数学等领域都有广泛应用。

29:扩展图

在本节课中,我们将学习扩展图的基本概念、定义、性质及其在算法中的应用。扩展图是连接性极强的图,在随机算法、编码理论等领域有重要作用。


扩展图定义

扩展图是一种具有强连通性质的图。具体来说,一个图的边扩展性衡量了图中任意一个不太大的子集与其补集之间的边数。

边扩展与传导率

以下是两种衡量图扩展性的核心定义。

边扩展 对于一个图 ( G ) 和一个顶点子集 ( S ),其边扩展 ( \phi(S) ) 定义为:
[
\phi(S) = \frac{|E(S, \overline{S})|}{|S|}
]
其中 ( E(S, \overline{S}) ) 是连接 ( S ) 与其补集 ( \overline{S} ) 的边的数量。图的边扩展 ( \phi(G) ) 是所有大小不超过 ( n/2 ) 的子集 ( S ) 中 ( \phi(S) ) 的最小值。

传导率 传导率是另一个密切相关的概念。对于一个顶点子集 ( S ),其传导率 ( h(S) ) 定义为:
[
h(S) = \frac{|E(S, \overline{S})|}{\sum_{v \in S} \deg(v)}
]
对于 ( d )-正则图,传导率简化为 ( h(S) = \phi(S) / d )。图的传导率 ( h(G) ) 是所有体积(即关联边数之和)不超过总边数一半的子集 ( S ) 中 ( h(S) ) 的最小值。

如果一个图族中所有图的传导率都大于等于某个常数 ( \epsilon ),则称该图族为 ( \epsilon )-扩展图。


扩展图的例子

上一节我们介绍了扩展图的定义,本节中我们来看看哪些图是好的扩展图。

以下是几个扩展图的例子:

  • 完全图:完全图是极好的扩展图。对于任意子集 ( S ),跨边数量与内部边数量之比很高。
  • 超立方体图:( d ) 维超立方体图是一个 ( d )-正则图。其最差情况下的扩展性约为 ( 1/d )。随着维度 ( d ) 增大,扩展性趋近于零,因此它不是一个常数扩展图族。
  • 随机正则图:随机生成的 ( d )-正则图(例如,通过连接多个随机完美匹配构建)以高概率是常数扩展图。
  • 确定性构造:也存在确定性的扩展图构造。一个著名的例子是取一个有限域 ( \mathbb{F}_p ) 的元素作为顶点,将每个元素 ( x ) 连接到 ( x+1 )、( x-1 ) 和 ( x^{-1} )(模 ( p )),这给出了一个 3-正则扩展图。

谱扩展

除了组合定义(边扩展/传导率),扩展性还有一个重要的谱定义,它与图的邻接矩阵的特征值有关。

谱间隙

设图 ( G ) 是 ( d )-正则图,其邻接矩阵为 ( A )。( A ) 的特征值为 ( \lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_n )。对于连通图,有 ( \lambda_1 = d ),且 ( \lambda_1 > \lambda_2 )。图的谱间隙定义为:
[
\text{谱间隙} = 1 - \frac{\lambda_2}{\lambda_1} = 1 - \frac{\lambda_2}{d}
]
如果图的谱间隙至少为某个常数 ( \epsilon ),则称该图为 ( \epsilon )-谱扩展图。

Cheeger 不等式

组合扩展性(传导率)与谱扩展性(谱间隙)之间通过著名的 Cheeger 不等式 紧密联系:
[
\frac{1}{2} \left( 1 - \frac{\lambda_2}{d} \right) \le h(G) \le \sqrt{2 \left( 1 - \frac{\lambda_2}{d} \right)}
]
这个不等式表明,传导率大致介于谱间隙的一半与其平方根之间。这意味着一个图是好的组合扩展图当且仅当它是一个好的谱扩展图(在常数因子内)。例如,在环图 ( C_n ) 上,传导率为 ( \Theta(1/n) ),而谱间隙为 ( \Theta(1/n^2) ),显示了不等式可以达到紧界。


为什么扩展图重要:快速混合

扩展图的一个关键应用是分析马尔可夫链的收敛速度,即快速混合

随机游走与均匀分布

考虑在一个 ( d )-正则图 ( G ) 上进行随机游走:从任意顶点出发,每一步均匀随机地走到一个邻居顶点。设 ( p_t ) 为时间 ( t ) 时顶点的概率分布向量。可以证明,如果图 ( G ) 是连通且非二部的,那么当 ( t \to \infty ) 时,( p_t ) 会收敛到均匀分布 ( \pi )(即每个顶点的概率为 ( 1/n ))。

收敛速度与谱间隙

收敛速度取决于谱间隙 ( \epsilon )。具体来说,经过 ( t ) 步后,分布 ( p_t ) 与均匀分布 ( \pi ) 之间的总变差距离满足:
[
d_{\text{TV}}(p_t, \pi) \le \frac{\sqrt{n}}{2} (1 - \epsilon)^t
]
为了使总变差距离小于某个 ( \delta > 0 ),所需的步数 ( t ) 约为:
[
t = O\left( \frac{\log(n/\delta)}{\epsilon} \right)
]
这意味着,只要谱间隙 ( \epsilon ) 是一个常数,那么仅需 ( O(\log n) ) 步,随机游走就能接近均匀分布。即使图本身非常大(例如顶点数 ( n ) 是指数级的),所需的混合时间也只是多项式的(因为 ( \log(\exp(n)) = n ))。这种性质称为快速混合

应用:马尔可夫链蒙特卡洛 (MCMC)

MCMC 方法利用这一原理从复杂分布中采样。例如,要均匀采样一个巨大图的所有生成树,可以定义这样一个马尔可夫链:状态是所有生成树,状态之间的转移通过“添加一条边并删除另一条边”来实现。这个链的状态图本身就是一个巨大的图。如果这个状态图是一个扩展图(具有常数谱间隙),那么在这个链上进行随机游走就能在多项式时间内接近均匀分布,从而实现对生成树的近似均匀采样。分析此类链的谱间隙是理论计算机科学中的一个核心问题。


扩展图的另一个应用:纠错码

扩展图在编码理论中也有巧妙的应用,用于构造性能良好的纠错码。

Tanner 构造法

Tanner 提出了一种利用扩展图从小码构造大码的方法:

  1. 选取一个 ( d )-正则扩展图 ( G ),有 ( N ) 个顶点。
  2. 选取一个良好的“基础”纠错码 ( C_0 ),其码字长度为 ( d )(与图的度相同)。
  3. 构造一个长码:将大码的每个比特分配给图 ( G ) 的一条边。因此,码字长度 ( M ) 等于图的边数 ( (N \cdot d / 2) )。
  4. 定义有效码字:一个边的标记(即一个 ( M ) 比特串)是有效码字,当且仅当对于图 ( G ) 中的每一个顶点,其关联的 ( d ) 条边上的 ( d ) 个比特构成基础码 ( C_0 ) 中的一个有效码字。

为什么需要扩展图?

扩展图的特性确保了新构造的长码具有良好的距离属性。直观上,如果试图翻转新码字中的少数几个比特(引入错误),由于图是扩展图,这些错误比特会关联到许多不同的顶点。每个受影响的顶点都会检测到其局部 ( d ) 个比特不再构成 ( C_0 ) 的有效码字。为了“修复”这些顶点使其重新满足局部约束,往往需要翻转更多的比特。这意味着小的错误模式无法对应另一个有效码字,从而保证了码字之间的最小距离较大。这类码称为低密度奇偶校验码,是现代通信中使用的 Turbo 码、LDPC 码等的基础。


高维扩展图简介

最后,我们简要介绍高维扩展图的概念,这是扩展图概念在多维情形下的推广。

单纯复形

高维扩展图建立在单纯复形的结构上。一个单纯复形由一个底层顶点集和一系列顶点子集(称为“面”)构成,并且满足“向下封闭”性质:如果一个面 ( S ) 在复形中,那么 ( S ) 的所有子集也在复形中。如果一个单纯复形中所有极大面(不被其他面包含的面)的大小相同,则称其为的。

高维扩展性的定义

对于一个纯单纯复形,我们可以关注其不同“层次”的图:

  1. 底层图:忽略所有维度大于 1 的结构,只保留顶点(0-维面)和边(1-维面),这形成一个图。我们要求这个图是一个扩展图。
  2. 链结图:对于复形中的任何一个面 ( \sigma ),可以定义其链结。链结本身也是一个单纯复形,它由所有包含 ( \sigma ) 的面去掉 ( \sigma ) 中的顶点后得到。对于链结复形,我们同样可以看它的底层图。

如果一个单纯复形本身及其所有面的链结的底层图都是扩展图(具有常数传导率),那么这个单纯复形就被称为一个高维扩展图

高维扩展图近年来在理论计算机科学中变得非常重要,因为它们的组合和代数性质可以用来证明关于随机游走、采样和近似算法的新结果。


总结

本节课中我们一起学习了扩展图的核心内容。我们首先定义了边扩展和传导率这两个组合概念,并给出了完全图、随机图等例子。接着,我们引入了谱扩展的概念,并通过 Cheeger 不等式将组合扩展与谱扩展联系起来。然后,我们探讨了扩展图的关键应用:一是确保随机游走快速混合,从而用于马尔可夫链蒙特卡洛方法;二是用于构造具有良好纠错能力的 Tanner 码。最后,我们简要介绍了高维扩展图的基本思想,它通过要求单纯复形及其所有链结的底层图都具有扩展性,将扩展图的概念推广到更高维的结构。扩展图是连接图论、代数、概率论和编码理论的强大工具。

30:高维扩展器 🧠

在本节课中,我们将学习高维扩展器的基本概念、定义,并了解如何利用其性质来分析复杂结构(如拟阵)上的随机游走混合时间。我们将从回顾图扩展器开始,逐步构建对高维扩展器的直观理解。

回顾:图扩展器

上一节我们介绍了图扩展器的基本概念。本节中,我们来看看其正式定义。

设 G 是一个无向、无权、d-正则图。我们关注其邻接矩阵的特征值。设 λ₁ ≥ λ₂ ≥ ... ≥ λₙ 为特征值。对于连通且非二分的图,λ₁ = d,且 λ₁ 与 λ₂ 之间存在间隙。

我们定义谱半径为:

ρ = max(|λ₂|, |λₙ|)

对于一个连通且非二分的图,ρ < λ₁。我们关注比值 ρ/λ₁。如果 ρ/λ₁ ≤ ε,且 ε 很小,则称该图为一个良好的扩展器。这样的图具有快速混合的性质。

以下是关于扩展器图上随机游走的关键性质:

  • 设 p_t 为 t 步随机游走后的概率分布。
  • 当 t → ∞ 时,p_t 收敛于均匀分布 π。
  • 在 O((log N)/ε) 步后,p_t 与 π 的总变差距离很小。

引入高维对象:单纯复形

上一节我们回顾了图扩展器。本节中,我们来看看如何将扩展的概念推广到更高维的结构。

一个单纯复形 X 是一个向下封闭的集合系统。它由一个基础元素集 U 和一个子集族 F 构成,满足:若 S ∈ F 且 T ⊆ S,则 T ∈ F。

  • 每个集合 S ∈ F 称为一个
  • 维度为 |S| - 1。
  • 极大面称为facet
  • 如果所有 facet 维度相同,则称该单纯复形是的。

拟阵是纯单纯复形的一个典型例子。

给定一个单纯复形,我们可以定义其1-骨架,即由所有 0 维面(顶点)和 1 维面(边)构成的图。

另一个重要概念是。对于面 α ∈ X,其链 X_α 定义为:

X_α = { β | β ∩ α = ∅, β ∪ α ∈ X }

直观上,链是包含 α 的所有面的集合,然后从中移除 α。在图拟阵中,这类似于“收缩”操作。

定义高维扩展器

上一节我们定义了单纯复形及其链。本节中,我们来看看如何定义高维扩展器。

一个单纯复形 X 被称为具有 ε 谱扩展,如果对于所有维度不超过 (d-2) 的面 α(其中 d 是复形的维度),其链的 1-骨架图都具有谱半径 ρ ≤ ε。

这意味着,不仅整个复形的底层图是扩展器,每个局部“邻域”(即链)的图也必须是扩展器。这是一种非常强的扩展性质。

构造这样的高维扩展器并非易事。已知的构造大多是代数的(例如基于群构造),而非随机的。一个平凡的例子是完全单纯复形(包含所有可能的子集)。

关键定理与下降引理

上一节我们给出了高维扩展器的定义,它要求所有链都具备扩展性。本节中,我们来看看一个简化分析的强大定理。

Oppenheim 的下降引理指出,要证明整个单纯复形是高维扩展器,只需验证顶层(维度为 d 和 d-1 的面)的链具有良好的扩展性,并且所有链的 1-骨架图都是连通的。如果这些条件满足,那么顶层的扩展性质可以“渗透”到所有下层。

具体而言,如果顶层链具有 ε 的单边谱隙,那么整个复形具有 Ω(ε/d) 的谱扩展。这大大简化了分析工作,因为我们只需要关注最高维度的结构。

应用:生成树拟阵的快速混合

上一节我们介绍了简化高维扩展器分析的工具。本节中,我们来看看如何将其应用于一个具体问题:证明生成树拟阵上的随机游走混合迅速。

考虑一个 n 个顶点的图。其生成树拟阵的 facet 是 n-1 条边的集合(即生成树)。我们关注上下行走:从一个生成树开始,随机删除一条边,然后随机添加一条能恢复树结构的边,从而走到另一个生成树。

以下是分析该随机游走混合时间的关键步骤:

  1. 首先,证明生成树拟阵是一个高维扩展器。利用下降引理,只需分析顶层链(对应于具有 n-3 条边的森林)。可以证明,这类链的图具有极好的扩展性质(谱隙很大)。
  2. 接着,建立不同层级随机游走之间的联系。设 M_d 为在 d 维面(生成树)上的上下行走。可以证明,M_d 的谱与非零特征值与在 (d-1) 维面上的下上行走 M'_{d-1} 相同。
  3. 然后,通过扩展性参数,将 M'_{d-1} 的谱与在 (d-1) 维面上的上下行走 M_{d-1} 联系起来,其间只损失一个与谱隙相关的因子。
  4. 重复这一过程,将高层面的行走谱与底层面的行走谱联系起来。由于在高维扩展器中,各层链的谱隙都很大(在我们的例子中接近最优),因此在整个迭代过程中谱隙的衰减是可控的。
  5. 最终,可以证明 M_d 的第二大特征值满足 λ₂ ≤ 1 - Ω(1/d)。这意味着随机游走的混合时间为 O(d² * log(生成树数量)),即关于问题规模是多项式时间的。

总结与展望

本节课中,我们一起学习了高维扩展器的基本框架。我们从图扩展器出发,定义了单纯复形和高维扩展器,并借助下降引理这一强大工具,将复杂的全局性质归结为顶层结构的性质。最后,我们概述了如何利用这套理论证明生成树拟阵上马尔可夫链的快速混合。

高维扩展器是一个强大且活跃的研究领域,它使得分析许多复杂组合结构上的随机过程成为可能。除了生成树采样,这套方法也已成功应用于采样染色、匹配等其它问题。然而,其背后的数学通常比较深奥。希望本教程能为你提供一个初步的直观理解,并激发你进一步探索的兴趣。

posted @ 2026-03-28 12:23  布客飞龙V  阅读(1)  评论(0)    收藏  举报