线性判断结合律和其他恒等式 (by whx)

线性判断结合律和其他恒等式 (by whx)

代武爷爷更新的(帮忙弄蛋疼的知乎公式)赞美勤奋的武爷爷!

whx原文(多图预警):线性判断结合律和其他恒等式

Rajagopalan, S., Schulman, L.J.: Verification of identities. SIAM J. Comput. 29(4), 1155–1163 (2000)



这篇paper是以 O(n^2log\frac{1}{\epsilon}) 的复杂度判断运算是否满足结合律(即判断是否是半群),并且可以拓展到别的恒等式的判断(比如说判断一个DFA是不是“异步”的——DFA的输入是否可以交换字符之间的顺序)。


1/8 approach


首先证明一个lemma: 定义 S^k 的一个minor是它的 k 个子集的笛卡尔积,如果有一个不等于0的函数 f : S^k\rightarrow H (H是一个阿贝尔群),定义minor的f值是他所有元素的f值之和。那么至少有 \frac{1}{2^k} 的minor T 都满足 f(T) \not= 0


考虑固定一个不为0的元素 (a_1, a_2 ... a_k) ,我们把所有minor按照它和 (S/a_1, S/a_2 ... , S/a_k) 的交归类,每类里有 2^k 个minor,他们之间只有第 i 维是否包含 a_i 不同。


然后我们考虑对每类内用容斥原理表示出(这里用到了H是阿贝尔群的性质) (a_1, a_2 ... a_k) ,实际上就是 t 维强制不是 a 的时候权值为 (-1)^t


然后由于这个元素不为0,所以每组至少有一个minor不为0,从而至少有 \frac{1}{2^k} 的minor不为0.


考虑现在要做的是 f(S^3) = (ab)c - a(bc) = (ab)c + a(bc), f: S^3 \rightarrow S / 2 , 定义 S/2 = (F_2)[S] = \{ \sigma_i s_i | \sigma_i \in F_2\} ,类似于一个S上的01多项式,我们类似多项式系数mod 2意义下的乘法定义 S/2 上的乘法。


(ab)c - a(bc) = (ab)c + a(bc) 是因为我们对系数mod 2了(系数在 F_2 上),显然是不会影响是否满足结合律的。


如果 S 不满足结合律,那么随机 S^3 的一个minor,也就是 (S/2)^3 ,至少会有 \frac{1}{8} 的概率出错。


考虑 f(T) = \sum_{t \in T} f(t) ,要判它等于0,实际上等于判$S/2$里满足结合律。


我们随机了三个 S/2 里的多项式之后,可以暴力 O(n^2) 多项式乘法验证。


注意为什么随机 k 个子集会比暴力 O(n^3) 优呢?是因为我们这里的f函数可以先对前两个子集计算,然后把结果压成 O(n) 大小再和第二个进行计算。


paper里也提到这个和我们验证矩阵乘法(NOI2013day1t3)很像了。


我们要验证 \forall v, (AB - C)v = 0 ,这里也是随机之后分两步算出$ABv$。虽然这里是验证 f(v) = 0 ,但是由于一旦 f(v) \not= 0 ,那么 f(x) = f(v) 的解空间维度等于 AB - C 的零空间维度,从而至少会有 \frac{1}{2} 的概率为0。虽然也是固定一个不为0的分析,但是由于线性空间良好的性质,就不需要随机minor了(事实上如果随机minor,这里是一元的情况必须对每个元素一个一个求解,并不能获得一个很好的复杂度)。


1 - k/p approach


论文里还提到了一种Grigni’s modification,考虑直接判断生成函数 (\sum g_ix_i)(\sum g_iy_i)(\sum g_iz_i) - (\sum g_ix_i)((\sum g_iy_i)(\sum g_iz_i)) 是否为0,因为每个元素之前的系数都是一个度为3的多项式,所以只要根据Schwartz's Lemma,只要对所有 x, y, z 在$F_p$里随机就可以做到 1 - \frac{3}{p} 的概率了。


不知道为什么这放在论文的最后,读到这里的时候总有种这种简单的方法碾压了他们的做法的感觉。。。


witness identification


怎么求出一对不满足结合律的反例呢,其实也很简单,只需要每次可以求出一个minor里存在一对反例,那么每次随机minor的一个minor去检查有无反例,期望 O(\log n) 轮就可以缩小到一对,而每轮由于概率为常数,期望只需要常数次,所以总复杂度 O(n^2\log n)


Cancellative case


在这篇paper之前,判断结合律最好的复杂度只有 O(n^3) 的暴力,但是Light在1949年观察到,如果这个半群有一个生成元集合 R \subseteq S 。那么只要验证 (ar)b = a(rb), r \in R, a,b \in S 满足结合律即可(要小心对待自己的直觉,验证$R$是否满足结合律其实是不够的。我们在乘法表里随便改一个 R^2 之外的元素就可以构造反例了)。


而为什么Light的观察是正确的呢,考虑如果有 (sr)t = s(rt) ,意味着只要中间的是 R 中的元素就可以交换。


注意到要证明的其实就是 S 上的结论,我们用归纳法把 R 拓展到 RR(s(r_1r_2))t = (sr_1r_2)t = sr_1(r_2t) = s(r_1r_2t) 。(感谢tlk神教我证明qaq 我好笨啊)


基于light test,再加上满足消去律的运算一定有一个大小为 O(\log n) 的生成元集合,从而在满足消去律的情况系,可以得到一个 O(n^2\log n) 的确定性算法,也就是可以这么判断是否是群了。


这是为什么呢?其实非常简单,因为满足分配律,所以 |bA| = |A| 并且 bA \cup A = \emptyset ,从而每加入一个生成元生成的集合至少翻倍。


而事实上如果满足消去律而不满足结合律,至少会有 O(n) 组不不合法对。


固定 (a,b,c) 不合法,拆 a = stO(n) 种拆法。


abc \not= a(bc) = st(bc) = s(t(bc)) = s(tb)c = stbc = abc


从而 s, t, b, c, bc 一定会再构成一对不合法对,由于有 O(n) 种拆法所以会有 O(n) 个不合法对。


随机三元组判断就可以做到 O(n^2\log\frac{1}{\epsilon}) 的复杂度了。

文章被以下专栏收录