news 2026/1/27 4:27:00

有关线性基(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/1/19 0:13:16

SROIE场景文字识别任务对比:与顶尖模型差距分析

SROIE场景文字识别任务对比&#xff1a;与顶尖模型差距分析 在企业数字化转型加速的今天&#xff0c;一张扫描收据如何快速变成财务系统中的结构化数据&#xff1f;这看似简单的一步&#xff0c;背后却是OCR技术多年演进的核心战场。尤其是SROIE&#xff08;Scanned Receipts O…

作者头像 李华
网站建设 2026/1/19 0:12:59

弱监督学习应用可能:HunyuanOCR是否依赖大量精细标注

HunyuanOCR是否依赖大量精细标注&#xff1f;从端到端架构看弱监督学习的落地可能 在智能文档处理日益普及的今天&#xff0c;企业对OCR技术的需求早已超越“识别文字”这一基础功能。无论是银行审核客户身份证件、电商平台解析发票信息&#xff0c;还是跨国公司处理多语言合同…

作者头像 李华
网站建设 2026/1/25 22:53:44

Burp Suite 插件 | 利用AI为复杂的 HTTP 请求自动生成 Fuzz 字典

工具介绍 Burp AI Fuzzer一个基于 AI 驱动的 Burp Suite 渗透测试辅助插件&#xff0c;旨在利用大语言模型&#xff08;LLM&#xff09;的上下文理解能力&#xff0c;为复杂的 HTTP 请求自动生成针对性的 Fuzz 字典。工具功能 智能字典生成&#xff1a;支持 OpenAI (GPT-3.5/4)…

作者头像 李华
网站建设 2026/1/19 0:12:24

Google Cloud Vision API比较:谁更适合中文场景?

HunyuanOCR&#xff1a;为何它在中文OCR场景中脱颖而出&#xff1f; 在文档数字化浪潮席卷各行各业的今天&#xff0c;一张模糊的发票、一份手写的申请表、一页排版复杂的合同&#xff0c;都可能成为自动化流程中的“拦路虎”。尤其是面对中文特有的竖排文本、手写体混杂、多栏…

作者头像 李华
网站建设 2026/1/26 21:30:09

离线运行能力验证:无网络环境下HunyuanOCR仍可工作

离线运行能力验证&#xff1a;无网络环境下HunyuanOCR仍可工作 在政务档案数字化现场&#xff0c;一位工作人员将一份涉密文件放入扫描仪&#xff0c;轻点鼠标上传至本地系统——不到三秒&#xff0c;文字内容已完整提取并结构化归档。整个过程没有联网请求、没有云端交互&…

作者头像 李华
网站建设 2026/1/26 4:21:25

腾讯云COS事件通知:结合HunyuanOCR打造智能存储方案

腾讯云COS事件通知&#xff1a;结合HunyuanOCR打造智能存储方案 在企业文档处理的日常中&#xff0c;你是否曾遇到这样的场景&#xff1a;财务人员每天要手动录入上百张发票信息&#xff0c;跨国合同因语言混杂难以快速归档&#xff0c;或是法律文件中的关键条款被埋没在PDF扫描…

作者头像 李华