Interval Scheduling(贪心 · exchange argument)
MT1 Q2 风格:scheduling 类贪心$n$ 个区间,区间 $i$ 的起止时间 $(s_i, f_i)$。两个区间 compatible iff 不重叠。求最大兼容子集。
算法:按 $f_i$ 升序排,贪心扫描,若与上一选区间不冲突就选。证明用 exchange argument。
每个 topic 都被切成 3 轮。先把所有 topic 的 Round 1 全走一遍(拿到全景),再回头做 Round 2 → Round 3。考试当晚 7 PM 开始,目标是 Round 3 在前一晚完成。
设定:两个玩家 Alice (行 / row, 最大化者) 和 Bob (列 / column, 最小化者)。一个 payoff 矩阵 $M$,$M_{ij}$ = 当 Alice 选行 $i$、Bob 选列 $j$ 时,Bob 付给 Alice 的钱。
关键问题:纯策略下 Alice 和 Bob 看到对方落子才决定,结果完全不一样(先手吃亏)。引入混合策略:Alice 公布概率分布 $x$($\sum x_i = 1$),Bob 在看到 $x$ 后选最佳 column。
Minimax 定理:Alice 先公布 vs Bob 先公布 — 得到的最优期望相同,这个公共值叫 game value $v^*$。
Solving via LP:因为 Bob 看到 $x$ 后会挑那个让自己 expected payoff 最小的 column,所以 Alice 的"最坏期望"是 所有 column 期望中的最小值。Alice 想最大化这个最小值 — 经典 max-of-mins,引入辅助变量 $v$ 即可线性化。
Alice 的 LP (max-min):
maximize v
subject to ∑_i M_{ij} · x_i ≥ v ∀ j (every Bob column)
∑_i x_i = 1
x_i ≥ 0
关键:约束的方向。Alice 是 max,所以她要保证 无论 Bob 选哪个 column,期望 payoff 都至少是 $v$。
Bob 的 LP (min-max):
minimize u
subject to ∑_j M_{ij} · y_j ≤ u ∀ i (every Alice row)
∑_j y_j = 1
y_j ≥ 0
对偶关系:Alice's LP 和 Bob's LP 互为 dual。强对偶 ⇒ $v = u = v^*$。这就是 Minimax 定理在 CS170 里的"现代"证明。
| R | P | S | |
|---|---|---|---|
| R | 0 | -1 | 2 |
| P | 1 | 0 | -1 |
| S | -2 | 1 | 0 |
(a) Let $x_R, x_P, x_S$ 是 Alice 选 R/P/S 的概率。
max v
s.t. 0·x_R + 1·x_P + (-2)·x_S ≥ v (Bob plays R)
-1·x_R + 0·x_P + 1·x_S ≥ v (Bob plays P)
2·x_R + (-1)·x_P + 0·x_S ≥ v (Bob plays S)
x_R + x_P + x_S = 1, x_i ≥ 0
(b) Let $y_R, y_P, y_S$ 为 Bob 的概率。
min u
s.t. 0·y_R + (-1)·y_P + 2·y_S ≤ u (Alice plays R)
1·y_R + 0·y_P + (-1)·y_S ≤ u (Alice plays P)
-2·y_R + 1·y_P + 0·y_S ≤ u (Alice plays S)
y_R + y_P + y_S = 1, y_j ≥ 0
(c) 矩阵反对称($M^T = -M$)。在反对称游戏中,由对称性 Alice 和 Bob 角色可互换,故 $v^* = -v^*$,即 $v^* = 0$。最优混合策略可解出(不要求计算):$x = y = (1/4, 1/2, 1/4)$ —— 验证一下:对 column R 的 Alice 期望 $= 0\cdot \tfrac14 + 1\cdot \tfrac12 + (-2)\cdot \tfrac14 = 0$. ✓
讲题 takeaway:遇到反对称矩阵直接报 $v^* = 0$,能节省 10 分钟。
问题:每一轮 $t = 1, \dots, T$,$n$ 位"专家"给出预测。你要选一位专家跟随。你不知道谁靠谱。一轮结束后揭晓每位专家的 loss $\ell_i^{(t)} \in [0,1]$。能否保证你的总损失 ≈ 最强单专家?
MWU 算法:
w_i^(1) = 1 for all i
for t = 1..T:
sample i with prob p_i^(t) = w_i^(t) / ∑_j w_j^(t)
observe losses ℓ_i^(t)
w_i^(t+1) = w_i^(t) · (1 - η · ℓ_i^(t))
保证:$\mathbb{E}[\text{total loss}] \le (1+\eta) \min_i L_i^* + \frac{\ln n}{\eta}$。取 $\eta = \sqrt{\ln n / T}$,regret $= O(\sqrt{T \ln n})$。
How to use MWU to solve a zero-sum game:
结论:$(\bar x, \bar y)$ 是 $\epsilon$-近似 minimax 平衡,不解 LP 也能得到 game value。
Step 1 (upper bound $\Phi_{T+1}$): $$\Phi_{t+1} = \sum_i w_i^{(t)}(1 - \eta \ell_i^{(t)}) = \Phi_t - \eta \sum_i w_i^{(t)} \ell_i^{(t)} = \Phi_t(1 - \eta \langle p^{(t)}, \ell^{(t)}\rangle).$$ 连乘得 $\Phi_{T+1} \le n \exp(-\eta L_{\text{alg}})$,其中 $L_{\text{alg}} = \sum_t \langle p^{(t)}, \ell^{(t)}\rangle$ 是算法期望总损失。
Step 2 (lower bound):$\Phi_{T+1} \ge w_{i^*}^{(T+1)} = \prod_t (1 - \eta \ell_{i^*}^{(t)}) \ge \exp(-\eta L_{i^*} - \eta^2 L_{i^*})$,对 $i^* = \arg\min L_i$ 成立(用 $\ln(1-x) \ge -x - x^2$, $x \in [0, 1/2]$)。
Step 3:两式取 log 比较 → $L_{\text{alg}} \le (1+\eta) L_{i^*} + \frac{\ln n}{\eta}$. □
P:多项式时间能 解决 的判定问题。
NP:多项式时间能 验证证书 的判定问题。3-SAT 的 certificate = 满足赋值;TSP-decision 的 certificate = 一条 tour。
NP-hard:所有 NP 问题都能多项式归约到它(一旦解决它,整个 NP 都被解决)。
NP-complete:既在 NP 中,又是 NP-hard。也就是说 NP 中"最难的"那一类。
证明 X 是 NP-complete 的两步:
⚠ 注意归约方向!是 Y → X(用 X 解 Y),不是反过来。说错方向直接 0 分。
设你要证 $Y \le_p X$。构造一个映射 $f$:$Y$-instance $\to$ $X$-instance。
常见错误:只证一个方向("显然另一边也对" — 扣分)。必须明确写出 $\sigma'$ 和 $\sigma$ 的对应关系。
Step 1: Dominating Set ∈ NP. Certificate 是大小 $\le k$ 的点集 $S$。Verifier 遍历每个 $v \in V$ 检查 $v \in S$ 或 $v$ 有邻居在 $S$ 中。$O(|V|+|E|)$ 时间。
Step 2: Vertex Cover $\le_p$ Dominating Set.
归约:给定 VC 实例 $(G, k)$,$G = (V, E)$。构造 DS 实例 $(G', k)$:
显然这是多项式时间。
(⇒) 若 $G$ 有 vertex cover $C$,$|C| \le k$,则 $C$ 也是 $G'$ 的 dominating set: - 每个 $v \in V \setminus C$ 在 $G$ 中有边,那条边的另一端必在 $C$(因为 $C$ 是 cover),所以 $v$ 被 dominate。 - 每个 $u_e$($e = (a,b)$):$a$ 或 $b$ 在 $C$ 中(cover 性质),$u_e$ 与它相邻,被 dominate。 ✓
(⇐) 若 $G'$ 有 dominating set $D$,$|D| \le k$,要在 $G$ 中找到大小 $\le k$ 的 vertex cover。
对每个 $u_e \in D$,把它替换成 $e$ 的任一端点(替换后大小不变或减小)。得到的 $D' \subseteq V$,$|D'| \le k$。Claim: $D'$ 是 $G$ 的 vertex cover。
证:取任意 $e = (a,b) \in E$。$u_e$ 在 $G'$ 中要被 $D$ dominate ⇒ $u_e \in D$ 或 $a \in D$ 或 $b \in D$。前者经过替换后 $a$ 或 $b$ 已经 ∈ $D'$。后两种本来就 ∈ $D'$。故 $e$ 被 $D'$ cover。 ✓
由两方向得 $G$ 有 size-$k$ VC ⇔ $G'$ 有 size-$k$ DS。Q.E.D.
P。这是 Minimum Spanning Tree —— 跑 Kruskal/Prim 得到 MST 权重 $W^*$,比较 $W^* \le W$。$O(E \log V)$。
陷阱:"connected spanning subgraph" 听起来很像 NP 问题,但去掉环可以只让权重变小,故最优解一定是树。这种"伪 NP"问题在期末上常出现。
变种:如果限制 "包含某个特定点集 $S$ 的最小连通子图" → 这就是 Steiner Tree,NP-complete。区别只在多了 "必须包含 $S$" 一句。考试细读题目。
Streaming model:数据流 $a_1, a_2, \dots, a_m$ 一个一个进来,每个 $a_i \in \{1, \dots, n\}$。空间预算 $\ll n, m$(典型是 $O(\log n)$ 或 $O(\sqrt{n})$)。每个元素只能扫一次。
典型查询:
"近似"的两个维度:$(\epsilon, \delta)$ —— 误差不超 $\epsilon$ 的概率至少 $1 - \delta$。空间和时间通常都依赖于 $1/\epsilon$ 和 $\log(1/\delta)$。
| query | space | error type
------------|----------------|-------------------|----------------------
Bloom | ∈ S? | O(n log 1/δ) | false positive only
CMS | freq(x) | O((1/ε) log 1/δ) | overestimate only
Reservoir | rand k | O(k) | exact (sampling)
HLL | |distinct| | O(log log n) | ~2% relative
Misra-Gries | heavy hitters | O(k) | bias ≤ m/k
某 bit 在所有插入后仍为 0 的概率 $\approx e^{-kn/m} = e^{-5/8} \approx 0.535$.
所有 $k=5$ 个 hash 位都为 1 的概率(即 FP)$\approx (1 - 0.535)^5 = (0.465)^5 \approx 0.022$.
FP rate $\approx 2.2\%$。
用 min-hash 抽样:维护当前的 $(x^*, h(x^*))$。流入新元素 $a_i$,计算 $h(a_i)$;若 $h(a_i) < h(x^*)$ 则更新 $x^* \leftarrow a_i$。最后输出 $x^*$。
关键 invariant:$x^*$ 是 distinct 元素中 hash 值最小的那个,与重复次数无关。空间 $O(\log m)$ for ID + hash 值。
Reservoir 不行:reservoir 偏向高频元素,被重复推入的元素被选中概率更高。
固定行 $i$:$C[i][h_i(x)] = f(x) + \sum_{y \ne x: h_i(y) = h_i(x)} f(y)$. 期望溢出 $\mathbb{E}[\text{noise}] \le m/w = \epsilon m/e$.
Markov: $\Pr[\text{noise} > \epsilon m] \le 1/e$. 取 $d = \ln(1/\delta)$ 行各自独立 → $\hat f$ 取 min → 失败概率 $\le (1/e)^d = \delta$. □
标准型: $\max c^T x$ s.t. $Ax \le b$, $x \ge 0$. 多面体上的线性函数极值在顶点取到 → 单纯形法。
常见技巧:
对偶 (mechanical):
Primal: Dual:
max c^T x min b^T y
A x ≤ b A^T y ≥ c
x ≥ 0 y ≥ 0
对偶口诀:每个 primal constraint ↔ 一个 dual 变量;每个 primal 变量 ↔ 一个 dual constraint。
max ∑_e∈δ^+(s) f_e
s.t. f_e ≤ c_e ∀e
∑_{e∈δ^+(v)} f_e = ∑_{e∈δ^-(v)} f_e ∀v ≠ s,t
f_e ≥ 0
对偶:min cut LP。LP duality ⇒ max-flow = min-cut.
(a) 变量 $x_{ij} \in [0,1]$ = 工人 $i$ 做任务 $j$ 的比例。
max ∑_{i,j} x_{ij}
s.t. ∑_j t_{ij} · x_{ij} ≤ 8 ∀i (worker time)
∑_i x_{ij} ≤ 1 ∀j (task once)
x_{ij} ≥ 0
(b) 每个 worker 约束对应 $u_i \ge 0$,每个 task 约束对应 $v_j \ge 0$。
min ∑_i 8u_i + ∑_j v_j
s.t. t_{ij} u_i + v_j ≥ 1 ∀(i,j)
u_i, v_j ≥ 0
(c) $u_i$ = 工人 $i$ 一小时时间的"影子价格";$v_j$ = 任务 $j$ 的"完成价格"。约束 $t_{ij} u_i + v_j \ge 1$ 意思:用 $u_i$ 给工人付时间费 + $v_j$ 给任务付完工费,至少能买下做一单位 $x_{ij}$ 的"产能"。
必须手写。"凡是要查的都写大字"。"不熟的公式才上 cheat sheet,熟的就别浪费版面"。
反推依据。MT1: Q1 fractional knapsack(贪心) · Q2 scheduling · Q3 shortest path · Q4 decimal-to-binary(D&C / FFT 风格)。MT2: Q1 running minimum(单调队列) · Q2 matching subarrays(FFT 卷积) · Q3 arithmetic trees(树形 DP) · Q4 job scheduling(DP / LP 建模)。
Final Q1-3 大概率从同一池子里抽。下面 6 题各覆盖一类。
$n$ 个区间,区间 $i$ 的起止时间 $(s_i, f_i)$。两个区间 compatible iff 不重叠。求最大兼容子集。
算法:按 $f_i$ 升序排,贪心扫描,若与上一选区间不冲突就选。证明用 exchange argument。
容量 $W$、$n$ 种物品(每种无限供应),物品 $i$ 重 $w_i$、价值 $v_i$。最大化装入总价值。
有向带正权图 $G = (V, E)$,源 $s$、汇 $t$,食物点集合 $F \subseteq V$。求 $s \to t$ 且至少经过一个 $f \in F$ 的最短路长度。
给定数组 $A[0..n-1]$(含负数),求 $\max_{i \le j} \sum_{k=i}^{j} A[k]$(含空子数组 $= 0$)。设计 $O(n \log n)$ 分治。
$p(x) = \prod_{i=1}^n (x - r_i)$ 有 $n$ 个不同根。求展开后系数 $a_0, \dots, a_n$,时间 $O(n \log^2 n)$。
给两个长 $n$ 向量 $u, v$。第 $j$ 次 forward shift of $u$ 是把每个元素往后挪 $j$ 步、前 $j$ 位补 0;第 $j$ 次 cyclic shift 是 wrap-around。
Alice (行) 想最大化、Bob (列) 想最小化,payoff 矩阵:
| Alice \ Bob | 1 | 2 |
|---|---|---|
| 1 | 4 | 1 |
| 2 | 2 | 5 |
设 $x_1, x_2$ 为 Alice 的行混合策略概率、$p$ 为她的期望 payoff。
Q1 (True/False)。若某 NP-complete 问题 $P$ 存在 $O(n^k)$ 算法($k$ 固定),是否所有 NP 问题都有 $O(n^k)$ 算法?
Q2. $G$ 是 $k$-colorable 当且仅当顶点能用 $\{1,\dots,k\}$ 染色且相邻不同色。
已知 Hamiltonian Cycle(有向图中是否存在恰好访问每个顶点一次的环)是 NP-complete。证明 Hamiltonian Path(恰好访问每个顶点一次的路径)也是 NP-complete。
给定无限正整数流 $x_1, x_2, \dots$,每来一个数都要做计算,目标是限制总内存。
视频 ID 集合 $[n] = \{1, 2, \dots, n\}$,流只能从左到右读一次。用 $O(\log n)$ bit 内存:
考虑 LP:
$$\max\ 3x_1 + 2x_2 \quad \text{s.t.}\quad x_1 + x_2 \le 4,\ \ x_1 + 3x_2 \le 6,\ \ x_1, x_2 \ge 0.$$有人声称最优值是 12,在 $(x_1, x_2) = (4, 0)$ 处取得。
Kicker(行)想最大化进球概率,goalie(列)想最小化。Payoff 矩阵:
| Dive Left | Stay Center | Dive Right | |
|---|---|---|---|
| Shoot Left | 0.2 | 0.7 | 0.8 |
| Shoot Center | 0.4 | 0.5 | 0.4 |
| Shoot Right | 0.8 | 0.7 | 0.2 |
Zero-sum game,row 是 Maximizer:
| A | B | C | |
|---|---|---|---|
| D | 1 | 2 | -3 |
| E | 3 | 2 | -2 |
| F | -1 | -2 | 2 |
$n$ 个专家每天预测 rain/shine。至少一个 expert 是 perfect(永远对)。每天我们要选一个预测;目标:mistake 数最少。
Vertex Cover:无向图 $G=(V,E)$,找最小 $C_V \subseteq V$ 使每条边至少有一端在 $C_V$ 中。Set Cover:universe $U$ + 集合族 $\mathcal{S} = \{S_1, \dots, S_m\}$,找最小 $\mathcal{C}_S \subseteq \mathcal{S}$ 并集 $= U$。
Exact 4-SAT:每个 clause 恰好 4 个不同 literals。
给定字符串 $L$(歌词)和 query $Q$,判断 $Q$ 是否为 $L$ 的连续子串。所有字符 ASCII 码 $\in [0, 127]$。Brute force $O(|L| |Q|)$。
数据流 $a_1, \dots, a_N$($N$ 未知,$N \ge 4$),单遍读,不能存数组。计算
$$\max_{1 \le i < j < k < l \le N} (a_i - 2a_j + 3a_k - 4a_l).$$限制 $O(\log S)$ bit 内存($S$ 是结果绝对值上界)。给出确定性流式算法(变量 / 更新 / 正确性 / 内存)。
剩 $T$ 小时复习 $k$ 个 topic。$m$ 种活动,活动 $j$ 上 1 小时给 topic $i$ 提供 $a_{ij}$ 单位准备。$x_j \ge 0$ 表示在 $j$ 上花的小时数。希望最大化最弱的 topic 准备:
$$\max_{x \ge 0,\ \sum x_j = T}\ \min_{i \in [k]} \sum_{j=1}^m a_{ij} x_j.$$$\ell \times w$ 网格纸,部分格子被狗咬出洞($A[i,j] = 1$)。每次只能横切或竖切一张纸一刀。求把所有"被咬"格子和"干净"格子彻底分开的最少切数。设计 $O(\ell^3 w^3)$ DP。
Dominating set $S \subseteq V$:每个 $v \notin S$ 至少有一个邻居 $\in S$。问:是否存在 dominating set $|S| \le k$?证明 NP-complete($G$ 连通)。
3D Matching:professor $\times$ student $\times$ room 的允许 triple 集合,找一组 triple 使每个 P/S/R 恰好用一次。
表大小 $m = 11$,$h(x) = x \bmod 11$,linear probing $h_t(x) = (h(x) + t) \bmod 11$。当前表:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 12 | 23 | 15 | 5 | 18 | 29 | 21 |
流 $z_1, \dots, z_m \in [m]$,假设某值 $y$ 出现 $> m/2$ 次(严格多数)。设计确定性算法用 $\mathrm{poly}(\log m)$ 空间输出 $y$。若不存在多数则可输出任意。
把 Midterm 2 KEY 完整翻一遍,特别看 Q1-Q3:
本题不展开答案——直接打开 PDF 自检。如果某题写不出来,拉到该 topic 的 cheat sheet 加一行模板。
如果时间真的紧:丢掉 hw14 Q2 和 dis16 Q13(最长最难、但都不是最高频考点),优先保 Round 2 全部 + Round 3 的 3/5/6/7。