首页 > 其他分享 >线性基学习笔记

线性基学习笔记

时间:2022-10-31 21:11:36浏览次数:32  
标签:基中 int 位置 笔记 学习 异或 线性 oplus

线性基

概念:

线性基就是一组基(啊说通俗一点点就是一组数字),这一组基相互进行异或操作能够表示出给定原集合的所有异或和,我们一般选择最简单的一组。

可用于每一个亦或和的排名以及每个排名对应的异或和。

构建

线性基的构建相当的简单,对于每次给定的一个数 a,对于线性基从大到小考虑,设当前考虑的位置为 \(i\) ,如果 \(a\) 的第 \(i\) 位是 \(1\) ,进行如下操作:

  • 如果第 \(i\) 个位置已经被占数字 \(b\) 了,我们让 \(a=a \oplus b\) ,然后继续考虑下一个位置。
  • 如果第 \(i\) 个位置没有被占领,那么让 \(a\) 占领这个位置,然后跳出循环。

考虑这样做为什么是正确的。

假设线性基原有数字 \(a\) ,对于待插入的数字 \(b\) 。

  • 如果 \(b\) 没有异或上 \(a\) ,那么两个数字在线性基中都存在,正确性显然。
  • 如果 \(b\) 异或上了 \(a\) ,也就是线性基中存在数字 \(c=a \oplus b\) ,那么 \(b=a \oplus c,a\oplus b =c\)

推广到多个也是正确的。

代码如下

inline void Insert(LL v) {
	for(int i=62;i>=0;i--)
		if(v>>i & 1) {
			if(!a[i]) { a[i]=v; return ; } 
			else v^=a[i];
		}
}

简化

上述方法构造出来的线性基可以进一步进行简化,我们简化的目的,就是让每一位最多只在线性基中一个位置上为 \(1\) ,这样就可以消除彼此之间的干扰,做与排名有关的工作。

正确性同上

代码如下

inline void Build() {
	for(int i=0;i<=62;i++)
		if(a[i]) 
			for(int j=i+1;j<=62;j++) if(a[j]>>i & 1) a[j]^=a[i];
	for(int i=0;i<=62;i++) ans^=a[i];
}

求排名

简化之后,每一位至多只会在线性基中的一个位置上为 \(1\) ,且位置已经排好了序,每个位置的数我们都可以选择异或上它或者不这么做,想想就跟二进制数非常有关,如果排名 \(k\) 的从大到小第 \(i\) 位为 \(1\) 的话,我们就异或上线性基从大到小第 \(i\) 个位置的数。注意特别考虑下 \(0\) 即可。

inline int Qry(int v) {
	int rk=0;
	for(int i=0;i<=idx;i++)
		if(v>>o[i] & 1) rk+=1<<i;
	return ++idx, rk;
}

标签:基中,int,位置,笔记,学习,异或,线性,oplus
From: https://www.cnblogs.com/oscaryangzj/p/16845808.html

相关文章

  • SpringMVC笔记
    目录一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖3、配置web.xm......
  • 程序员修炼之道第四章读书笔记与感悟
               程序员修炼之道第四章读书笔记与感悟程和其他工程技术一样,是一项充满细节的工作,追踪这些细节需要专注。且要能持续地作出大大小小的改进......
  • 《程序员修炼之道:从小工到专家》阅读笔记4
    如果你自己找不到答案,就去找出能找到答案的人。不要把问题搁在那里。与他人交谈可以帮助你建立人际网络,而因为在这个过程中找到了其他不相关问题的解决方案,你也许还会让自......
  • 2022.10.31python学习第二天
    python集合(数组)1.列表:是一种有序和可更改的集合,允许重复的成员   列表用 []来编号  可通过索引号来访问列表项  ......
  • 程序员修炼之道:从小工到专家读书笔记(复制)
    其实对于我们步入大学以后才接触到编程的人来说,我们没有基础,更没有稳固的知识储备,这更是考验我们能力的时期,我们在大学的学习过后可能会成为哪种高不成低不就的中手,需要高......
  • 2022_CMU15445_lab0笔记(Trie)
    预备工作环境我在windowswsl2中使用docker,docker是编译环境,wsl是编码环境,用共享目录的形式将docker目录和wsl2关联,用vscode编码剩下的环境配置直接参考https://gi......
  • 机器学习 之 朴素贝叶斯(Naive Bayesian Model)文本算法的精确率
    目录​​0、推荐​​​​1、背景​​​​2、效果图​​​​3、本次实验整体流程​​​​4、源代码​​​​6、知识点普及​​​​6.1朴素贝叶斯优点​​​​6.2朴素贝叶斯......
  • 10月份读书笔记
    读书笔记3纯文本的威力:优点:可读性远大于二进制,且不依赖特定的应用解码,因此不会过时。为了增加纯文本可读性,应该使用能够理解的词语。另外纯文本可由任何应用读取,因此适合......
  • 机器学习 之 K近邻(K-NearestNeighbor)文本算法的精确率
    目录​​0、推荐​​​​1、背景​​​​2、效果图​​​​3、本次实验整体流程​​​​4、这里不用词向量,而是用TF-IDF预处理后的向量​​​​5、源代码​​​​6、知识点......
  • 机器学习 之 sklearn中的支持向量机(SupportVectorMachine)文本算法的精确率
    目录​​0、推荐​​​​1、背景​​​​2、效果图​​​​3、本次实验整体流程​​​​4、这里用词向量,而不是TF-IDF预处理后的向量​​​​5、源代码​​​​6、知识点普......