检查矩阵乘法正确性 Checking Matrix Multiplication
问题描述
给定三个矩阵 A,B,C∈Rn×n,判断 AB=C 是否成立.
如果直接进行矩阵乘法的计算并逐个比较矩阵的元素,时间复杂度为矩阵乘法的复杂度 O(nω),where ω>2,太大了,考虑使用随机算法
Freivald’s Algorithm
选取均匀分布变量 r∈{0,1}n,判断 A(Br)=Cr 是否成立,这样时间复杂度为 O(n2).
下面推导算法的准确性:
当 AB=C 时,A(Br)=Cr 总是成立.
当 AB=C 时,考虑 P(ABr=Cr).
令 D=AB−C=0n×n,不妨设 dij=0,则有
P(Dr=0)≤P((Dr)i=0)=P(k=1∑ndikrk=0)=P(rj=−dij1k=j∑dikrk)≤2n2n−1=21
于是运行一次该算法,错误的概率小于21. 这个概率还是比较大的,可以独立地运行 O(logn) 次,那么时间复杂度为 O(n2logn),错误的概率小于 2O(logn)1,correct w.h.p
多项式判等 Polynomial Identity Testing (PIT)
问题描述
- 给定两个 d 阶多项式 f,g∈F[x],判断 f≡g 是否成立.
- 给定 d 阶多项式 f∈F[x],判断 f≡0 是否成立.
注意多项式都是黑盒的,否则直接比较多项式系数即可.
Randomized Algorithm
选取均匀分布变量 r∈S,where S⊆F,判断 f(r)=0 是否成立.
下面推导算法的准确性:
当 f≡0 时,总是成立.
当 f≡0 时,根据代数基本定理, d 阶多项式 f∈F[x] 最多有 d 个根。因此 P(f(r)=0)≤∣S∣d。令 ∣S∣=2d 则有 P(f(r)=0)≤21.
跟前一个问题一样,多运行几遍就可以得到正确率较高的结果.
通信复杂性 Communication Complexity
问题描述
给定两个实体 a,b,他们分别存有 n bit 信息,现在要计算 f(a,b),问所需的通信复杂度,也就是需要传输的 bit 数是多少.
在这里我们讨论 EQ:{0,1}n×{0,1}n→{0,1}
EQ(a,b)={10if a=bo.w.
Deterministic Algorithm
一个简单的确定性算法是将 b 的信息完全传给 a,再进行计算,这样的通信复杂度是 n bits.
姚期智证明了所有的确定性算法的最坏通信复杂度是 n bits.
Randomized Algorithm
那能不能利用前面两个问题的思想,使用随机算法来解决呢?
可以将 a,b 的每一位当作多项式系数,f=i=0∑n−1aixi, g=i=0∑n−1bixi,这样就可以转化为 PIT 问题.
根据 PIT,r∈[2n]. 对于 b 而言,需要将 r 和 g(r) 传输给 a. 传输 r 需要 O(logn) bits,而 g(r)=O(rn)=O(nn),传输 g(r) 需要 O(nlogn) bits,比 n 还大!
在 PIT 中可以注意到 F 的取值可以变,可以选择一个更小的域来进行计算,这样通信复杂度可以降下来.
可以选择一个质数 p∈[n,2n2],令 f,g∈Zp[x],(即模 p)
选取均匀分布变量 s∈[p],那么此时误判的概率为 pn−1=O(n1).
传输 r 需要 O(logp)=O(logn),传输 g(r) 需要 O(logp)=O(logn),因此整体的通信复杂度降到了 O(logn).
Schwartz-Zippel Theorem
问题描述
下面来看更一般的 PIT 问题. 考虑多元多项式 f∈F[x1,…,xn]≡0 是否成立
f(x1,…,xn)=i1,…,in≥0∑ai1,i2…,inx1i1x2i2⋯xnin
多项式的阶数 d 为 ai1,i2…,in=0maxi1+i2+⋯+in.
Randomized Algorithm
独立随机选取 r1,…,rn∈S,判断 f(r1,…,rn)=0 是否成立.
Schwartz-Zippel Theorem 指出
f≡0⇒P(f(r1,…,rn)=0)≤∣S∣d
Proof
f(x1,x2,…,xn)=i=0∑dxnifi(x1,x2,…,xn−1)
运用数学归纳法:
当 n=1 时,根据之前的结果,成立
假设对于所有小于 n 的情况都成立,令 k 为 xn 的最高次,也就是说 fk≡0,fk 的阶数 ≤d−k
=≤P(f(r1,…,rn)=0)P(f(r)=0∣fk(r1,…,rn−1)=0)⋅P(fk(r1,…,rn−1)=0)+P(f(r)=0∣fk(r1,…,rn−1)=0)⋅P(fk(r1,…,rn−1)=0)∣S∣d−k+∣S∣k=∣S∣d
实际上这也说明了任意 f≡0 在任意 cube Sn 中的零点 ≤d⋅∣S∣n−1
Fingerprint
回到这一章的标题——指纹 fingerprint。以上举的都是几个指纹的例子。指纹是指这样一种函数:
- a=b⇒FING(a)=FING(b)
- 若 a=b, P[FING(a)=FING(b)] 很小
- FING() 的值较小
以下介绍几个指纹的例子
通信复杂性
还是这个问题,指纹函数为 FING(x)=x mod p,随机选取质数 p∈[k]
P[a≡b(modp)]=# of prime in [k]# of prime divisors of ∣a−b∣≤π(k)loga
而 π(N)∼lnNN,当 N→∞. 令 k=n3=log3a,则
P[a≡b(modp)]≤knlnk=O(n1)
字符串匹配
确定性算法有大名鼎鼎的 KMP 算法。
使用指纹算法,可以依次扫描过去进行对比,使用上一个问题的指纹函数即可
检查集合是否相同
FING(A)=fA(r)=i=1∑n(x−ai) for uniform random r∈Zp, p∈[(nlogn)2/2,(nlogn)2]
error probability: O(1/n)