首页 > 其他分享 >线性基小记

线性基小记

时间:2024-11-19 11:19:04浏览次数:1  
标签:int ret -- 异或 bs 线性 qwq 小记

线性基(这里是异或线性基)是对于序列 \(a_1 ... a_n\) 满足以下条件的一个极小集合 \(\mathrm S\):

  • \(S\) 中的所有元素可以通过异或表示出 \(a\) 中的所有元素。

  • \(S\) 在满足第一个条件的情况下,集合大小最小。

进一步的,可以推出以下性质:

  • \(S\) 中任意元素的异或和不等于 \(0\)。

  • \(S\) 的大小至多为 \(\log \max{a_i}\)。

第二个性质将在插入时自然给出。

基本操作:

  • 插入:假设现在要插入的数是 \(x\)。考虑记 \(bs_i\) 是以第 \(i\) 位为最高 \(1\) 位的基底。不难发现,假如当 \(x\) 遍历到第 \(i\) 位时,且 \(x\) 的第 \(i\) 位为 \(1\),该位的 \(bs_i\) 为空,则 \(x\) 无法被表出,原因是再向下遍历则无法在更改这一位。否则 \(x\) 必须要异或上该位。若最后 \(x\) 变为 \(0\),其实就是 \(x\) 已经可以被表出,跳过即可。
qwq
void ins(int x){
	for(int i = M; i >= 0; i--){
		if(!(x & (1ll << i))) continue;
		if(!bs[i]){bs[i] = x; return;}
		x ^= bs[i];
	}
}
  • 查询最大值:假设现在要查询 \(a\) 中选出任意个数与 \(x\) 的异或最大值,从高位向低位考虑,显然后面选择的不会影响前面的,直接贪心即可。
qwq
int getmax(int x){
	int ret = x;
	for(int i = M; i >= 0; i--) ret = max(ret, ret ^ bs[i]);
	return ret;
}
  • 查询第 \(k\) 小的值:考虑类似于 \(\mathrm Trie\) 上二分的做法,首先将所有的 \(bs\) 变成任意两个都无交的形式,从高位向低位考虑,容易发现,假设这一位选择 \(1\),则排名区间就变成了 \([1, 2 ^ {i - 1}]\),否则是 \([2^{i - 1} + 1, 2^i]\)。然后二分就完了。
qwq
0	void rebuild(){
		for(int i = 0; i <= M; i++){
			for(int j = i - 1; j >= 0; j--){
				if(bs[i] & (1ll << j)) bs[i] ^= bs[j];
			}
		} tot = 0;
		for(int i = 0; i <= M; i++) if(bs[i]) rbs[++tot] = i;
	}
	int kth(int x, int k){
		int ret = x;
		for(int i = tot; i >= 1; i--){
			int sz = (1ll << i - 1);
			if(k <= sz){
				if((x & (1ll << rbs[i]))) ret ^= bs[rbs[i]];
			}
			else{
				if(!(x & (1ll << rbs[i]))) ret ^= bs[rbs[i]];
				k -= sz;
			}
		} return ret;
	}

标签:int,ret,--,异或,bs,线性,qwq,小记
From: https://www.cnblogs.com/little-corn/p/18554503

相关文章

  • 【C语言】用代码绘制线性函数包围图
    题目:绘制左边图的输出图像,函数已给出。原因分析:提示:这里填写问题的分析:例如:Handler发送消息有两种方式,分别是Handler.obtainMessage()和Handler.sendMessage(),其中obtainMessage方式当数据量过大时,由于MessageQuene大小也有限,所以当message处理不及时时,会......
  • Linear超高PSRR线性稳压器特点与应用
    Linear电源给人的印象,好像一直都是性能比较高。最近网上找到了一款他们家的超高PSRR、低噪声的线性稳压器LT3045。这颗LDO芯片非常经典,1MHz下仍有76dB的PSRR,叫人印象深刻。PSRR指标,在高分辨率高速ADC、无线和RF的应用里很关键。每一种芯片都是针对用户的某些应用而特别优化了某......
  • Wincc 7.5SP2下VBA编程批量设置变量线性标定
    继续学习wincc下面VBA编程,这个练习实现变量线性标定。在前面练习基础上做,有REAL1至REAL10共10个变量,通过VBA脚本对Real1至Real5设置线性标定。写下面的VBA脚本: SubSetTagScaleParameter()DimhmigoAshmigoDimstrTagNameAsStringDimiAsIntegerSethmigo=NewhmigoFo......
  • 港大ArcLab最新开源DEIO:第一个学习与传统非线性图优化紧密结合的单目事件惯性里程计
    原文链接:港大ArcLab最新开源DEIO:第一个学习与传统非线性图优化紧密结合的单目事件惯性里程计导读本文介绍了一种名为DEIO(DeepEventInertialOdometry)的新型单目深度事件惯性里程计框架。该方法创新性地将深度学习与传统非线性图优化相结合,通过可训练的事件束调整(e-DBA)与惯......
  • 线性码、汉明重量、汉明距离
    点个关注吧谢谢!有升学问题等可以私信一、线性码(LinearCode)定义1:qqq阶线性码CC......
  • 人工智能之机器学习线代基础——线性相关和线性无关
    线性相关(LinearlyDependent)和线性无关(LinearlyIndependent)是线性代数中描述向量组关系的概念,用于判断向量组是否可以通过线性组合生成其他向量,以及它们是否包含冗余信息。      ......
  • CF1499D The Number of Pairs 题解 线性筛
    题目链接:https://codeforces.com/problemset/problem/1499/D题目大意:给你三个整数\(c,d,x\)(\(1\lec,d,x\le10^7\)),问:存在多少对正整数对\((a,b)\)满足:\[c\cdotlcm(a,b)-d\cdotgcd(a,b)=x\]其中,\(lcm(a,b)\)表示整数\(a\)和\(b\)的最大公约数,\(gcd(a,......
  • 线性代数知识点复习——范数
    范数(Norm)是数学中的一个概念,用于度量向量、矩阵或张量的大小或长度。范数是向量空间上的一种函数,能够将向量映射为非负实数,表示向量的某种“长度”或“大小”。    ......
  • 【小记】如何将多媒体键映射为锁屏
    工作电脑为一体机。所有的USB接口都在屏幕的后面。插拔U盘极不方便。于是搜索USB小物件,看能不能通过小物件将USB的接口延长到屏幕前寻觅一番,找到一个中意的小物件——ELEKSMAKER极客桌面控制器 如上图所示,小物件有着朋克风,充满现代感。带有3个USB2.0接口,日常工作使用足够。......
  • 线性回归
    线性回归(LinearRegression)是一种简单但重要的统计和机器学习方法,用于建立目标变量(因变量)与一个或多个输入变量(自变量)之间的线性关系。它广泛应用于预测、趋势分析和因果关系研究。            实例解法使用的是基于最小二乘法公式的手动......