CS170 · 作业 13

UC Berkeley CS 170 Fall 2023 作业 13

CS 170 Fall 2023 作业 13,截止时间为 12 月 1 日周五晚 10:00(宽限至晚 11:59)。本次作业聚焦近似算法与流算法:局部搜索求解 Max-Cut 的迭代上界与 1/2 近似保证;随机化算法与去随机化求解 Max 3-SAT 的 7/8 近似比及 OPT 下界;蓄水池抽样(Reservoir Sampling)变体在单遍流中输出均匀随机元素与以高概率检测重复元素;整数流中利用有限内存判断和的奇偶性、整除性以及乘积的整除性。

知识焦点

先建立概念地图

  • local search
  • Max-Cut
  • approximation algorithm
  • randomized algorithm
  • Max 3-SAT
  • derandomization
  • reservoir sampling
  • streaming algorithm

建议顺序

题面 → 提示 → 答案

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

本地来源

可离线完成

题面与解答均由本地一手资料整理:hw13.pdf

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

完整题目、提示与答案

本节按本地一手资料完整整理,共 5 道大题。本地资料未包含官方解答;提示只用于指出切入点。

使用说明

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

完整题面

列出你的学习小组中所有成员的姓名和 SID。如果你没有合作者,必须明确写出 "none"。

查看解题提示

请如实填写你的学习小组成员的姓名和 SID;若没有合作者,请填写 "none"。

答案状态

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

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

2最大割问题的局部搜索(Local Search for Max Cut)题目 · 提示 · 答案
官方题面翻译可离线作答无本地官方解答

完整题面

有时,局部搜索(local search)算法可以为 NP 困难问题给出不错的近似解。

回顾 Max-Cut(最大割)问题:给定一个无权重图 \(G = (V, E)\),我们要找到一个割 \((S, T)\),使得「跨越」割的边数(即一个端点在 \(S\) 中、另一个端点在 \(T\) 中的边)最大化。考虑以下局部搜索算法:

  1. 从任意一个割开始(例如 \((S, T) = (V, \emptyset)\))。
  2. 当存在某个顶点 \(v \in S\),使得将 \(v\) 移到另一边后跨越的边数多于当前割 \((S, T)\)(即 \((S \setminus \{v\}, T \cup \{v\})\) 跨越的边更多),或存在某个 \(v \in T\) 使得 \((S \cup \{v\}, T \setminus \{v\})\) 跨越的边更多时,将 \(v\) 移动到割的另一侧。

现在我们来证明该算法具有的几个保证。

(a)给出该算法迭代次数的上界(即移动顶点的总次数)。

(b)证明当该算法终止时,所得到的割中至少有一半的边跨越该割。

查看解题提示

提示:当我们把 \(v\) 从 \(S\) 移动到 \(T\) 时,\(v\) 在 \(S\) 中的邻居必须多于在 \(T\) 中的邻居。这一观察对算法终止后每个顶点的邻居分布意味着什么?接下来,关于跨越割的边数与每一侧内部的边数,我们能得出什么结论?

答案状态

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

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

3随机化近似算法(Randomization for Approximation)题目 · 提示 · 答案
官方题面翻译可离线作答无本地官方解答

完整题面

有时,极其简单的随机化算法也可以达到相当不错的近似比。

(a)考虑 Max 3-SAT 问题:给定一个实例,包含 \(m\) 个子句,每个子句恰好包含 3 个不同的文字(literal),找出能满足尽可能多子句的赋值。给出一个简单的随机化算法,使其在期望下达到 \(\frac{7}{8}\) 的近似比。也就是说,若最优解满足 \(c\) 个子句,你的算法应能在期望下产生一个满足至少 \(\frac{7c}{8}\) 个子句的赋值。

(b)给定一个 Max 3-SAT 实例 \(I\),令 \(\mathrm{OPT}_I\) 表示在 \(I\) 中能被任意变量赋值满足的子句的最大比例。在所有实例 \(I\) 上,\(\mathrm{OPT}_I\) 的最小值是多少?换言之,\(\min_I \mathrm{OPT}_I\) 等于多少?

(c)(额外学分)将你在(a)中的算法去随机化(derandomize),即给出一个能达到相同近似比的确定性算法。证明你算法的正确性。

注意:这一小问特别难,请仅在完成作业其余部分且希望额外练习时再尝试。

查看解题提示

(a)提示:利用期望的线性性(linearity of expectation)!

(b)提示:利用(a)的结论,并注意随机变量必须有时至少取其均值。

答案状态

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

题面来源:hw13.pdf · 2 · confidence: high

4蓄水池抽样的变体(Reservoir Variations)题目 · 提示 · 答案
官方题面翻译可离线作答无本地官方解答

完整题面

(a)设计一个算法,接收一个由 \([n] := \{1, \ldots, n\}\) 中 \(M\) 个整数组成的流 \(x_1, \ldots, x_M\),并在任意时刻 \(t\) 能够输出 \(x_1, \ldots, x_t\) 中的一个均匀随机元素。你的算法至多使用关于 \(\log n\) 和 \(\log M\) 的多项式级别的空间。证明算法的正确性并分析空间复杂度。你的算法只能对数据流进行单遍扫描。

(b)对于由 \([n]\) 中 \(2n\) 个整数组成的流 \(S = x_1, \ldots, x_{2n}\),若 \(j \in [n]\) 出现超过一次,则称 \(j\) 为重复元素。

证明 \(S\) 必须包含一个重复元素,并设计一个算法,以 \(S\) 为输入,以至少 \(1 - \frac{1}{n}\) 的概率输出一个重复元素。你的算法至多使用关于 \(\log n\) 的多项式级别的空间。证明算法的正确性并分析空间复杂度。你的算法只能对数据流进行单遍扫描。

查看解题提示

(a)提示:对于正确性证明,注意 \(\frac{1}{t} = 1 \cdot \frac{1}{2} \cdot \frac{2}{3} \cdot \frac{3}{4} \cdots \frac{t-1}{t}\)。

(b)提示:使用 \(\log n\) 份(a)中算法的副本来跟踪目前所见元素的一个随机子集。对于正确性证明,尝试上界化算法未能输出重复元素的概率;同时注意,至多有 \(n\) 个下标 \(t\) 使得元素 \(x_t\) 在 \(t\) 之后不再出现。

答案状态

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

题面来源:hw13.pdf · 3 · confidence: high

5整数流(Streaming Integers)题目 · 提示 · 答案
官方题面翻译可离线作答无本地官方解答

完整题面

在本问题中,假设我们接收一个无限的整数流 \(x_1, x_2, \ldots\),且每收到一个新整数后必须执行某些计算。由于我们可能会看到大量整数,因此希望限制总共使用的内存。以下所有部分,请给出算法的简要描述及其正确性的简要证明。

(a)证明:仅使用一个比特的内存,我们就能计算目前所见的所有整数之和是偶数还是奇数。

(b)证明:我们可以使用 \(O(\log N)\) 个比特的内存,计算目前所见的所有整数之和是否能被某个固定的整数 \(N\) 整除。

(c)假设 \(N\) 为质数。给出一个算法,检查 \(N\) 是否能整除目前所见的所有整数的乘积,并使用尽可能少的内存比特。

(d)现在,设 \(N\) 为任意整数,并假设已知其质因数分解:\(N = p_1^{k_1} p_2^{k_2} \cdots p_r^{k_r}\)。给出一个算法,检查 \(N\) 是否能整除目前所见的所有整数的乘积,并使用尽可能少的内存比特。用 \(k_1, \ldots, k_r\) 写出你的算法所使用的比特数。

查看解题提示

(c)提示:假设流的前 3 个整数是 7, 10, 6。你如何检查 \(N = 3\) 是否整除它们的乘积?为什么没有必要计算出整个乘积 \(7 \times 10 \times 6 = 420\) 来判断整除性?

(d)提示:在你的算法过程中跟踪 \(r\) 个值(即对 \(N\) 的每个质因数各跟踪一个)。

答案状态

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

题面来源:hw13.pdf · 4 · confidence: high


一手资料