线性基求交与正交线性基
花大把时间学了这两个东西,很有意思!
Orz
FWT 学习自:link。
拓展阅读:link。
约定
\(\operatorname{rank}(A)\) 表示线性基 \(A\) 的向量个数。
\(\operatorname{span}(A)\) 表示线性基 \(A\) 的张成空间,其大小为 \(2^{\operatorname{rank}(A)}\)(对应每个向量选不选),注意包含 \(0\)。
线性基求交
有线性基 \(B_1,B_2\),记它们张成的空间分别为 \(V_1,V_2\),求 \(V_1\cap V_2\) 的一组基。
引理:令 \(W=B_2\cap V_1\),若 \((B_2-W)\cup B_1\) 线性无关,则 \(W\) 是 \(V_1\cap V_2\) 的一组基。
证明:\(W\) 中向量显然线性无关。\(\operatorname{span}(W)\) 显然是 \(V_1\cap V_2\) 的子空间,那要说明 \(\operatorname{span}(W)=V_1\cap V_2\),就只需要说明不存在向量 \(v\in V_1\cap V_2, v\notin \operatorname{span}(W)\)。反证,假设存在,则 \(v=s\oplus t,s\in\operatorname{span}(W),t\in\operatorname{span}(B_2-W),t\neq\vec0\)。由于 \(v\in V_1\cap V_2,s\in\operatorname{span}(W),\operatorname{span}(W)\subseteq V_1\cap V_2\),那么 \(v,s\in V_1\),由异或性质又有 \(t=v\oplus s\),于是 \(t\in V_1\)。我们又知道 \(t\in B_2-W\),那把两个空间中分别拼成 \(t\) 的向量拼到一起就线性相关了。
思路:给 \(V_2\) 换一组基 \(B_2'\),令 \(W'=B_2'\cap V_1\),要使 \((B_2'-W')\cup B_1\) 线性无关,那么 \(W'\) 就是答案。
做法:
我们不建 \(B_2'\),而是维护线性基 \(X,Y\),增量地添加 \(B_2\) 中的元素,每次添加一个元素,始终保持 \(X\subseteq V_1\)、\(Y\) 线性无关、实际添加的元素合起来(\(X\cup(Y-B_1)\))是 \(V_2\) 的一组基。即 \(X\) 作 \(W'\),\(Y\) 作 \((B_2'-W')\cup B_1\),最后答案即为 \(X\)。
对于元素 \(x\),我们尝试用 \(Y\) 表示它,若失败则插入 \(Y\);否则 \(x=s\oplus t,s\in\operatorname{span}(B_1),t\in\operatorname{span}(Y-B_1)\),将 \(s\) 插入 \(X\)。注意到这样使三个条件都得到了满足。
怎么求 \(s\)?维护 \(Y\) 中每个向量的组成部分里,\(B_1\) 中向量的异或和即可。
时间复杂度 \(O(d^2)\),\(d\) 为维度数。
正交线性基
异或空间下的向量加法:\(x+y=x\oplus y\)。
异或空间下的向量点乘:\(x\cdot y=\operatorname{popcount}(x\&y)\bmod2\),即对位相乘再相加,由于数域(存疑)的原因要 \(\bmod2\)。
这里点乘对加法有分配率。FWT 的贡献系数 \(c(x,y)=(-1)^{x\cdot y}\)。我们要求 \(c(x,y)\) 对 \(\oplus\) 有分配率:\(c(i,j)c(i,k)=c(i,j\oplus k)\),即点乘对加法的分配率:\(i\cdot j+i\cdot k=i\cdot(j+k)\),拆位容易验证。
考虑异或卷积时的逐项相乘,\(F*G\)(异或卷积),\(F\) 中某一位置 \(j\) 贡献到位置 \(i\) 的系数为 \(c(i,j)\),而 \(G\) 中某一位置 \(k\) 贡献到位置 \(i\) 的系数为 \(c(i,k)\),那么新系数为 \(c(i,j)c(i,k)=c(i,j\oplus k)\),也就是 \(j\oplus k\) 贡献到 \(i\) 的系数。点乘对加法的分配率正是在这里发挥作用。
故集合幂级数的指数相当于向量,而异或卷积就是向量加法的卷积。
正交:向量 \(x,y\) 正交定义为 \(x\cdot y=0\)。
正交线性基:线性基 \(A\) 的正交线性基记为 \(A^{\perp}\),满足 \(\operatorname{span}(A)\) 和 \(\operatorname{span}(A^\perp)\) 互为正交补空间(找到异或空间中和 \(\operatorname{span}(A)\) 中所有向量正交的所有向量,作为 \(\operatorname{span}(A^\perp)\),它的一组基是 \(A^\perp\)),等价于 \(\operatorname{rank}(A)+\operatorname{rank}(A^\perp)=d\)(\(d\) 是异或空间的维度数)且 \(A\) 中向量与 \(A^\perp\) 中向量两两正交。(存疑)
另有 \((A^\perp)^\perp=A\),之后的结论都可以用它加以转化。
一个形象的理解(在洛谷评论区看到的):三维欧氏空间,\(A\) 是平面的一组基,而 \(A^\perp\) 是法向量的一组基(就是法向量)。(不知道我理解对没)
构造正交线性基:先对原线性基高斯消元,使得每个“关键位”上仅有一个 \(1\)。要求 \(A^\perp\) 的关键位即原来的所有非关键位,于是我们对每个新关键位构一个向量。对于位置 \(i\),先有 \(2^i\)。再要满足正交的限制,于是对于 \(A\) 中在关键位 \(j\) 的每个向量,若第 \(i\) 位为 \(1\),就让新向量或上 \(2^j\)。由于高消,这样就能满足所有正交限制。将 \(A\) 的向量存储在最高 \(1\) 处,那显然只有 \(j>i\) 才能更新 \(i\),于是将 \(A^\perp\) 的向量存储在最低 \(1\) 处。再考虑 \(A^\perp\) 是否线性无关:由于关键位 \(i\) 上的向量除了第 \(i\) 位,其他 \(1\) 都是从 \(A\) 的关键位(\(A^\perp\) 的非关键位)贡献过来的,所以 \(A^\perp\) 的每个关键位都只有一个 \(1\)(相当于消好了元),故线性无关。
LB Fennec(LB A) {
A.Bd();
LB B; B.Init();
for(int i = 0; i <= m - 1; ++ i) { // m - 1, not 52
if(A.a[i]) continue;
B.a[i] = (1ll << i);
for(int j = i + 1; j <= m - 1; ++ j) if(A.a[j] >> i & 1) B.a[i] |= (1ll << j); // m - 1, 52
}
return B;
}
(很乐意称之为 Fennec's Algorithm!)
点值(FWT)意义
对于线性基 \(A\),搞一个集合幂级数 \(F(z)=z^x[x\in\operatorname{span}(A)]\)。
结论:\(\forall x,[z^x]FWT(F)\) 等于 \(0\) 或 \(2^{\operatorname{rank}(A)}\),且 \(x\in\operatorname{span}(A^\perp)\) 等价于 \([z^x]FWT(F)=2^{\operatorname{rank}(A)}\)。
证明:
由于封闭性,注意到 \(\operatorname{span}(A)\) 中一个数和 \(\operatorname{span}(A)\) 中所有数异或起来仍会得到 \(\operatorname{span}(A)\),所以有 \(F*F=F\cdot2^{\operatorname{rank}(A)}\)。
两边同时 FWT,数乘显然可以提出去,于是有 \(FWT(F)\times FWT(F)=FWT(F)\cdot2^{\operatorname{rank}(A)}\),左边的 \(\times\) 表示点值对位相乘。
提取系数,\(([z^x]FWT(F))^2=([z^x]FWT(F))\cdot2^{\operatorname{rank}(A)}\),解得 \([z^x]FWT(F)= 0\) 或 \(2^{\operatorname{rank}(A)}\)。
由于 \([z^x]FWT(F)=\sum_{y\in\operatorname{span}(A)}c(x,y),c(x,y)=(-1)^{x\cdot y},|\operatorname{span}(A)|=2^{\operatorname{rank}(A)}\),所以结论的后半段成立。
推论:\([x\in\operatorname{span}(A^\perp)]={1\over|\operatorname{span}(A)|}\sum_{y\in\operatorname{span}(A)}(-1)^{x\cdot y}\)。互换 \(A,A^\perp\) 亦然。又由于 \(\operatorname{rank}(A)+\operatorname{rank}(A^\perp)=d\),于是可以折半分治(实质上是根号分治,看 \(A,A^\perp\) 哪个更小),暴力枚举张成空间中的所有向量。
线性基求交
很能感性理解对吧,我还没太懂证明,先咕了。
时间复杂度也是 \(O(d^2)\)。
2025.6.27
浙公网安备 33010602011771号