news 2026/8/29 5:50:12

有关线性基(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/8/27 8:19:44

实时快速卷积——交叠相加、交叠存储

如果输入信号 特别特别长&#xff08;比如一段 1 小时的音频&#xff09;&#xff0c;或者信号是实时源源不断进来的&#xff08;比如直播语音&#xff09;&#xff0c;你就不能等信号全部录完再做一次超大的 FFT。这就好比你要吃一根无限长的面条&#xff0c;你不能一口气吞下…

作者头像 李华
网站建设 2026/8/27 18:29:54

WaterGasUtility水务燃气账单处理:HunyuanOCR节省人力成本

WaterGasUtility水务燃气账单处理&#xff1a;HunyuanOCR节省人力成本 在城市公共服务的后台&#xff0c;每天都有成千上万张模糊、倾斜甚至带反光的账单照片被上传——来自居民随手一拍的水费通知单、燃气表读数截图&#xff0c;或是老旧社区手写的缴费凭证。这些图像五花八门…

作者头像 李华
网站建设 2026/8/21 21:16:32

xhEditor导入Latex公式生成图片

企业网站Word粘贴与导入功能解决方案 项目概述与技术需求 作为山西IT行业的.NET工程师&#xff0c;我们近期接到一个企业网站后台管理系统的升级需求&#xff0c;主要目标是实现Word内容一键粘贴和文档导入功能。这个功能将极大提升客户的内容发布效率&#xff0c;特别是对于…

作者头像 李华
网站建设 2026/8/24 13:54:36

Open Neural Network Exchange在HunyuanOCR中的应用潜力

ONNX赋能HunyuanOCR&#xff1a;轻量化多模态OCR的工程化跃迁 在AI模型日益复杂的今天&#xff0c;一个现实问题始终困扰着工业界&#xff1a;如何让实验室里训练出的强大模型&#xff0c;真正高效、稳定地跑在千差万别的生产环境中&#xff1f;尤其是在OCR这类对延迟敏感、部…

作者头像 李华
网站建设 2026/8/21 21:16:46

AWS S3 + Lambda 架构迁移:海外用户运行HunyuanOCR参考

AWS S3 Lambda 架构迁移&#xff1a;海外用户运行HunyuanOCR参考 在跨境电商、跨国企业文档处理日益频繁的今天&#xff0c;一个常见的挑战浮出水面&#xff1a;如何让分布在东京、伦敦或圣保罗的用户上传一张发票或身份证后&#xff0c;几秒钟内就能看到结构化识别结果&#…

作者头像 李华
网站建设 2026/8/27 22:10:04

手机号码自动提取:隐私信息识别的安全边界讨论

手机号自动提取&#xff1a;当OCR能力越界时&#xff0c;我们如何守住隐私防线&#xff1f; 在今天的企业服务流程中&#xff0c;一张营业执照上传后不到两秒&#xff0c;系统就精准标出“联系电话&#xff1a;138*1234”——这样的场景早已不稀奇。背后支撑这一效率的&#x…

作者头像 李华