CS170 · 作业 14

CS 170 2023 年秋季作业 14(选做)

UC Berkeley CS 170 2023 年秋季选做作业 14,共 7 题:学习组登记、优于大多数的 TSP 巡回随机采样算法、第二小的全局最小割(基于 Karger 收缩算法)、√n 染色(3-可染色图的多项式时间算法)、两两独立哈希族的判定、基于 Distinct Elements 的重复投票比例估计,以及基于 Reservoir Sampling 与 Hoeffding 界的近似中位数流算法。

知识焦点

先建立概念地图

  • TSP
  • 随机采样
  • 最小割
  • Karger 收缩算法
  • 图染色
  • 两两独立哈希
  • 流算法
  • Distinct Elements

建议顺序

题面 → 提示 → 答案

先完整作答,再按需展开提示;最后才展开官方参考解答并逐步核对证明与计算。

本地来源

可离线完成

题面与解答均由本地一手资料整理:hw14.pdf、hw14-sol.pdf

本地一手资料完整提取 · 作业

完整题目、提示与答案

本节按本地一手资料完整整理,共 15 道大题。本地官方解答已收录 14/15 道并默认折叠;其余题目会明确标注无本地官方解答。

使用说明

  • 所有题面均已本土化,并补足网页离线作答所需的数值、代码、表格与约束。
  • 题目与答案分层展示,展开答案前可先查看提示。
  • 本地来源:hw14.pdf、hw14-sol.pdf
1学习组题目 · 提示 · 答案
官方题面翻译可离线作答无本地官方解答

完整题面

列出你的学习组成员的姓名与 SID(学号)。如果你没有合作者,必须明确写出 "none"。

查看解题提示

自检:确认每位组员的姓名与 SID 拼写正确;若独自完成请填写 "none"。

答案状态

本地资料未提供这道题的官方解答;页面只保留题面与非答案式提示。

题面来源:hw14.pdf · 1 · confidence: high

2优于大多数的 TSP 巡回题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

一个 TSP(旅行商问题)实例由 \(n\) 个城市以及每对城市之间的距离 \(d[\cdot,\cdot]\) 组成。距离不一定满足三角不等式。一条 TSP 巡回(tour)是一条访问每个城市恰好一次并返回起点的路径。

在任意含 \(n\) 个城市的实例中,共有 \((n-1)!\) 条可能的 TSP 巡回。在这 \((n-1)!\) 条巡回中找到总长度最小的一条是 NP-Hard 的。对于不满足三角不等式的距离,该问题同样不存在近似算法。

现在我们从另一个角度来近似 TSP。若一条 TSP 巡回的代价小于 99% 的 \((n-1)!\) 条可能巡回的代价,则称该巡回为优于大多数的(Better-Than-Most)。给定常数 \(\delta \in (0,1)\),描述一个算法,使其以概率 \(1-\delta\) 输出一条优于大多数的巡回。你的算法在 \(n\) 与 \(1/\delta\) 上应当是多项式时间的。

请按三部分(算法描述、正确性证明、时间复杂度分析)作答。

查看解题提示

给定两条巡回,比较它们的代价仅需线性时间。

考虑独立地均匀随机采样 \(t\) 条巡回并返回代价最小者:先求单条随机巡回优于大多数的概率,再用补事件计算 \(t\) 条中至少有一条达标的概率,并据此确定所需的 \(t\)。

展开官方参考解答

算法描述: 均匀随机地采样 \(t\) 条 TSP 巡回,用线性扫描找出其中代价最低的一条并返回。下面的正确性证明将确定所需的 \(t = \Theta(\log(1/\delta))\)。

正确性证明: 该算法返回一条优于大多数的巡回,当且仅当所采样的 \(t\) 条巡回中至少有一条是优于大多数的。单条随机巡回是优于大多数的概率为 \(0.01\)。设 \(B_1,\ldots,B_t\) 为对应事件,其中 \(B_i\) 表示第 \(i\) 条采样的巡回是优于大多数的。那么

\[ P(\text{至少一条优于大多数}) = P(B_1 \cup \cdots \cup B_t) = 1 - P(B_1 \cap \cdots \cap B_t) = 1 - (0.99)^t \ge 1 - \delta. \]

由 \(1-0.99^t \ge 1-\delta\) 得 \(\delta \ge 0.99^t\),即 \(t \log(1/0.99) \ge \log(1/\delta)\),因此 \(t = \Theta(\log(1/\delta))\)。

时间复杂度分析: 有两种分析方式: 1. 若假设在任意范围内采样一个随机整数耗时常数时间,则可在 \(O(n)\) 时间内采样一条随机巡回。比较两条巡回耗时 \(O(n)\),共进行 \(t=O(\log(1/\delta))\) 次,总时间为 \(O(n\log(1/\delta))\)。(若忽略采样巡回所需时间,同样得到此结果。) 2. 若假设采样一个随机比特耗时常数时间(即整数仅在 \(\{0,1\}\) 中选取),则采样一条随机巡回需要 \(\log (n-1)! = O(n\log n)\) 时间。如此进行 \(O(\log(1/\delta))\) 次,总时间为 \(O(n\log n\log(1/\delta))\)。

解答来源:hw14-sol.pdf · 1 · confidence: high

题面来源:hw14.pdf · 1 · confidence: high

3a第二小的全局最小割 (a)题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

回顾:在无向、无权图 \((V,E)\) 中,一个割(cut)是将顶点集划分为两个非空子集 \(S\) 与 \(V\setminus S\) 的分割。该割的权重(weight)是横跨该割的边的数量,记作 \(|E(S, V\setminus S)|\)。课上讲授的 Karger 收缩算法(Karger's contraction algorithm)能够以 \(1-p\) 的概率找到一个权重最小的割,其运行时间为 \(O(\mathrm{poly}(n)\cdot\log(1/p))\),其中 \(n := |V|\),\(m := |E|\)。

在本题中,我们关注的不是最小的割,而是第二小的最小割(second smallest minimum cut)。平局按任意方式打破。例如,参见原书附图(5 个顶点 1–5 的示意图,用于说明第二小最小割及平局打破方式)。该图有两个权重为 1 的割,即 \(S=\{1\}\) 与 \(S=\{4\}\)。其余所有割的权重至少为 2。由于平局被任意打破,在本例中我们称最小割与第二小的割的权重均为 1。

(a) 给出在具有 \(n\) 个顶点和 \(m\) 条边的图中,割(不一定是最小割)的数量的一般公式。

图表条件 · 第二小最小割的示例图:5 个顶点 1–5,顶点 1–2–3–4 横向排列,顶点 5 位于下方;割 {1} 与 {4} 的权重为 1,其余割权重至少为 2。

顶点:1, 2, 3, 4, 5。 边:(1,2), (2,3), (3,4), (2,5), (3,5)。 最小割与第二小最小割的权重均为 1(分别为 S={1} 与 S={4});其余割权重 ≥ 2。

来源:hw14.pdf · 2

查看解题提示

对每个顶点,考虑它是否与顶点 1 在同一侧。注意排除其中一侧为空的情况。

展开官方参考解答

对每个顶点,我们可以选择将它放在与顶点 1 相同的一侧,或相反的一侧。这给出 \(2^{n-1}\) 种将顶点划分为两个集合的方式。随后应排除所有顶点都选择与 1 同侧的那一种划分,因为此时另一侧为空。因此答案为 \(2^{n-1} - 1\)。

解答来源:hw14-sol.pdf · 2 · confidence: high

题面来源:hw14.pdf · 2 · confidence: medium

3b第二小的全局最小割 (b)题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

(b) 关注图 \(G\) 的一个特定的第二小最小割 \(S^*\)。考虑只运行 Karger 收缩算法的第一步,即均匀随机地收缩一条边。计算被收缩的边横跨割 \((S^*, V\setminus S^*)\) 的概率的一个紧上界 \(\alpha\)。你的答案可以依赖于 \(k := |S^*|\) 或 \(n\),但不能依赖于 \(m\)。

查看解题提示

横跨该割的边数为 \(k\) 乘以对侧相关的量;收缩某条边的概率与 \(m\) 有关,但你需要消去 \(m\)。考虑图中各顶点的度,利用第二小最小割的大小对各顶点度的约束来给出 \(m\) 的下界。

展开官方参考解答

设第二小最小割一侧的顶点数为 \(k\)。收缩一条横跨该割的边的概率为 \(k/m\),但我们需要一个不依赖于 \(m\) 的答案。尽管最小度可以任意小,但其余所有顶点的度必须至少为 \(k\)(否则第二小最小割的大小将小于 \(k\))。设 \(d_v\) 为顶点 \(v\) 的度,则

\[ m = \frac12\sum_v d_v \ge \frac{(n-1)k}{2}. \]

因此 \(k/m \le 2/(n-1)\),取 \(\alpha = 2/(n-1)\)。

解答来源:hw14-sol.pdf · 2 · confidence: high

题面来源:hw14.pdf · 2 · confidence: medium

3c第二小的全局最小割 (c)题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

(c) 从 \(n\) 个顶点出发,依次执行 \(n-3\) 步随机收缩。还剩下多少个"超顶点"(supervertex)?

查看解题提示

每执行一次收缩,超顶点的数量减少多少?

展开官方参考解答

每次收缩使超顶点数量减少 1,因此 \(n\) 个顶点经过 \(n-3\) 次收缩后剩下 \(n-(n-3)=3\) 个超顶点。答案为 3。

解答来源:hw14-sol.pdf · 2 · confidence: high

题面来源:hw14.pdf · 2 · confidence: medium

3d第二小的全局最小割 (d)题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

(d) 设你在 (c) 中的答案为 \(c\)。接着在这个由 \(c\) 个超顶点构成的图上均匀随机地选取一个割(不一定是最小割),从而得到原图的一个割。证明:所得的割恰好是 \(S^*\) 的概率为 \(\Omega(1/n^2)\)。

查看解题提示

回顾 Karger 收缩算法的证明:为了能在超顶点图中选出 \(S^*\),在收缩过程中不能有任何一条横跨 \(S^*\) 的边被收缩。利用 (b) 中的上界,对 \(n-3\) 步均不收缩 \(S^*\) 中边的概率进行下界估计;再乘以在 \(c\) 个超顶点上恰好选中 \(S^*\) 的概率。

展开官方参考解答

由 (c) 知 \(c=3\)。回顾课上 Karger 收缩算法的证明:为了能在超顶点图中选出 \(S^*\),在收缩过程中不能有任何横跨 \(S^*\) 的边被收缩——否则我们将永远缺失 \(S^*\) 中的若干条边。没有任何横跨 \(S^*\) 的边被收缩的概率的下界为

\[ \prod_{i=0}^{n-4}\left(1-\frac{2}{n-1-i}\right) = \prod_{i=0}^{n-3}\frac{n-3-i}{n-1-i} = \frac{n-3}{n-1}\cdot\frac{n-4}{n-2}\cdots\frac{1}{3} = \frac{1\cdot 2}{(n-1)(n-2)} \in \Theta\left(\frac{1}{n^2}\right). \]

在得到的 3 个超顶点的图上,由 (a) 可知共有 3 个可能的割。因此输出的割恰好是 \(S^*\) 的概率为上述概率的 \(1/3\),即 \(\Omega(1/n^2)\)。

解答来源:hw14-sol.pdf · 2 · confidence: high

题面来源:hw14.pdf · 2 · confidence: medium

3e第二小的全局最小割 (e)题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

(e) 给出一个运行时间为 \(O(\mathrm{poly}(n)\cdot\log(1/p))\) 的算法,用于以至少 \(1-p\) 的成功概率找出图中的第二小最小割。你不需要计算 \(\mathrm{poly}(n)\) 中 \(n\) 的精确指数;任何多项式依赖均可。

提示:对所有 \(x\in\mathbb{R}\) 与 \(T\ge 0\),有 \((1+x)^T \le e^{xT}\)。

查看解题提示

将 Karger 算法与重复收缩结合:先用 Karger 算法找到最小割,再重复"收缩到 3 个超顶点后随机选一个割"的过程多次;利用 (d) 中单次成功概率为 \(\Omega(1/n^2)\) 及该不等式,计算需要重复多少次才能以至少 \(1-p\) 的概率命中第二小最小割。

展开官方参考解答

首先运行 Karger 算法,以 \(1-p/2\) 的概率找到一个最小割 \((S, V\setminus S)\)。然后运行收缩算法 \(T\) 次,每次收缩到 3 个超顶点后均匀随机返回三个割之一。未能找到某个特定的第二小最小割的概率至多为

\[ \left(1-\frac{1}{3}\cdot\frac{2}{(n-1)(n-2)}\right)^T \le e^{-\frac{2T}{3(n-1)(n-2)}} \le \frac{p}{2}, \]

取 \(T = \lceil (3/2)(n-1)(n-2)\rceil = \Theta(n^2\log(1/p))\) 即可满足。因此总成功概率为

\[ P[\text{找到第二小最小割}] = P[\text{找到第二小最小割}\mid\text{找到最小割}]\cdot P[\text{找到最小割}] \ge (1-p/2)(1-p/2) \ge 1-p, \]

符合要求。总运行时间为 \(\Theta(n^2\log(1/p)) = \Theta(\mathrm{poly}(n)\cdot\log(1/p))\),同样符合要求。

解答来源:hw14-sol.pdf · 2 · confidence: high

题面来源:hw14.pdf · 2 · confidence: medium

4a√n 染色 (a)题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

在本题中,我们为 3-可染色的图构造 \(O(\sqrt n)\) 染色算法。

(a) 设 \(G\) 是最大度为 \(\Delta\) 的图。证明 \(G\) 是 \((\Delta+1)\)-可染色的。

查看解题提示

贪心策略:逐顶点遍历,为每个顶点分配一个与其已染色邻居不同的颜色。为什么颜色总是够用?

展开官方参考解答

设调色板为 \([\Delta+1]\)。当仍存在未分配颜色的顶点时,为其分配一个不同于其任意已染色邻居的颜色(由于调色板大小为 \(\Delta+1\) 而至多只有 \(\Delta\) 个邻居,这样的颜色必然存在)。

解答来源:hw14-sol.pdf · 3 · confidence: high

题面来源:hw14.pdf · 3 · confidence: medium

4b√n 染色 (b)题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

(b) 设 \(G\) 是 3-可染色图。令 \(v\) 为 \(G\) 中任意一个顶点。证明:在 \(v\) 的邻域上诱导出的图是 2-可染色的。澄清:在 \(v\) 的邻域上诱导出的图是指,顶点集 \(V'\) 由所有与 \(v\) 相邻的顶点组成(但不包含 \(v\) 本身),边集由 \(G\) 中两个端点都在 \(V'\) 中的边组成。

查看解题提示

在任意一个 3-染色方案中,顶点 \(v\) 的颜色与其所有邻居的颜色有什么关系?

展开官方参考解答

在 \(V'\) 上诱导出的图中,我们只关心 \(v\) 的邻居与 \(v\) 的关系。在 \(G\) 的任意一个 3-染色中,\(v\) 必须与其邻域上的颜色不同,因此该邻域上至多使用 2 种颜色,即该诱导图是 2-可染色的。

解答来源:hw14-sol.pdf · 3 · confidence: high

题面来源:hw14.pdf · 3 · confidence: medium

4c√n 染色 (c)题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

(c) 给出一个多项式时间算法,输入一个含 \(n\) 个顶点的 3-可染色图 \(G\),输出其顶点的一个合法染色,仅使用 \(O(\sqrt n)\) 种颜色。证明你的算法是正确的。

提示:考虑这样一种算法:先染色"高度数"顶点及其邻域,再染色图中剩余部分。前面两问可能有用。

查看解题提示

将顶点分为两类:度数至少为 \(\sqrt n\) 与度数小于 \(\sqrt n\)。对每个高度数顶点,用 3 种新颜色(1 种给它,2 种给其邻域)进行染色并删除;剩余子图的最大度不超过 \(\sqrt n\),再用 (a) 的方法处理。统计算法共用了多少种颜色。

展开官方参考解答

当仍存在度数 \(\ge \sqrt n\) 的顶点时:任取一个这样的顶点 \(v\),选出 3 种从未使用过的新颜色,用其中 1 种染 \(v\),用剩余 2 种对 \(v\) 的邻域进行 2-染色(2-染色是容易的问题)。这 3 种颜色今后不再使用,并将 \(v\) 及其邻域从图中删除。由于每次循环至少删除 \(\sqrt n\) 个顶点,因此至多执行 \(\sqrt n\) 轮,共使用 \(3(\sqrt n+1)\) 种颜色。

循环结束后,剩余子图的最大度至多为 \(\sqrt n\),用 (a) 中的贪心策略配合 \(\sqrt n+1\) 种全新颜色进行染色。使用的颜色总数为 \(O(\sqrt n)\)。

正确性:每次对 \(v\) 及其邻域的染色在子图内合法(\(v\) 与其邻域颜色不同,邻域内部 2-染色合法);剩余子图的贪心染色同样合法。所有颜色互不相同(高度数阶段的颜色永不重复使用,低度数阶段使用全新颜色),因此整体是 \(G\) 的一个合法 \(O(\sqrt n)\)-染色。

解答来源:hw14-sol.pdf · 3 · confidence: high

题面来源:hw14.pdf · 3 · confidence: medium

5a两两独立哈希 (a)题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

设 \([m]\) 表示集合 \(\{0,1,\ldots,m-1\}\)。回顾:函数族 \(\mathcal{H}=\{h:U\to[m]\}\) 称为两两独立(pairwise independent)的,如果对任意不同的 \(x,y\in U\) 以及任意 \(i,j\in[m]\),

\[ \Pr_{h\sim\mathcal{H}}[h(x)=i \text{ 且 } h(y)=j] = \frac{1}{m^2}. \]

由此可推得,若从 \(\mathcal{H}\) 中均匀随机选取 \(h\),则 \(\Pr[h(x)=h(y)] = 1/m\)。

对下列每个哈希函数族,判断它是否两两独立。若是,确定从该族中采样一个函数需要多少随机比特。

(a) 设 \(U=\{0,1\}^k\)(即输入为 \(k\) 位二进制串),且

\[ \mathcal{H} = \{h_{a,b}:U\to\{0,1\}\}_{a\in\{0,1\}^k,\,b\in\{0,1\}}, \]

每个 \(h_{a,b}\) 将二进制串映射为单个比特:

\[ h_{a,b}(x) = \sum_{i=1}^k a_i x_i + b \pmod 2. \]

查看解题提示

对 \(x\neq 0\),将 \(h_{a,b}(x)\) 按 \(a_1\) 拆分,利用 \(a\) 的各比特独立且均匀这一事实,证明 \(a\cdot x\) 在 \(\{0,1\}\) 上均匀分布。再结合 \(b\) 的独立性,计算 \(\Pr[h_{a,b}(x)=c_x, h_{a,b}(y)=c_y]\)。

展开官方参考解答

\(\mathcal{H}\) 是两两独立的。记 \(a\cdot x = \sum_{i=1}^k a_i x_i \bmod 2\)。按照提示,对任意 \(x\neq 0\),不妨设 \(x_1=1\),则

\[ \Pr_{a\in\{0,1\}^k}[a\cdot x = 0] = \Pr_{a}\left[\sum_{i=2}^k a_i x_i \equiv a_1 \pmod 2\right] = \frac12, \]

因为 \(a\) 的各比特独立,固定除 \(a_1\) 外的所有比特后,\(a_1=0\) 与 \(a_1=1\) 等概率出现,且给出 \(a\cdot x\) 的两个不同取值。

对两个不同的串 \(x\neq y\) 以及任意 \(c_x,c_y\in\{0,1\}\),我们希望 \(a,b\) 满足

\[ a\cdot x \oplus b = c_x, \quad a\cdot y \oplus b = c_y. \]

令 \(z\in\{0,1\}^k\) 满足 \(z_i = x_i\oplus y_i\),则可将第二个条件替换为 \(a\cdot z = c_x\oplus c_y\)。由 \(x\neq y\) 知 \(z\neq 0\),故 \(\Pr[a\cdot z = c_x\oplus c_y] = 1/2\)。又对任意 \(a\),\(\Pr[b = a\cdot x\oplus c_x] = 1/2\)。因此

\[ \Pr_{a,b}[h_{a,b}(x)=c_x \text{ 且 } h_{a,b}(y)=c_y] = \frac12\cdot\frac12 = \frac14, \]

满足两两独立的条件。从 \(\mathcal{H}\) 中随机选取一个哈希函数需随机选取 \(a\) 与 \(b\),共 \(k+1\) 个比特。

解答来源:hw14-sol.pdf · 4 · confidence: high

题面来源:hw14.pdf · 3 · confidence: medium

5b两两独立哈希 (b)题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

(b) \(\mathcal{H} = \{h_{a_1,a_2}:[m]^2\to[m]\}_{a_1,a_2\in[m]}\),其中 \(m\) 为固定的素数,每个函数将 \([m]\) 中的一对整数映射为 \([m]\) 中的一个整数:

\[ h_{a_1,a_2}(x_1,x_2) = a_1 x_1 + a_2 x_2 \pmod m. \]

查看解题提示

找一个使得输出被完全确定的输入,例如 \((0,0)\)。

展开官方参考解答

\(\mathcal{H}\) 不是两两独立的。考虑输入 \((x_1,x_2)=(0,0)\) 以及任意 \((y_1,y_2)\neq(x_1,x_2)\)。则 \(h(0,0)=0\) 恒成立。因此对任意满足 \(i\neq 0\) 的 \(i,j\in[m]\),都有 \(\Pr[h(x)=i \text{ 且 } h(y)=j]=0\),违反了两两独立。

另解:也可取任意线性相关的 \((x_1,x_2)\) 与 \((y_1,y_2)\)(即 \(x_1y_2-x_2y_1=0\))作为反例,因为哈希函数是线性的,\((x_1,x_2)\) 的输出决定了 \((y_1,y_2)\) 的输出。

解答来源:hw14-sol.pdf · 6 · confidence: high

题面来源:hw14.pdf · 3 · confidence: medium

5c两两独立哈希 (c)题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

(c) \(\mathcal{H}\) 是所有函数 \(f:[m]\to[m-1]\) 构成的集合。

查看解题提示

对固定的不同 \(x,y\) 以及 \(i,j\in[m-1]\),统计满足 \(f(x)=i, f(y)=j\) 的函数数量,再除以 \(|\mathcal{H}|\)。

展开官方参考解答

固定 \(x,y\in\{0,1,\ldots,m-1\}\) 且 \(x\neq y\)。对任意 \(i,j\in[m-1]\),需统计在全部 \((m-1)^m\) 个函数 \(f:[m]\to[m-1]\) 中,有多少个满足 \(f(x)=i, f(y)=j\)。

满足 \(f(x)=i, f(y)=j\) 的函数 \(f:[m]\to[m-1]\) 共有 \((m-1)^{m-2}\) 个,因为此时两个输入的输出已被固定,其余每个输入的输出可在 \(m-1\) 个值中任意选取。\(\mathcal{H}\) 中函数总数为 \((m-1)^m\),因此随机选取这样一个函数的概率为

\[ \frac{(m-1)^{m-2}}{(m-1)^m} = \frac{1}{(m-1)^2}, \]

满足两两独立的条件。\(\mathcal{H}\) 中有 \((m-1)^m\) 个函数,区分它们需要 \(\log (m-1)^m = m\log(m-1)\) 个比特。

解答来源:hw14-sol.pdf · 6 · confidence: high

题面来源:hw14.pdf · 3 · confidence: medium

6投票比例估计题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

假设有一个投票流,每个元素形如 \((\text{Id}, \text{Yes})\) 或 \((\text{Id}, \text{No})\),包含投票者独有的 Id 及其投票 Yes/No。我们希望估计 Yes 票所占的比例。遗憾的是,许多人投了多次票;投多次票的人每次投的都是同一个选项。

Distinct Elements 算法以一个流为输入,使用少量内存,以 \(1-\delta\) 的概率输出 \(\tilde{n}\in[(1-\epsilon)n,(1+\epsilon)n]\),其中 \(n\) 是流中不同元素的个数。注意 \(\epsilon,\delta\) 为常数。设 \(S(n,\epsilon,\delta)\) 为 Distinct Elements 算法在 \(n,\epsilon,\delta\) 下的空间复杂度。

请以 Distinct Elements 算法为黑盒,给出一个算法,以至少 \(1-2\delta\) 的概率将"Yes"票所占的比例估计到因子 \((1+3\epsilon)\) 倍以内。证明算法的正确性,并用 \(S\) 表示其空间复杂度。

查看解题提示

假设 \(\epsilon \le 1/3\),则 \(\frac{1+\epsilon}{1-\epsilon} \le 1+3\epsilon\)。

分别维护两个 Distinct Elements 数据结构:一个只接收 Yes 票的 Id,另一个接收所有票的 Id。当查询比例时,返回两个估计值的比值。利用联合界(union bound)分析总体失败概率。

展开官方参考解答

算法很简单:运行两个 Distinct Elements 副本。将"Yes"票的 Id 送入第一个,将所有票的 Id 送入第二个。查询比例时,返回两个数据结构的输出之比。

空间复杂度至多为 \(2\cdot S(n,\epsilon,\delta)\),其中 \(n\) 为不同投票者的人数。

由联合界,若 Yes 票数为 \(m\),则第一个 Distinct Elements 数据结构以 \(1-\delta\) 的概率返回 \([(1-\epsilon)m,(1+\epsilon)m]\) 内的值,第二个以 \(1-\delta\) 的概率返回 \([(1-\epsilon)n,(1+\epsilon)n]\) 内的值。因此我们的算法以 \((1-\delta)^2\ge 1-2\delta\) 的概率返回

\[ \left[\frac{1-\epsilon}{1+\epsilon}\cdot\frac{m}{n},\ \frac{1+\epsilon}{1-\epsilon}\cdot\frac{m}{n}\right] \]

内的值。当 \(\epsilon\le 1/3\) 时,\(\frac{1+\epsilon}{1-\epsilon}\le 1+3\epsilon\) 且 \(\frac{1-\epsilon}{1+\epsilon}\ge 1-3\epsilon\),故算法的输出以至少 \(1-2\delta\) 的概率落在 \([(1-3\epsilon)m/n,(1+3\epsilon)m/n]\) 内。换言之,使用 \(O(1)\) 个该数据结构的副本仅使其总体误差保证恶化 \(O(1)\) 倍。

解答来源:hw14-sol.pdf · 6 · confidence: high

题面来源:hw14.pdf · 4 · confidence: medium

7近似中位数题目 · 提示 · 答案
官方题面翻译可离线作答官方解答已收录

完整题面

设 \(S=(x_1,x_2,\ldots,x_m)\) 为包含 \(m\) 个元素的流。为简化,假设流中元素互异。定义元素 \(x\) 的位置(position)为 \(\mathrm{pos}(x)=|\{y\in S : y\le x\}|\)。\(\epsilon\)-近似中位数(\(\epsilon\)-approximate median)是满足下式的元素 \(x\):

\[ \frac{m}{2}-\epsilon m \le \mathrm{pos}(x) \le \frac{m}{2}+\epsilon m. \]

给出一个算法,以高概率返回一个 \(\epsilon\)-近似中位数。请按三部分(算法、正确性证明、空间复杂度)作答。注意,最优算法可以在与流大小无关的空间内解决此问题。

说明:你的算法应以 \(\epsilon\) 与失败概率 \(\delta\) 为参数,以至少 \(1-\delta\) 的概率返回一个 \(\epsilon\)-近似的结果。正确性证明需证明你的结果以该概率是 \(\epsilon\)-近似的。

提示:尝试给出一个基于采样的算法,并利用 Hoeffding 界论证:来自 \((0,1/2-\epsilon)\) 百分位的样本少于 \(1/2\);同样,来自 \((1/2+\epsilon,1)\) 百分位的样本也少于 \(1/2\)。

提示:如下单侧 Hoeffding 界可能有用:若 \(X_1,\ldots,X_t\) 为独立同分布的 Bernoulli 随机变量且 \(\mathbb{E}[X_i]=p\),则

\[ \Pr\left[\frac{1}{t}\sum_{i=1}^t X_i - p \ge \epsilon\right] \le \exp(-2\epsilon^2 t). \]

查看解题提示

使用 Reservoir Sampling 从流中均匀随机抽取 \(t\) 个样本,返回样本的中位数。

将 \(S\) 划分为左侧(位置过小)、中间、右侧(位置过大)三部分。对左右两部分分别定义 Bernoulli 指示变量,利用 Hoeffding 界证明:当 \(t\) 足够大时,左右两部分的样本数均少于 \(t/2\),从而样本中位数落在中间区域。

展开官方参考解答

算法如下:使用课上讲的 Reservoir Sampling 算法从流中均匀随机采样 \(t\) 个点,返回所采样 \(t\) 个点的中位数。设置 \(t = \frac{2}{\epsilon^2}\log\frac{2}{\delta}\) 可保证以至少 \(1-\delta\) 的概率使样本中位数为 \(\epsilon\)-近似。因此算法的空间复杂度为 \(t\cdot\log(|\Sigma|)\),其中 \(|\Sigma|\) 为样本空间的大小。

为论证正确性,将集合 \(S\) 划分为三部分:

\[ S_L := \{x \mid \mathrm{pos}(x) \le m/2-\epsilon m\}, \] \[ S_M := \{x \mid m/2-\epsilon m \le \mathrm{pos}(x) \le m/2+\epsilon m\}, \] \[ S_R := \{x \mid \mathrm{pos}(x) \ge m/2+\epsilon m\}, \]

其中 \(S_L\) 为近似中位数左侧的点集,\(S_R\) 为右侧的点集。注意,若 \(t\) 个样本中来自 \(S_R\) 与 \(S_L\) 的点数均少于 \(t/2\),则算法返回正确结果。下面说明这些事件均为低概率事件。先考虑 \(S_L\),\(S_R\) 的证明类似。

令 \(Z_i\) 表示如下随机变量:若第 \(i\) 个样本来自 \(S_L\) 则 \(Z_i=1\),否则 \(Z_i=0\)。我们关心 \(\Pr(\sum_{i=1}^t Z_i > t/2)\) 有多小。注意 \(\mathbb{E}[Z_i]=1/2-\epsilon\),因为均匀随机采样一个元素落在 \(S_L\) 中的概率为 \(1/2-\epsilon\)。利用课上的 Hoeffding 界:

\[ \Pr\left[\sum_{i=1}^t Z_i > \frac{t}{2}\right] = \Pr\left[\frac{1}{t}\sum_{i=1}^t Z_i - \left(\frac12-\epsilon\right) > \epsilon\right] \le \exp(-2\epsilon^2 t). \]

因此设置 \(t = \frac{1}{2\epsilon^2}\log\frac{2}{\delta}\) 可使以至少 \(1-\delta/2\) 的概率,来自 \(S_L\) 的元素个数少于 \(t/2\)。对 \(S_R\) 同理可证,合并两者即完成证明。

解答来源:hw14-sol.pdf · 6 · confidence: medium

题面来源:hw14.pdf · 4 · confidence: medium


一手资料