<学习笔记>线性基

线性基可以理解为一组集合(S={p_1, p_2,...,p_n})满足原集合(A)的任意一个子集的异或和都能在S的子集(且该子集是唯一的)中找到,且(|S|)最小, 则称S为A的线性基

线性基的大小约为(log_2max{S}),也就是说,我们可以用(O(Nlog_2M+log_2M))的效率来求出一个集合的最大异或和,最小异或和等(其中(M)(A)中最大的数)

线性基的性质: 每个数的二进制最高位各不相同

线性基的构造类型--动态构造

线性基的构造方法:我们用大小为(log_2M)的集合(S)来存储线性基,其中(S_j)表示最高位为j的线性基,我们现在插入一个数(x),每次查询(x)最高位,设最高位为(j),将x修改为(x xor S_j),如果最高位上的1无法通过其他数异或得到, 那么将(S_j)设为(x)

原理: (a xor b xor a=b) 只要能构造出x那么肯定能构造出(x xor sum) sum是原先能xor出来的某一个值

线性基的合并:假设有A, B两个线性基需要合并, 那我们只需要把B中的元素依次全部插入A中即可

参考资料:
oi-wiki:https://oi-wiki.org/math/basis/
menci:https://oi.men.ci/linear-basis-notes/

原文地址:https://www.cnblogs.com/gllonkxc/p/15247260.html