Featured image of post Lecture 1

Lecture 1

前言

随机算法的定义:与确定性算法对应。

确定性算法:给定确定的输入,它的输出是唯一的(确定的),每次运行的执行步骤和结果都完全相同。

随机算法:除了给定的输入外,算法的执行过程还依赖于一系列的随机选择(如内置的随机数生成器)。因此,对于完全相同的输入,每次运行的执行路径、运行时间或输出结果都有可能会不同,即含有额外的随机比特输入。

通常,关注随机算法,需要关注它的复杂度(必须小于确定性算法,因为是牺牲正确率得出),以及正确率。

随机性来源可能有两个,一个是input本身,一个是run的时候运用的随机比特。

Checking Matrix Multiplication

输入:三个 $n \times n$ 矩阵 $A,B,C$ 输出: $AB$ 是否等于 $C$

确定性算法的时间复杂度为 $O(n^3)$ 。

一种朴素的随机算法是,抽出 $A$ 的第 $i$ 行和 $B$ 的第 $j$ 列相乘,检查是否等于 $C_{ij}$ 。

若检查通过,输出1,否则输出0,这是一个one-sided error,因为只有在 $AB \not ={C}$ 时,算法才会出错。

考虑 $AB \not ={C}$ 让它通过的概率,即worst case(事实上我们总是关注worst case),错误率为 $1-\frac{1}{n^2}$ 。

也就是说,此时只需要让 $AB$ 和 $C$ 除了一个元素不同,其他元素全部相同,那么错误率最大,这种算法的错误率太高,不被我们接受。

一个思路是,多挑几个,考虑,正确率也不错。

实际上的思路是,找一个向量 $x$ ,只需要验证 $ABx=Cx$ , 固定这个向量元素的取值集合 $S$ ,它的每一个元素从 $S$ 中均匀随机抽出。

首先考虑时间复杂度,可以通过结合律转化为 $A(Bx)=Cx$ ,这样就不需要算矩阵乘法,而只要算几次矩阵乘以向量,时间复杂度为 $O(n^2)$ 。

当 $AB=C$ 时,通过是显然的。

若 $AB \not ={C}$ ,即 $(AB-C)x=0$ ,由于随机性来源为 $x$ ,考虑判断错误的情况,固定 $x_1,\ldots,x_{n-1}$ ,此时方程的根至多有一个,因此错误率 $Pr[AB(x)=C(x)] \leq \frac{1}{|S|}$ 。

核心思路是把矩阵作为算子,作用在随机输入向量上。

Checking Associativity

输入:在一个大小为 $n$ 的集合 $X$ 上定义二元运算 $\circ$ 。

输出:是否满足结合律 $\forall i,j,k \in X,i \circ (j \circ k)=(i \circ j) \circ k$ 。

显然,确定性算法的时间复杂度为 $O(n^3)$ 。

一种朴素的随机算法是,随机抽一个三元组,如果检查通过输出1,否则输出0,它的时间复杂度为 $O(k)$ ,但是正确率最坏为 $\frac{1}{n^3}$ ,太低了,不被我们接受。

不妨设 $X={1,2,\ldots,n}$ 。

考虑将单个元素的结合拓展到子集的结合上,首先根据状压思想,设 $(R)_{2}=(r_1r_2\ldots r_n)$ , $R$ 是 $X$ 的子集。

接着,为了运算方便,我们定义 $R \circ S=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}(r_is_j)(i \circ j)$

并且,若出现重复的,将此时的加法定义为模2加法,即异或,因为它天然具有交换律和结合律的性质。

那么,为什么不定义 $1+1=1$ ?因为向量空间要求加法必须构成交换群,满足交换律、结合律、存在零元和逆元,那么逆元性质会失效。

下面,我们来证明 $\circ$ 在子集上结合的等价性。

如果 $X$ 结合,那么任取三个子集 $R,S,T$ ,有

$$(R \circ S) \circ T=(\sum\limits_{i,j}r_is_j \cdot (i \circ j)) \circ T=\sum\limits_{i,j,k}r_i s_j t_k \cdot ((i \circ j) \circ k)$$

$$R \circ (S \circ T)=R \circ (\sum\limits_{j,k}s_jt_k \cdot (j \circ k))=\sum\limits_{i,j,k}r_i s_j t_k \cdot (i \circ (j \circ k))$$

由于对任意 $i,j,k$ 都有 $((i \circ j) \circ k)=(i \circ (j \circ k))$,同时模2乘法也是结合的,故可得 $(R \circ S) \circ T=R \circ (S \circ T)$。

若任取三个子集结合,即 $(R \circ S) \circ T=R \circ(S \circ T)$ ,取单元素集即可得到任意三个元素结合。

测试等价性后,就可以设计随机算法了,规定算法为均匀随机选择 $R,S,T \in (1«n)-1$ ,若它们三个不结合则输出No,否则输出Yes。

最后,需要对正确率做一个界定。

这部分证明的核心在于利用 函数的线性(即分配律) 将错误情况“散布”到不同的随机选择中去。

首先给出结论:若 $\circ$ 不结合,那么随机选取三个子集 $R, S, T \subseteq X$,满足 $(R \circ S) \circ T = R \circ (S \circ T)$,也就是测试无法发现错误的概率至多为 $\frac{7}{8}$。

证明思路如下:

  1. 定义偏差函数: 定义函数 $f(A,B,C) = (A \circ B) \circ C + A \circ (B \circ C)$。 其中加法 $+$ 表示集合的对称差(即模2加法/异或)。 若结合律成立,对于任意 $A,B,C$ 都有 $f(A,B,C) = \emptyset$。 若结合律不成立,也就是只要存在不结合的元素 $i^, j^, k^$,必定有 $f({i^}, {j^}, {k^}) \neq \emptyset$。

  2. 多重线性(分配律): 因为 $\circ$ 的定义本质是各项的乘积相加(异或),所以 $\circ$ 运算对集合的异或加法满足分配律:$(A+B)\circ C = (A\circ C) + (B\circ C)$。 这使得 $f(A,B,C)$ 对三个参数均具有线性性质: $f(A_0+A_1, B, C) = f(A_0, B, C) + f(A_1, B, C)$

  3. 构造8元组划分: 现在假设原本的集合运算不结合,并且已知元素 $i^, j^, k^$ 不结合。 我们考虑所有可能的子集三元组 $(R,S,T)$ 的空间。 任取三个不包含 $i^, j^, k^$ 的子集 $R_0, S_0, T_0$。 我们定义 $R_1 = R_0 + {i^}$,$S_1 = S_0 + {j^}$,$T_1 = T_0 + {k^*}$。(这里 $+$ 即代表把元素加进集合里)。 对于任意一块确定的 $(R_0, S_0, T_0)$,能唯一衍生出 8 个三元组 $(R_r, S_s, T_t)$,其中 $r, s, t \in {0, 1}$。 这种方式将空间里所有可能选取的三元组,无遗漏且不重合地划分成了若干个大小为8的组

  4. 局部证明至少错1个: 在任意一个8元组内,考虑将这 8 种选择代入函数 $f$ 并全部异或相加: $$\sum_{r \in {0,1}} \sum_{s \in {0,1}} \sum_{t \in {0,1}} f(R_r, S_s, T_t)$$ 根据多重线性的性质,我们可以把求和符号收进去: $$f(R_0+R_1,\ S_0+S_1,\ T_0+T_1)$$ 回想我们刚才的定义,异或加法有相消的性质:$R_0+R_1 = R_0 + (R_0 + {i^}) = {i^}$(同理得出 ${j^}$ 和 ${k^}$)。 所以这就等于: $$f({i^}, {j^}, {k^})$$ 前面已知 $f({i^}, {j^}, {k^}) \neq \emptyset$,这意味着: $$\sum_{r,s,t \in {0,1}} f(R_r, S_s, T_t) \neq \emptyset$$ 结论:如果这 8 个三元组全都满足结合律,那它们的 $f$ 值全都是 $\emptyset$,异或和必定为 $\emptyset$。既然异或和不为 $\emptyset$,说明这 8 种选择里至少有 1 种 $f \neq \emptyset$(即暴露出了不结合的情况)。

  5. 概率定界: 由于整个采样空间被完美分成了独立的一块块8元组,每组里测试通过的数量最多只有 7 个。 因此,单次采用随机三元组,发现不了错误(即测试通过)的概率: $$Pr[(R \circ S) \circ T = R \circ (S \circ T)] \leq \frac{7}{8}$$

总的时间复杂度为 $O(k \cdot n^2)$ ,其中 $k$ 为检测(采样)次数。若执行 $k$ 次都没发现错误,由于每次抽样相互独立,不结合但全部通过的概率低于 $(\frac{7}{8})^k$。

本博客已稳定运行
发表了47篇文章 · 总计305.52k字
使用 Hugo 构建
主题 StackJimmy 设计