博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

<学习笔记>线性基

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

线性基的大小约为\(log_2\max\{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/

posted @ 2021-09-09 15:36  gllonkxc  阅读(46)  评论(0编辑  收藏  举报