前言

我看网络上没有什么非常系统的教学,可能是我太菜了吧,现在才学,做个记录给自己看。

简略介绍

一个数集能两两异或,能表出许多新的数。

线性基是一个集合,能够在记录最少的数的基础上,表示出一个等价的异或集合。+

常用来解决最大异或子集问题。

下文假设 \(L\) 为值域最大值在二进制下的位数。

构造方法 & 解决问题

插入

bool insert(ll val) {
fd(i, L, 0)
if (val >> i & 1)) {
if (!b[i]) { // b[i] 是记录线性基的数组
b[i] = val;
break;
}
val ^= b[i];
}
return val;
}

如果说 \(\text{val}\) 能被表出,那么它一定会在最后变成 \(0\) 。否则,我们认定下标 \(i\) 的位置放置的数的二进制下第 \(i\) 位一定是 \(1\)。并将它插入。

不难发现,一个插入的数被填进第 \(i\) 位时,其更高位一定被全部异或 \(0\) ,故 \(i\) 是它的最高位 \(1\) 的位置。记住这个性质,会在下面使用。

插入一个数复杂度是 \(O(L)\) 的。

最大异或子集

根据上面的性质,我们从高位贪心地考虑,希望能够尽量让高位的 \(1\) 能够出现。

ll mx() {
ll ret=0;
fd(i, L, 0)
if((ret ^ b[i]) > ret)
ret ^= b[i];
return ret;
}

\(O(L)\)。

合并两个线性基

直接把一个线性基中的元素插入另一个,\(O(L^2)\) 。

求第 \(k\) 小能被表出元素

我们改造这个线性基,使得每一位相互独立。类似高斯消元。从低位到高位消。

void rebuild() {
fo(i, 1, L)
fo(j, 1, i)
if(d[i] >> (j - 1) & 1)
d[i] ^= d[j - 1];
}
ll k_th(ll k) {
// 如果算上零的话需要有特判
if(k == 1 && tot < n) return 0;//特判一下,假如k=1,并且原来的序列可以异或出0,就要返回0,tot表示线性基中的元素个数,n表示序列长度
if(tot < n) --k;//类似上面,去掉0的情况,因为线性基中只能异或出不为0的解
// 记得先 rebuild
ll ret = 0;
fo(i, 1, L)
if(d[i]) {
if(k & 1) ret ^= d[i];
k >>= 1;
}
return ret;
}

顺便一提,实际上 \(\text{rebuild}\) 之后的线性基是完全等价的,可以正常做其他操作。

删除

在线的做法太复杂了一般不考不是很优美,直接说离线吧。

在线性基的每一个位置维护一个最晚插入时间 \(t\) ,那么插入的时候

FOR i=L~0
如果 目前这一位线性基为空
则将目前这一位的线性基附为 (v1,t1)
否则:
将目前这一位的线性基记为 (v2,t2)
如果 t2<t1:
将目前这一位的线性基替换为 (v1,t1)
v2^=v1
用(v2,t2)插入下一位线性基
否则:
v1^=v2
用(v1,t1)插入下一位线性基

在查询的时候只需要看 \(t \ge t_0\) 的位置就好了。

线性基(Linear Basis)学习笔记的更多相关文章

  1. LDA(线性判别分类器)学习笔记

    Linear Discriminant Analysis(线性判别分类器)是对费舍尔的线性鉴别方法(FLD)的归纳,属于监督学习的方法. LDA的基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达 ...

  2. ACM线性基学习笔记

    https://www.cnblogs.com/31415926535x/p/11260897.html 概述 最近的几场多校出现了好几次线性基的题目,,会想起之前在尝试西安区域赛的一道区间异或和最大 ...

  3. 高斯消元 & 线性基【学习笔记】

    高斯消元 & 线性基 本来说不写了,但还是写点吧 [update 2017-02-18]现在发现真的有好多需要思考的地方,网上很多代码感觉都是错误的,虽然题目通过了 [update 2017- ...

  4. 「线性基」学习笔记and乱口胡总结

    还以为是什么非常高大上的东西花了1h不到就学好了 线性基 线性基可以在\(O(nlogx)\)的时间内计算出\(n\)个数的最大异或和(不需要相邻). 上述中\(x\)表示的最大的数. 如何实现 定义 ...

  5. 洛谷P3389 高斯消元 / 高斯消元+线性基学习笔记

    高斯消元 其实开始只是想搞下线性基,,,后来发现线性基和高斯消元的关系挺密切就一块儿在这儿写了好了QwQ 先港高斯消元趴? 这个算法并不难理解啊?就会矩阵运算就过去了鸭,,, 算了都专门为此写个题解还 ...

  6. [JLOI2015]装备购买 题解 / 实数线性基学习笔记

    题目链接 看这道题之前,以为线性基只是支持异或的操作... 那么,我认为这道题体现出了线性基的本质: 就是说如何用最小的一个集合去表示所有出现的装备. 我们假设已经会使用线性基了,那么对于这道题该怎么 ...

  7. Duilib学习笔记《06》— 窗体基类WindowImpBase

    在前面的例子中我们发现,窗口都是继承CWindowWnd.INotifyUI,然后重载相关函数去实现.显然,我们发现窗口的创建流程实际上都是差不多的,主要只是在OnCreate加载的配置文件不同等等… ...

  8. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78516 ...

  9. GIT学习笔记(5):变基

    GIT学习笔记(5):变基rebase 变基 引入变基 在Git中整合来自不同分支的修改主要有两种方法:merge以及rebase. 整合分支最容易的方法是merge,他会把两个分支的最新快照以及两者 ...

随机推荐

  1. oracle 执行计划的获取方法

    1.用explain plan for来获取执行计划 explain plan for <sql>; select * from table(dbms_xplan.display()); ...

  2. shell神器curl命令的用法 curl用法实例笔记

    shell神器curl命令的用法举例,如下: ##基本用法(配合sed/awk/grep) $curl http://www.jquerycn.cn ##下载保存 $curl http://www.j ...

  3. 3.3 rust HashMap

    The type HashMap<K, V> stores a mapping of keys of type K to values of type V. It does this vi ...

  4. 侵入式&非侵入式

    侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如:Struts框架 非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hibernate框架 / Spring ...

  5. VueAPI 2 (生命周期钩子函数)

    所有的生命周期钩子自动绑定 this 上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周期方法. beforeCreate 在实例初始化之后,此时还不 ...

  6. 【Java 8】Stream通过reduce()方法合并流为一条数据示例

    在本页中,我们将提供 Java 8 Stream reduce()示例. Stream reduce()对流的元素执行缩减.它使用恒等式和累加器函数进行归约. 在并行处理中,我们可以将合并器函数作为附 ...

  7. 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-上篇(详解教程)

    1.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...

  8. 开发中的PR和MR

    GitLab的是Pull Request缩写.GitHub则是Merge Request也就是MR. 当项目下载后进行更改并提交,每次过程算一次PR,一般会加入管理员审核,通过才能合并到master主 ...

  9. 车载以太网第二弹|测试之实锤-1000BASE-T1物理层PMA测试实践

    背景 100BASE-T1方兴未艾,国内外OEM量产车型纷至沓来:为了满足高带宽的应用场景需求(如图像.雷达等数据传输),1000BASE-T1将至已至,如大众MEB平台采用1000BASE-T1总线 ...

  10. RabbitMQ,RocketMQ,Kafka 消息模型对比分析

    消息模型 消息队列的演进 消息队列模型 发布订阅模型 RabbitMQ的消息模型 交换器的类型 direct topic fanout headers Kafka的消息模型 RocketMQ的消息模型 ...