OSDN Git Service

add statement abstract & add details & fix details
authorTianyi Qiu <gordanqiu@outlook.com>
Wed, 2 Dec 2020 04:56:51 +0000 (12:56 +0800)
committerTianyi Qiu <gordanqiu@outlook.com>
Wed, 2 Dec 2020 04:56:51 +0000 (12:56 +0800)
docs/misc/rand-technique.md

index db8a9d9..54dcc8a 100644 (file)
@@ -12,6 +12,7 @@ author: Ir1d, partychicken, ouuan, Marcythm, TianyiQ
 
 -  $\mathrm{Pr}[A]$ 表示事件 $A$ 发生的概率。
 -  $\mathrm{E}[X]$ 表示随机变量 $X$ 的期望。
+- 赋值号 $:=$ 表示引入新的量,例如 $Y:=1926$ 表示引入值为 $1926$ 的量 $Y$ 。
 
 ## 用随机集合覆盖目标元素
 
@@ -39,7 +40,7 @@ author: Ir1d, partychicken, ouuan, Marcythm, TianyiQ
 ### 例: [CodeChef SELEDGE](https://www.codechef.com/problems/SELEDGE) 
 
 ???+ note "简要题意"
-    to be written
+    给定一张点、边都有非负权值的无向图,找到一个大小 $\leq K$ 的边集合 $S$ ,以最大化与 $S$ 相连的点的权值和减去 $S$ 的边权和。一个点的权值只被计算一次。
 
 观察:如果选出的边中有三条边构成一条链,则删掉中间的那条一定不劣;如果选出的边中有若干条构成环,则删掉任何一条一定不劣。
 
@@ -81,7 +82,7 @@ author: Ir1d, partychicken, ouuan, Marcythm, TianyiQ
 ### 例: [Gym 101550I](https://codeforces.com/gym/101550/attachments) 
 
 ???+ note "简要题意"
-    to be written
+    有一张图形如:两条平行的链,加上连接两链的两条平行边。给定这张图上的若干条简单路径(每条路径表示一次通话),请你选择尽量少的边放置窃听器,以使得每条给定的路径上都有至少一个窃听器。
 
 整张图可以拆分为一个环加上四条从环伸出去的链。对于这四条链中的任何一条(记作 $C$ ),考虑在这条链上如何放置窃听器,容易通过贪心算法得到满足以下条件的方案:
 
@@ -121,7 +122,7 @@ author: Ir1d, partychicken, ouuan, Marcythm, TianyiQ
 ### 例: [CSES 1685 New Flight Routes](https://cses.fi/problemset/task/1685) 
 
 ???+ note "简要题意"
-    to be written
+    给定一张有向图,请你加最少的边使得该图强连通,需 **输出方案** 。
 
 先对原图进行强连通缩点。我们的目标显然是使每个汇点能到达每个源点。
 
@@ -187,7 +188,9 @@ $$
 ### 例: [TopCoder MagicMolecule](https://community.topcoder.com/stat?c=problem_statement&pm=11705) 随机化解法
 
 ???+ note "简要题意"
-    to be written
+    给定一张 $n$ 个点、带点权的无向图,在其中所有大小不小于 $\dfrac {2n}3$ 的团中,找到点权和最大的那个。
+
+    $n\leq 50$
 
 不难想到折半搜索。把点集均匀分成左右两半 $V_L,V_R$ (大小都为 $\dfrac n2$ ),计算数组 $f_{L,k}$ 表示点集 $L\subseteq V_L$ 中的所有 $\geq k$ 元团的最大权值和。接着我们枚举右半边的每个团 $C_R$ ,算出左半边有哪些点与 $C_R$ 中的所有点相连(这个点集记作 $N_L$ ),并用 $f_{N_L,\frac 23 n-|C_R|}+\textit{value}(C_R)$ 更新答案。
 
@@ -217,13 +220,17 @@ $$
 ### 例: [UOJ #207 共价大爷游长沙](https://uoj.ac/problem/207) 
 
 ???+ note "简要题意"
-    to be written
+    维护一棵动态变化的树,和一个动态变化的结点二元组集合。你需要支持:
+
+    - 删边、加边。保证得到的还是一棵树。
+    - 加入/删除某个结点二元组。
+    - 给定一条边 $e$ ,判断是否对于集合中的每个结点二元组 $(s,t)$ , $e$ 都在 $s,t$ 间的简单路径上。
 
 对图中的每条边 $e$ ,我们定义集合 $S_e$ 表示经过该边的关键路径(即题中的 $(a,b)$ )集合。考虑对每条边动态维护集合 $S_e$ 的哈希值,这样就能轻松判定 $S_e$ 是否等于全集(即 $e$ 是否是“必经之路”)。
 
 哈希的方式是,对每个 $(a,b)$ 赋予 $2^{64}$ 以内的随机非负整数 $H_{(a,b)}$ ,然后一个集合的哈希值就是其中元素的 $H$ 值的异或和。
 
-è¿\99æ ·ç\9a\84è¯\9dï¼\8cä»»ä½\95ä¸\80个å\9bºå®\9aç\9a\84é\9b\86å\90\88ç\9a\84å\93\88å¸\8cå\80¼ä¸\80å®\9aæ\9c\8dä»\8e $R:=\big\{0,1,\cdots,2^{64}-1\big\}$ ä¸\8aç\9a\84å\9d\87å\8c\80å\88\86å¸\83ï¼\8c这是因为:
+è¿\99æ ·ç\9a\84è¯\9dï¼\8cä»»ä½\95ä¸\80个å\9bºå®\9aç\9a\84é\9b\86å\90\88ç\9a\84å\93\88å¸\8cå\80¼ä¸\80å®\9aæ\9c\8dä»\8e $R:=\big\{0,1,\cdots,2^{64}-1\big\}$ ä¸\8aç\9a\84å\9d\87å\8c\80å\88\86å¸\83ï¼\88æ\8d¢å\8f¥è¯\9d说ï¼\8cå\93\88å¸\8cå\80¼ç\9a\84å\8f\96å\80¼è\8c\83å\9b´ä¸º $R$ ï¼\8cä¸\94å\8f\96æ¯\8fä¸\80个å\80¼ç\9a\84æ¦\82ç\8e\87ç\9b¸ç­\89ï¼\89ã\80\82这是因为:
 
 1. 单个 $H_{(a,b)}$ 显然服从均匀分布。
 2. 两个独立且服从 $R$ 上的均匀分布的随机变量的异或和,一定也服从 $R$ 上的均匀分布。自证不难。
@@ -243,11 +250,11 @@ $$
 这里仅关注第二部分,即如何求一个矩阵序列的递推式。所以我们只需考虑下述问题:
 
 ???+ note "问题"
-    给定一个矩阵序列,该序列在模 $P=998244353$ 意义下服从一个齐次线性递推式(递推式中的数乘和加法运算定义为矩阵的数乘和加法),求出最短递推式。
+    给定一个矩阵序列,该序列在模 $P:=998244353$ 意义下服从一个齐次线性递推式(递推式中的数乘和加法运算定义为矩阵的数乘和加法),求出最短递推式。
 
 如果一系列矩阵服从一个递推式 $F$ ,那么它的每一位也一定服从 $F$ 。然而,如果对某一位求出最短递推式 $F'$ ,则 $F'$ 可能会比 $F$ 更短,从而产生问题。
 
-解å\86³æ\96¹æ¡\88æ\98¯ï¼\8cç»\99ç\9f©é\98µç\9a\84æ¯\8fä¸\80ä½\8d $(i,j)$ èµ\8bäº\88ä¸\80个 $<P$ ç\9a\84é\9a\8fæ\9cºæ\9d\83å\80¼ $x_{i,j}$ ï¼\8c计ç®\97åº\8få\88\97中æ¯\8f个ç\9f©é\98µç\9a\84æ\89\80æ\9c\89ä½\8dç\9a\84å\8a æ\9d\83å\92\8c模 $P$ ç\9a\84ç»\93æ\9e\9cï¼\8cç\84¶å\90\8e对所得数列运行 BM 算法。
+解å\86³æ\96¹æ¡\88æ\98¯ï¼\9aç»\99ç\9f©é\98µç\9a\84æ¯\8fä¸\80ä½\8d $(i,j)$ èµ\8bäº\88ä¸\80个 $<P$ ç\9a\84é\9a\8fæ\9cºæ\9d\83å\80¼ $x_{i,j}$ ï¼\8cç\84¶å\90\8e对äº\8eåº\8få\88\97中æ¯\8f个ç\9f©é\98µè®¡ç®\97å\85¶æ\89\80æ\9c\89ä½\8dç\9a\84å\8a æ\9d\83å\92\8c模 $P$ ç\9a\84ç»\93æ\9e\9cï¼\8cå\86\8dæ\8a\8aæ¯\8f个ç\9f©é\98µç®\97å\87ºç\9a\84è¿\99个æ\95°è¿\9eæ\88\90ä¸\80个æ\95°å\88\97ï¼\8cæ\9c\80å\90\8eæ\88\91们对所得数列运行 BM 算法。
 
 错误率分析:
 
@@ -261,7 +268,7 @@ $$
 - 假设 $(i,j)$ 是唯一的不服从的位置,则一定有:
 
 $$
-T_{i,j}:=x_{i,j}\cdot\big(S(N)_{i,j}-F'_1S(N-1)_{i,j}-\cdots-F'_lS(N-l)_{i,j}\big)\bmod P=0
+T_{i,j}:=\Big(x_{i,j}\cdot\big(S(N)_{i,j}-F'_1S(N-1)_{i,j}-\cdots-F'_lS(N-l)_{i,j}\big)\bmod P\Big)=0
 $$
 
 - 显然这仅当 $x_{i,j}=0$ 时才成立,概率 $P^{-1}$ 。
@@ -273,7 +280,7 @@ $$
 ### 例: [UOJ #552 同构判定鸭](https://uoj.ac/problem/552) 及其错误率分析
 
 ???+ note "简要题意"
-    to be written
+    给定两张边权为小写字母的有向图 $G_0,G_1$ ,你要对这两张图分别算出「所有路径对应的字符串构成的多重集」(可能是无穷集),并判断这两个多重集是否相等。如果不相等,你要给出一个最短的串,满足它在两个多重集中的出现次数不相等。
 
 令 $f_{K,i,j}$ 表示图 $G_K$ 中从点 $i$ 开始的所有长为 $j$ 的路径,这些路径对应的所有字符串构成的多重集的哈希值。按照 $j$ 升序考虑每个状态,转移时枚举 $i$ 的出边并钦定该边为路径上的第一条边。
 
@@ -286,9 +293,15 @@ $$
 对每一个二元组 $(c,j)$ (其中 $c$ 为字符, $j$ 为整数表示 $c$ 在某个串中的第几位)我们都预先生成一个随机数 $x_{c,j}$ 。然后我们把串 $a_1a_2\cdots a_k$ 映射到 $x_{a_1,1}x_{a_2,2}\cdots x_{a_k,k}\bmod Q$ 上(其中 $Q$ 为 **随机选取** 的质数)、再把多重集的哈希值定为其中元素的哈希值之和模 $Q$ 。接下来分析它的错误率。
 
 ???+ note "(\*)Schwartz-Zippel 引理"
-    令 $f\in F[x_1,\cdots,x_k]$ 为域 $F$ 上的 $k$ 元 $d$ 次多项式,令 $S$ 为 $F$ 的有限子集,则至多有 $d\cdot |S|^{k-1}$ 组 $(x_1,\cdots,x_k)\in S^k$ 满足 $f(x_1,\cdots,x_k)=0$ 。
+    令 $f\in F[z_1,\cdots,z_k]$ 为域 $F$ 上的 $k$ 元 $d$ 次非零多项式,令 $S$ 为 $F$ 的有限子集,则至多有 $d\cdot |S|^{k-1}$ 组 $(z_1,\cdots,z_k)\in S^k$ 满足 $f(z_1,\cdots,z_k)=0$ 。
+
+    ??? mdui-shadow-6 "如果你不知道域是什么"
+        你只需记得这两样东西都是域:
+
+        1. 模质数的剩余系,以及其上的各种运算。
+        2. 实数集,以及其上的各种运算。
 
-    推论:若 $x_1,\cdots,x_k$ 都在 $S$ 中等概率独立随机选取,则 $\mathrm{Pr}\big[f(x_1,\cdots,x_k)=0\big]\leq \dfrac d{|S|}$ 。
+    推论:若 $z_1,\cdots,z_k$ 都在 $S$ 中等概率独立随机选取,则 $\mathrm{Pr}\big[f(z_1,\cdots,z_k)=0\big]\leq \dfrac d{|S|}$ 。
 
 记 $F$ 为模 $Q$ 的剩余系所对应的域,则对于一个 $L\leq n_1+n_2$ , $\sum\limits_i f_{0,i,L}$ 和 $\sum\limits_i f_{1,i,L}$ 就分别对应着一个 $F$ 上关于变元集合 $\{x_{*,*}\}$ 的 $L$ 次多元多项式,不妨将这两个多项式记为 $P_0,P_1$ 。
 
@@ -316,7 +329,11 @@ $$
 
 分析后者发生的概率:
 
-- 直接套用 Schwartz-Zippel 引理,得到该概率 $\leq \dfrac LQ$ 。
+- 在 Schwartz-Zippel 引理中:
+    - 取域 $F$ 为模 $Q$ 的剩余系对应的域
+    - 取 $f(x_{*,*})=P_0(x_{*,*})-P_1(x_{*,*})$ 为 $L$ 次非零多项式
+    - 取 $S=F$ 
+- 得到:所求概率 $\leq \dfrac LQ$ 。
 
 注意到我们需要对每个 $L$ 都能保证正确性,所以要想保证严谨的话还需用 Union Bound(见后文)说明一下。
 
@@ -545,14 +562,18 @@ $$
     - 如果该子集大小不到 $\dfrac n2$ ,则利用第二个算法不断添加元素,直到将大小补到 $\dfrac n2$ 。
     - 如果该子集大小超过 $\dfrac n2$ ,则利用第二个算法不断删除元素,直到将大小削到 $\dfrac n2$ 。
 
-    尝试分析第二、第三步所需的操作次数:
+    å°\9dè¯\95å\88\86æ\9e\90第äº\8cã\80\81第ä¸\89æ­¥æ\89\80é\9c\80ç\9a\84æ\93\8dä½\9c次æ\95°ï¼\88å\8d³æ·»å\8a /å\88 é\99¤å\85\83ç´ ç\9a\84次æ\95°ï¼\89ï¼\9a
 
-    - 记 01 随机变量 $X_i$ 表示 $i$ 是否被选入初始的子集,令 $X:=X_1+\cdots+X_n$ 表示子集大小,则第二、第三步所需的操作次数等于 $\big|X-\mathrm{E}[X]\big|$ 。在 Hoeffding 不等式中取 $t=c\cdot\sqrt n$ (其中 $c$ 为任意常数),得到 $\mathrm{Pr}\Big[\big|X-\mathrm{E}[X]\big|\geq t\Big]\leq 2e^{-c^2}$ 。也就是说,我们可以通过允许 $\Theta(\sqrt n)$ 级别的偏移,来得到任意小的常数级别的失败概率。(注意到这并不一定说明偏移量的期望值就是 $\Theta(\sqrt n)$ )
+    - 记 01 随机变量 $X_i$ 表示 $i$ 是否被选入初始的子集,令 $X:=X_1+\cdots+X_n$ 表示子集大小,则第二、第三步所需的操作次数等于 $\big|X-\mathrm{E}[X]\big|$ 。在 Hoeffding 不等式中取 $t=c\cdot\sqrt n$ (其中 $c$ 为任意常数),得到 $\mathrm{Pr}\Big[\big|X-\mathrm{E}[X]\big|\geq t\Big]\leq 2e^{-c^2}$ 。也就是说,我们可以通过允许 $\Theta(\sqrt n)$ 级别的偏移,来得到任意小的常数级别的失败概率。
 
-    至此我们已经基本能够确信,第二、第三步的操作次数应该不是瓶颈,该算法的期望抛硬币次数应该是 $n+o(n)$ 
+    至此我们已经说明:该算法可以以很大概率保证抛硬币次数在 $n+\Theta(\sqrt n\log n)$ 以内
 
-    ??? mdui-shadow-6 "更精确的结果"
-        尝试用 Hoeffding 不等式求第二、第三步中操作次数期望值的上界:
+    - 其中 $n$ 来自获得初始子集的抛硬币次数; $\Theta(\sqrt n\log n)$ 是 $\Theta(\sqrt n)$ 次添加/删除元素的总开销。
+
+    ??? mdui-shadow-6 "计算期望复杂度"
+        我们再从另一个角度分析,尝试计算该算法的期望抛硬币次数。
+
+        用 Hoeffding 不等式求第二、第三步中操作次数期望值的上界:
 
         $$
         \mathrm{E}\Big[\big|X-\mathrm{E}[X]\big|\Big]=\int\limits_0^\infty \mathrm{Pr}\Big[\big|X-\mathrm{E}[X]\big|\geq t\Big]\mathrm{d}t\leq2\int\limits_0^\infty \exp {-\dfrac {t^2}n}\mathrm{d}t=\sqrt{\pi n}
@@ -585,7 +606,12 @@ $$
 #### 应用: [NERC 2019 Problem G: Game Relics](https://codeforces.com/contest/1267/problem/G) 
 
 ???+ note "简要题意"
-    to be written
+    有若干个物品,每个物品有一个价格 $c_i$ 。你想要获得所有物品,为此你可以任意地进行两种操作:
+
+    1. 选择一个未拥有的物品 $i$ ,花 $c_i$ 块钱买下来。
+    2. 花 $x$ 块钱从所有物品(包括已经拥有的)中等概率随机抽取一个。如果尚未拥有该物品,则直接获得它;否则一无所获,但是会返还 $\dfrac x2$ 块钱。 $x$ 为输入的常数。
+
+    问最优策略下的期望花费。
 
 观察:如果选择抽物品,就一定会一直抽直到获得新物品为止。