线性基学习笔记
介绍
线性基是向量空间的一组基底。
正如平面向量的基底,空间向量的基底一样,线性空间的基底可以表示线性空间中的任意一个向量。
简单来说,线性基是一个这样的集合:
- 线性基中的元素互不相同
- 线性基中没有异或和为0的子集
- 线性基任意子集的异或和互不相同
- 线性基中每个元素的最高位互不相同
- 线性基中的元素相互异或可以得到原元素所有相互异或得到的值
构造
\(show\ you\ the\ code.\)
inline void insert(ll *A,ll w){
for(int i=60;i>=0;i--){
if(!((w>>i))) continue;
if(!A[i]){A[i]=w;break;}
w^=A[i];
}
return;
}
用途
用于解决和异或有关的相关问题。
异或最大值
和图论路径相关的:
和树论有关的:
异或种类数
统计线性基中的元素个数\(cnt\),原元素相互异或可以得出的互不相同的数的个数为\(2^{cnt}\)。
要求所选元素异或和不为0
判断待选的元素是否能插入线性基,也就是看此元素插入线性基时是否被异或成了0。
一般和贪心一起出题。
博弈论相关:
简单贪心:
异或排名
根据位数判断累加,由于我们可以求最高位为\(i\)最大的数\(w\),所以比\(w\)小的数有\(2^{cnt}\),\(cnt\)表示在\(i\)之前有多少位上线性基有值。
结论:所有不同的异或和出现次数都相同。
问一个数是否能被线性基中的元素表示出来
一位一位去异或,和插入元素差不多。
看最后是否为0。