您的位置:首页 > 其它

关于线性基的一丢丢理解

2018-03-16 20:45 176 查看

线性基

有趣的东西

在某次考试时人人都切了一道题时才发现我没学过线性基。。。

是什么

我感觉它就是一个类似于向量基底的东西

线性基中的元素任选几个异或起来是可以表达出原数组中的所有的值的,并且不能搞出其它的数

性质

线性基无论怎么选集合,只要是非空的,异或起来一定不是00

线性基二进制最高位互不相同

线性基中元素互相异或,异或集合不变

线性基异或出原数组的异或方案唯一

满的线性基可以表示出所有正整数,准确来说是22的长度次方减11

求法

首先线性基中的一个元素a[i]a[i]的二进制最高位为11,并且是第ii位

(以下所有都是二进制下讨论的)

不断原数组插入数xx

从高往低枚举位数

如果这个数的第ii位为11,并且a[i]a[i]为空

这一位没有就补嘛,所以a[i]=xa[i]=x并且breakbreak

否则,这一位有,那就减去嘛

所以x xor=a[i]x xor=a[i]

一个数要么被插入,要么中途为00

合并

暴力一个一个丢到另一个中

查询存在性

一个数是否能被线性基表示出来

只要执行插入类似的操作,中途为00则是

查询最值

最小值就是最小的那个

最大值:

从高位开始枚举,如果异或后变大,就异或

kk小值

根据线性基二进制最高位互不相同的性质

可以得到一个方法

我们要将线性基改造成每一位相互独立

如果i<ji<j,a[j]a[j]的第ii位是11,就将a[j]a[j]异或上a[i]a[i]

那么就只有a[i]a[i]的第ii位为11

查询的时候将kk二进制拆分,对于11的位,就异或上对应的线性基

最终得出的答案就是kk小值

emmm...emmm...这我也不知道为什么

然后看一下这篇博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: