OSDN Git Service

unify format
authorTianyi Qiu <gordanqiu@outlook.com>
Fri, 20 Nov 2020 01:30:43 +0000 (09:30 +0800)
committerTianyi Qiu <gordanqiu@outlook.com>
Fri, 20 Nov 2020 01:30:43 +0000 (09:30 +0800)
docs/misc/rand-technique.md

index ee75e16..d089a1d 100644 (file)
@@ -15,21 +15,25 @@ author: Ir1d, partychicken, ouuan, Marcythm, TianyiQ
 
 ## 用随机集合覆盖目标元素
 
-解空间中有一个(或多个)解是最优解。我们可以尝试进行多次撒网,只要有一次能够网住最优解就能成功。
+庞大的解空间中有一个(或多个)解是我们想要的。我们可以尝试进行多次撒网,只要有一次能够网住目标解就能成功。
 
 ### 例:三部图的判定
 
-问题:给定一张 $n$ 个结点、 $m$ 条边的简单无向图,用 RGB 三种颜色给每个结点染色 满足任意一对邻居都不同色,或者报告无解。
+???+ note "问题"
+    给定一张 $n$ 个结点、 $m$ 条边的简单无向图,用 RGB 三种颜色给每个结点染色 满足任意一对邻居都不同色,或者报告无解。
+
+???+ note "解法"
+    对每个点 $v$ ,从 $\{R,G,B\}$ 中等概率独立随机地选一种颜色 $C_v$ ,并钦定 $v$  **不** 被染成 $C_v$ 。最优解恰好符合这些限制的概率,显然是 $\big(\frac 23\big)^n$ 。
 
-对每个点 $v$ ,从 $\{R,G,B\}$ 中等概率独立随机地选一种颜色 $C_v$ ,并钦定 $v$  **不** 被染成 $C_v$ 。最优解恰好符合这些限制的概率,显然是 $\big(\frac 23\big)^n$ 。
+    在这些限制下,对于一对邻居 $(u,v)$ ,“ $u,v$ 不同色”的要求等价于以下这条“推出”关系:
 
-在这些限制下,对于一对邻居 $(u,v)$ ,“ $u,v$ 不同色”的要求等价于以下这条“推出”关系:
+    - 对于所有异于 $C_u,C_v$ 的颜色 $X$ ,若 $u$ 被染成 $X$ ,则 $v$ 被染成 $\{R,G,B\}\setminus\{X,C_v\}$ 。
 
-- 对于所有异于 $C_u,C_v$ 的颜色 $X$ ,若 $u$ 被染成 $X$ ,则 $v$ 被染成 $\{R,G,B\}\setminus\{X,C_v\}$ 
+    于是我们可以对每个 $v$ 设置布尔变量 $B_v$ ,其取值表示 $v$ 被染成两种剩余的颜色中的哪一种。借助 2-SAT 模型即可以 $O(m)$ 的复杂度解决这个问题
 
-于是我们可以对每个 $v$ 设置布尔变量 $B_v$ ,其取值表示 $v$ 被染成两种剩余的颜色中的哪一种。借助 2-SAT 模型即可以 $O(m)$ 的复杂度解决这个问题。
+    这样做,单次的正确率是 $\big(\frac 23\big)^n$ 。将算法重复运行 $-\big(\frac 32\big)^n\log \epsilon$ 次,只要有一次得到解就输出,这样即可保证 $1-\epsilon$ 的正确率。(详见后文中“自然常数的使用”和“抽奖问题”)
 
-这样做,单次的正确率是 $\big(\frac 23\big)^n$ 。将算法重复运行 $-\big(\frac 32\big)^n\log \epsilon$ 次,只要有一次得到解就输出,这样即可保证 $1-\epsilon$ 的正确率。(详见后文中“自然常数的使用”和“抽奖问题”)
+**回顾** :本题中“解空间”就是集合 $\{R,G,B\}^n$ ,我们每次通过随机施加限制来在一个缩小的范围内搜寻“目标解”——即合法的染色方案。
 
 ### 例: [CodeChef SELEDGE](https://www.codechef.com/problems/SELEDGE) 
 
@@ -277,7 +281,7 @@ $$
 
     $n\cdot m\leq 2\cdot10^5;q\leq 10^6;\epsilon=0.5,\delta=0.2$
 
-??? "解法"
+???+ note "解法"
     引理:令 $X_{1\cdots k}$ 为互相独立的随机变量,且取值在 $[0,1]$ 中均匀分布,则 $\mathrm{E}\big[\min\limits_i X_i\big]=\dfrac 1{k+1}$ 。
 
     - 证明:考虑一个单位圆,其上分布着 **相对位置** 均匀随机的 $k+1$ 个点,分别在位置 $0,X_1,X_2,\cdots,X_k$ 处。那么 $\min\limits_i X_i$ 就等于 $k+1$ 段空隙中特定的一段的长度。而因为这些空隙之间是“对称”的,所以其中任何一段特定空隙的期望长度都是 $\dfrac 1{k+1}$ 。
@@ -455,7 +459,7 @@ $$
 
 与该问题类似的模型经常出现在随机算法的复杂度分析中。
 
-??? note "解答"
+???+ note "解答"
     假如只有一个奖球,则抽取 $M:=-n\log\epsilon$ 次即可保证,因为 $M$ 次全不中的概率 $\Big(1-\dfrac 1n\Big)^{n\cdot (-\log\epsilon)}\leq e^{\log\epsilon}=\epsilon$ 。
     
     现在有 $k>1$ 个奖球,那么根据 Union Bound,我们只需保证每个奖球被漏掉的概率都不超过 $\dfrac \epsilon k$ 即可。于是答案是 $-n\log\dfrac \epsilon k$ 。
@@ -463,7 +467,7 @@ $$
 ???+ note "例:(\*)随机选取一半元素"
     给出一个算法,从 $n$ 个元素中等概率随机选取一个大小为 $\dfrac n2$ 的子集,保证 $n$ 是偶数。你能使用的唯一的随机源是一枚均匀硬币,同时请你尽量减少抛硬币的次数(不要求最少)。
 
-??? note "解法"
+???+ note "解法"
     首先可以想到这样的算法:
 
     - 通过抛 $n$ 次硬币,可以从所有子集中等概率随机选一个。
@@ -492,7 +496,7 @@ $$
 
     至此我们已经基本能够确信,第二、第三步的操作次数应该不是瓶颈,该算法的期望抛硬币次数应该是 $n+o(n)$ 。
 
-    ??? mdui-shadow-6 "闲得无聊想算精确的式子"
+    ??? mdui-shadow-6 "更精确的结果"
         尝试用 Hoeffding 不等式求第二、第三步中操作次数期望值的上界:
 
         $$
@@ -509,11 +513,12 @@ $$
 
 #### 引子:随机图的连通性
 
-求证:对于 $n \in \mathbf{N}^*; p,q\in [0,1]$ 且 $q\leq p$ ,随机图 $G_1(n,p)$ 的连通分量个数的期望值不超过随机图 $G_2(n,q)$ 的连通分量个数的期望值。这里 $G(n,\alpha)$ 表示一张 $n$ 个结点的简单无向图 $G$ ,其中 $\dfrac {n(n-1)}2$ 条可能的边中的每一条都有 $\alpha$ 的概率出现,且这些概率互相独立。
+???+ note "问题"
+    对于 $n \in \mathbf{N}^*; p,q\in [0,1]$ 且 $q\leq p$ ,求证:随机图 $G_1(n,p)$ 的连通分量个数的期望值不超过随机图 $G_2(n,q)$ 的连通分量个数的期望值。这里 $G(n,\alpha)$ 表示一张 $n$ 个结点的简单无向图 $G$ ,其中 $\dfrac {n(n-1)}2$ 条可能的边中的每一条都有 $\alpha$ 的概率出现,且这些概率互相独立。
 
 这个结论看起来再自然不过,但严格证明却并不那么容易。
 
-??? note "大致思路"
+???+ note "证明思路"
     我们假想这两张图分别使用了一个 01 随机数生成器来获知每条边存在与否,其中 $G_1$ 的生成器 $T_1$ 每次以 $p$ 的概率输出 1, $G_2$ 的生成器 $T_2$ 每次以 $q$ 的概率输出 1。这样,要构造一张图,就只需把对应的生成器运行 $\dfrac {n(n-1)}2$ 遍即可。
 
     现在我们把两个生成器合二为一。考虑随机数生成器 $T$ ,每次以 $q$ 的概率输出 0 ,以 $p-q$ 的概率输出 1 ,以 $1-p$ 的概率输出 2 。如果我们将这个 $T$ 运行 $\dfrac {n(n-1)}2$ 遍,就能同时构造出 $G_1$ 和 $G_2$ 。具体地说,如果输出是 0 ,则认为 $G_1$ 和 $G_2$ 中都没有当前考虑的边;如果输出是 1 ,则认为只有 $G_1$ 中有当前考虑的边;如果输出是 2 ,则认为 $G_1$ 和 $G_2$ 中都有当前考虑的边。
@@ -530,7 +535,7 @@ $$
 
 我们可以计算出 $f_k$ 表示:如果当前已经拥有 $k$ 个不同物品,则期望要花多少钱才能抽到新物品。根据刚才的观察,我们可以直接把 $f_k$ 当作一个固定的代价,即转化为“每次花 $f_k$ 块钱随机获得一个新物品”。
 
-??? note "期望代价的计算"
+???+ note "期望代价的计算"
     显然 $f_k=\dfrac x2 \cdot (R-1)+x$ ,其中 $R$ 表示要得到新物品期望的抽取次数。
     
     引理:如果一枚硬币有 $p$ 的概率掷出正面,则首次掷出正面所需的期望次数为 $\dfrac 1p$ 。
@@ -545,7 +550,7 @@ $$
 
 这个结论符合直觉,因为 $f_k$ 是关于 $k$ 递增的,早抽似乎确实比晚抽看起来好一点。
 
-??? note "证明"
+???+ note "证明"
     先考虑证明一个特殊情况。将证:
 
     -  随机过程 $A$ :先买物品 $x$ ,然后不断抽直到得到所有物品