news 2026/5/1 5:02:01

有关线性基(1)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
有关线性基(1)

本篇将详细介绍基础的线性基模板

(文章非常详细,把笔者学时的每一个问题都详细解答了,如果感觉内容过于繁杂可以选择跳着看)

一:线性基及有关概念

线性相关:通俗讲,一个量a和b线性相关,则b一定可以表示为λ a

线性无关即a和b非线性相关

线性基:维护一个极长线性无关基底,假设我们要通过一些数彼此异或,来表示[1,n]范围内的所有数,我们维护的这些数就叫做线性基,它的大小是严格log级别的。这里的线性相关:假设线性基是p(一个数组),数是x,若x和p线性相关,则x可以被p中某些元素彼此异或表示。

比如现在线性基里的元素有1,2,那么3一定不在线性基里,因为3=1^2,3和线性基p线性相关,所以不在里面

二:维护线性基

即将一个元素插入线性基的插入操作。

我们维护线性基时通常不把它看做一个数组,而是把它内的所有数二进制分解一下,看成一个矩阵,比如线性基里的元素有1,2,5,我们直接把它看成一个矩阵

二进制拆位:

我们如何表示一个线性基:设线性基是p,假如x在线性基内,设x的最高位1所在位数是i,那么p[i]=x

也就是把每个数存在最高位1所在位置

而线性基中不可能出现两个数最高位1在同一位,首先我们是这么构造的,其次也有证明:

使用反证法,设x和y是线性基的元素,最高位1在第k位

设z=x^y,由于x,y最高位是k,所以z<min(x,y)

假设z是p中某些元素pi彼此异或得到的结果,那么这些pi和x,y线性相关,这与线性基的定义彼此矛盾,故假设不成立

接着是插入操作:我们把一个元素插入线性基中,我们希望这个数能为线性基贡献一个新的基底,但这个数不能和线性基p线性相关,所以我们插入的数可能和原本的这个数不相同

具体插入操作如下:

插入x,设当前遍历x的第i位

1):若x的第i位为0,直接看下一位

2):若x的第i位是1,那么:

1]:线性基p的第i位有值,那么x^=p[i],因为此时x和pi最高位1在同一位

2]:线性基p的第i位没有值,那么p[i]=x,结束插入,说明x找到了更低的最高位,直接插入即可

然后是查询最大值,我们从高到低遍历线性基p,,假设当前答案是res,

如果res的第i位是1直接跳过,因为pi的第i位也是1,而异或完会使值变得更小,因为损失了第i位,就算后面的所有位都是1,也不能弥补这一位变成0的损失

如果res的第i位是0,异或上pi,同理因为得到这一位,及时后面的位都损失了也是不亏的

【模板】线性基

代码如下:

#include<bits/stdc++.h> using namespace std; #define int long long #define _for(i,a,b) for(int i = a ; i <= b ; i ++) #define for_(i,a,b) for(int i = a ; i >= b ; i --) int n; const int maxn = 5e2 + 10; int p[maxn]; int a[maxn]; signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin >> n; _for(i , 1 , n) cin >> a[i]; _for(i , 1 , n){ int x = a[i]; for_(j , 60 , 0){//插入线性基 if((x >> j) & 1){//x第j位是1 if(p[j]) x ^= p[j];//p第j位有值 else {//p[j]没值 p[j] = x;//插入 break; } } } } int x = 0;//最大值 for_(i , 60 , 0) x = max(x,x ^ p[i]); //其实是简略写法,和文章中所说的没有区别 cout << x; return 0; }

(本篇篇幅较小,主要是方便新手入门,下一篇是详细的线性基基础应用)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 5:39:51

轻量高效!腾讯混元OCR仅1B参数实测性能超越传统OCR方案

轻量高效&#xff01;腾讯混元OCR仅1B参数实测性能超越传统OCR方案 在智能办公、跨境电商业务爆发式增长的今天&#xff0c;企业每天要处理成千上万张包含多语言文字的图片——发票、证件、商品说明、屏幕截图……传统的OCR系统却常常显得力不从心&#xff1a;部署复杂、响应迟…

作者头像 李华
网站建设 2026/4/29 6:40:53

标点符号还原准确性:中英文标点混合场景下的表现

中英文混合文档中的标点还原&#xff1a;一场被忽视的语义保卫战 在一份跨国企业的合同扫描件中&#xff0c;中文条款后突然出现一个半角句号“.”&#xff1b;一段学术论文的参考文献里&#xff0c;英文引文使用了全角逗号“&#xff0c;”&#xff1b;或是发票金额“1,000.00…

作者头像 李华
网站建设 2026/4/24 18:28:49

JAVA分块上传功能在信创环境中的适配

大文件传输系统建设方案 一、需求痛点与解决方案 作为公司技术负责人&#xff0c;针对当前大文件传输需求面临的开源组件不可靠、授权成本高、跨平台兼容性差三大核心问题&#xff0c;提出以下技术方案&#xff1a; 技术选型策略 放弃WebUploader等停更组件&#xff0c;采用自…

作者头像 李华
网站建设 2026/4/18 16:51:08

字号大小估计功能:HunyuanOCR是否能返回相对尺寸

HunyuanOCR能否理解字号&#xff1f;从排版语义到智能文档理解的跃迁 在数字化办公日益普及的今天&#xff0c;我们早已不满足于“把图片转成文字”这种基础能力。当你扫描一份PDF合同、上传一张会议PPT截图&#xff0c;或是处理一份财务报表时&#xff0c;真正困扰你的往往不是…

作者头像 李华
网站建设 2026/4/25 20:50:16

Node.js服务调用HunyuanOCR:构建RESTful OCR微服务

Node.js服务调用HunyuanOCR&#xff1a;构建RESTful OCR微服务 在智能办公、跨境文档处理和自动化报销系统日益普及的今天&#xff0c;如何快速准确地从图像中提取文字信息&#xff0c;已成为许多业务流程中的关键一环。传统的OCR方案往往依赖复杂的多阶段流水线——先检测文字…

作者头像 李华