近似算法与线性规划

中文 | English

为什么需要近似算法

在前几章中,我们已经看到:

于是,我们退一步,问一个现实问题:

如果我不追求最优解,是否可以快速求一个“差不多”的解?

这个就是近似解。

什么是近似算法(Approximation Algorithm)

定义(非形式化):

近似算法是一个多项式时间算法, \ 它输出的解不一定是最优解,但保证和最优解之间的“差距”有上界。

我们通常用 近似比(approximation ratio) 来衡量算法质量。

近似比(Approximation Ratio)

对于一个最小化问题:

Approximation Ratio=算法解最优解

如果一个算法保证:

算法解ρOPT

那么称它是一个 ρ-approximation algorithm

负载均衡问题(Load Balancing Problem)

在570课程的 Lecture 13 里用来引入近似算法的第一个例子。

问题描述

Greedy Balancing(贪心负载均衡)

算法:

  1. 按给定顺序处理作业

  2. 每次把当前作业分配给当前负载最小的机器

这个其实是一个很简单的贪心思想。

近似比分析(核心思想)

设:

结论: T2T

所以这个贪心算法是一个是一个 2-approximation 算法

直觉可以告诉我们:

改进的贪心:LPT(1.5-Approximation)

改进思路:

先把作业按处理时间从大到小排序,再用相同的贪心策略。

这是著名的 LPT(Longest Processing Time First)。

结论

Lecture 13 给出证明:

T1.5T

因此:这是一个 1.5-approximation 算法

这说明:简单排序 + 贪心,就能显著提升近似质量。

Vertex Cover 的 2-Approximation 算法

回到我们非常熟悉的 Vertex Cover。

算法(非常重要)

这个算法就是 2-Approximation,为什么:

因此:|S|2|OPT|

这是一个经典的 2-approximation 算法。

为什么 VC 的近似算法不能直接用于 Independent Set?

虽然:

Independent SetVertex Cover

但近似并不保结构。

结论:规约 ≠ 近似可传递

Set Cover 与 Vertex Cover 的近似关系

原因:

结论:Set Cover 的 ρ-approx ⇒ Vertex Cover 的 ρ-approx

Max-3SAT 的近似算法

问题:给一堆长度为 3 的子句,最大化被满足的子句数。

这是一个极其简单的 1/2-Approximation

算法:

  1. 把所有变量设为 TRUE

  2. 如果 ≥ 50% 子句满足,结束

  3. 否则全部设为 FALSE

结论: 这是一个 1/2-approximation

课程上还说明:更复杂的方法可以做到 8/9-approximation,但不展开。

用线性规划(LP)设计近似算法

加权 Vertex Cover 的 ILP 表达

定义变量:

xi={1iS0iS

目标函数:

miniwixi

约束:

xi+xj1(i,j)E

这是一个 整数线性规划(ILP)。

LP Relaxation(关键技巧)

把:

xi{0,1}

放松成:

xi[0,1]

得到一个 线性规划(LP),可以多项式时间求解。

从 LP 解构造近似解

定义:

S={ixi1/2}

正确性:

近似比分析:

w(S)2w(OPT)

LP Relaxation + Round 得到 2-Approximation

LP、IP 与复杂度类别的关系

Lecture 13 中的总结图非常关键: