线性代数之线性基

news2024/11/14 18:29:07

在谈论线性基之前,先介绍什么是基向量.

根据高中数学,一个二维直角平面坐标系中的所有向量都可以只用(0, 1)和(1, 0)合成.那么(0, 1)和(1, 0)就是基向量,所有基向量能合成的所有向量被称为基向量的张成空间.

在二维空间中,有没有其他的向量能作为基向量呢?答案是肯定的.

 上图的两个向量的张成跟(0, 1)和(1, 0)的张成空间是一样的.

注意到,只要两个向量不共线,其张成都跟(0, 1)和(1, 0)的张成空间一样,即都可以作为二维空间的基向量.

把问题扩展到n维空间,设其基向量为(p1, p2, p3...., pn),如果其中一个向量pi可以由其他的基向量张成,那么这个向量pi一定不是基向量,结论显然,读者可以自证.

这样,一个向量空间的所有基向量被称为这个空间的.用通俗一点的语言就是,一个空间中任何向量,用这些基向量就能够合成了,而合成这个空间的所有向量至少需要这些基向量.

一个向量空间的不一定是唯一的.

如果现在我们有一个大小为n的正整数集合,我们想要找出一些数字可以异或出这个集合的所有数字.我们就可以用类似于上面的思路去解决这个问题.把这n个数看成向量,我们要找到一组能够表示这所有n个数.而这组基就是线性基.

根据上文,我们可以得出一些

线性基的性质:

1.若线性基能够表示一个数x,那么表示这个x的基向量的方案是唯一的,因为如果能找到两组不同的基向量表示出同一个数,其中一组基向量就没有存在的必要.

2.线性基不能表示出0,因为x ^ x = 0,说明线性基中至少存在两组不同的基向量能够同时表示出x,根据1,是不可能的.

线性基的构造:

假设当前的线性基为T,里面已经构造出若干个基向量,分别是T[1], T[2], T[3]....

我们插入某个数x,从最高位开始,如果x的第i位为1,我们尝试用T[i]去分解这个数x,如果T[i]的第i位为0,那么说明x没办法被张成,我们把x作为T[i],完成该次插入;那如果可以分解掉,即T[i]的第i位为1,那么我们就用T[i]分解x,即将x变成x ^ T[i],我们看下一位即可,这样将x一步步分解,最后完成构造.

上面的过程有点抽象,可以看下面的代码,最后构造出来的线性基是大概长这样的:

T[8] = 100100100

T[7] = 010010100

T[6] = 001010110

T[5] = 000110101

T[4] = 000000000

T[3] = 000001010

T[2] = 000000101

T[1] = 000000010

T[0] = 000000001

诶,我们注意到T[4] = 0,刚才不是说线性基不能表示出0吗,怎么T[4] = 0,其实T[4] = 0说明原序列中可能会出现一些数异或起来等于0的情况,但是线性基里面一定不可以出现这种情况,所以T[4] = 0是不算在线性基里面的, 不难推出,如果一个数插入失败了, 说明产生了序列中某些数异或起来等于0.

另外注意到,如果T[i]是线性基,其最高位的1就是第i位.

线性基求max:

根据线性基的构造,我们尝试尽可能大的线性基去合成这个数.所以我们从最高位开始枚举线性基贪心合成即可.

线性基求min:

如果存在异或和为0的情况,直接输出0即可,否则,线性基中最小的基向量就是答案,找到并直接输出即可.

线性基求第k小:

因为线性基张成每个数的方案都是唯一的,所以线性基一共能张成2 ^ t个数(每个数选或者不选),t是线性基的大小.

那么是不是我们直接用二进制分解的方法来选择线性基的数就行了?其实不是,因为根据刚才我们构造的方法,线性基中的数可能不是最小的数(注意上文提到一个向量空间的基可能不是唯一的),为什么不是最小的数就不能表示出第k小呢?那是因为这样选出来的数异或起来可能不是单调递增的.我们怎么在不改变线性基的张成下,让线性基里面的数最小呢?这里有一个贪心的做法,对于T[i],我们尽可能让其低位变成0,于是我们拿T[j](j < i)去消除掉第j位上的1(因为如果T[j]在线性基里面的话,第j位是1),也就是令T[i] = T[i] ^ T[j],最后得到的T肯定都是最小的.因为我们是拿线性基里面的数互相异或,所以不会改变其张成空间.

我们按照以上方法对线性基进行重构以后,就能进行二进制分解了.

线性基合并:

如果当前要合并A,B两个线性基,我们只需要枚举B中的数然后插入A即可,正确性显然,当然反过来做也可以.

补充:

可能会有读者疑惑,在用线性基求min的时候,里面的数可能不是最小值,为什么不用重构线性基,原因是,假如最小的线性基为T[i] = 00001010,其低位可能有1,但是已经没有更小的数可以消除掉低位的1了,所以线性基中的最小数一定就是最小值.

板子:

template<class T>struct Basic{
    #define MAXSIZE 62
    T f[MAXSIZE + 5], g[MAXSIZE + 5];
    int flag, sz;
    //flag 记录插入时是否有不能放入的数
    void clear() {
        memset(f, 0, sizeof f);
        flag = sz = 0;
    }
    void insert(T x){
        for (int i = MAXSIZE; i >= 0; --i) {
            if (!(x >> i & 1)) continue;
            if(!f[i]) {
            	f[i] = x;
            	++sz;
            	return;
            }
        	x ^= f[i];
        }
        ++flag;
    }
    T queryMax(T res) {
        for (int i = MAXSIZE; i >= 0; --i) {
        	res = max(res ^ f[i], res);
        }
        return res;
    }
    T queryMin(){
		if (flag) {
			return 0;
		}
		for (int i = 0; i <= MAXSIZE; ++i) {
			if (f[i]) {
				return f[i];
			}
		}
		return -1;
    }
    void rebuild(){
        for (int i = 0; i <= MAXSIZE; ++i) {
        	g[i] = f[i];
        }
        for (int i = 0; i <= MAXSIZE; ++i) {
        	for (int j = 0; j <= i - 1; ++j) {
        		if (g[i] >> j & 1) {
        			g[i] ^= g[j];
        		}
        	}
        }
    }
    T queryNum(T k){
    //must build g before use it
        if (flag) {
        	--k;
        }
        if (k == 0) {
        	return 0;
        }
        T res = 0;
        for (int i = 0; i <= MAXSIZE; ++i) {
        	if (g[i]) {
        		if (k & 1) {
        			res ^= g[i];
        		}
        		k >>= 1;
        	}
        }
        return k ? -1 : res;
    }
    Basic merge(Basic A,  Basic B) {
    	for (int i = 0; i <= MAXSIZE; ++i) {
			A.insert(B.f[i]);
    	}
    	return A;
    }
};
Basic<ll> G;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/196301.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle事務簡述

簡述本文主要介紹內容有事務的隔離級別&#xff0c;oracle支持的事務隔離級別&#xff0c;事務的提交與回滾&#xff0c;保存點內容事務的ACID特征介紹事務繞不過事務的ACID四個特征&#xff0c;這裡簡單回顧以下原子性&#xff08;Atomicity&#xff09;事務的執行要麼全部成功…

广义霍夫变换和模板匹配的不同

简述说到霍夫变换&#xff0c;做图像的知道经典霍夫变换最常用于检测规则曲线&#xff0c;如直线、圆、椭圆等。而广义霍夫变换是为了检出那些无法写出解析式的不规则形状&#xff0c;虽然在深度学习大行其道的时代&#xff0c;霍夫变换也还是有很多应用场景&#xff0c;另外广…

2023年黑马Java入门到精通教程--面向对象

推荐教程&#xff1a;java零基础入门到精通 面向对象编程的例子 设计类&#xff0c;创建对象并使用 1. 类和对象是什么&#xff1f; 类&#xff1a;是共同特征的描述(设计图)&#xff1b;对象&#xff1a;是真实存在的具体实例。 2. 如何设计类&#xff1f; 3. 如何创建对象…

CISP-PTE-Windows2003教程

为方便后续操作&#xff0c;建议和kali在同一网段。 获取到靶机IP后&#xff0c;扫描端口&#xff0c;1433是sqlserver的 测出用户名admin&#xff0c;但是密码爆破失败 扫描目录发现配置文件 配置文件中找到数据库的用户名和密码 使用Microsoft SQL Server Studio连接&#x…

MySQL从入门到精通(第0篇):全程有动画演示,适合入门学习

B站地址 文章目录一、MySQL的系统框架1. 连接池1.1 连接模块1.2 连接池2. SQL接口、SQL解析器、SQL优化器3. 存储引擎二、MySQL数据写入原理三、MySQL存储结构1. 使用InnoDB创建表2. 详述ibd文件中的存储结构2.1 页的数据连续存储2.2 行的结构2.3 区的结构2.4 组的结构2.5 段的…

剑指 Offer 33. 二叉搜索树的后序遍历序列

题目 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true&#xff0c;否则返回 false。假设输入的数组的任意两个数字都互不相同。 思路 二叉搜索树的特点是&#xff1a;左子树的值 < 根节点 < 右子树的值后序遍历的顺序是…

【逐步剖C】第三章-数组

一、一维数组 1. 一维数组的定义与使用 &#xff08;1&#xff09;数组的简单概念&#xff1a;一组具有相同类型的元素的集合 &#xff08;2&#xff09;数组的创建&#xff1a; 格式&#xff1a;类型名数组名[数组大小] 需要注意的是&#xff1a;对多数情况而言&#xff0c;…

# Vue中的Mixin混入

Vue中的Mixin混入 将组件的公共逻辑或者配置提取出来&#xff0c;哪个组件需要用到时&#xff0c;直接将提取的这部分混入到组件内部即可。这样既可以减少代码冗余度&#xff0c;也可以让后期维护起来更加容易。 1. 什么是Mixin&#xff1f; 混入 (mixin) 混入 (mixin) 将组…

数据库分类

关系型与非关系型 关系数据库 MySQL、MariaDB&#xff08;MySQL的代替品&#xff09;、 Percona Server&#xff08;MySQL的代替品&#xff09;、PostgreSQL、 Microsoft Access、Google Fusion Tables、SQLite、DB2、FileMaker、Oracle、SQL Server、INFORMIX、Sybase、dBASE…

阿里云中间件2024届校园招聘

【团队介绍】 阿里云云原生中间件团队负责分布式软件基础设施&#xff0c;为阿里云上万家企业提供如微服务引擎、服务网格、消息服务、分布式事务等分布式基础服务&#xff0c;加速企业上云的进程和创新速度。同时&#xff0c;云原生中间件团队也服务着阿里集团众多核心业务和…

智能指针(三)—— shared_ptr 循环引用问题

shared_ptr 作为智能指针&#xff0c;可以满足大多数场景&#xff0c;对于一些特殊情况&#xff0c;可能会引发循环引用问题。 目录 1、循环引用案例分析 (1) 案例介绍 (2) 原因分析 2、weak_ptr 解决循环引用 1、循环引用案例分析 (1) 案例介绍 我们通过实际案例来了解…

网络编程 1 相关基础概念 及 请求、响应类 定义

目录 一、HTTP基本概念 1、HTTP是什么 2、HTTP客户端是什么 3、HTTP消息结构 4、服务器响应信息 二、相关概念 1、网址 URL 2、IP地址 3、域名 4、域名与IP关系 5、域名解析 6、DNS 三、设计请求、响应类基本数据结构 1、请求类定义 2、响应类定义 一、HTTP基本概…

AD引脚交换

19年写过一篇AD交换引脚的文章&#xff0c;原文请查阅AD18调PIN方法及注意事项&#xff0c;该方法是手动更改焊盘的网络&#xff0c;如果是对于少量的或者零散的引脚交换还好&#xff0c;但遇到像FPGA、CPLD或者端子这种大量引脚需要调PIN的情况还是一个一个手动更改就很费时了…

java 微服务 RabbitMQ高级 消息可靠性问题 死信交换机 延迟队列 惰性队列

消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1.消息可靠性问题&#xff08;面试很会问&#xff09; 针对这些问题&#xff0c;RabbitMQ分别给出了解决方案&#xff1a; 生产者确认机制 mq持久化 消费者确认机制 失败重试机制 下面我们就通过案…

基于Android的办公用品管理平台的设计与实现

需求信息&#xff1a; 教师端&#xff1a; &#xff08;1&#xff09;注册登录&#xff1a;教师通过输入自己的工号和密码登录系统&#xff1b; &#xff08;2&#xff09;信息修改&#xff1a;教师可以完善个人信息&#xff08;院系、职务等&#xff09;&#xff1b; &#xf…

DMS感知方案前装赛道「排位」,2025年750万辆市场争夺

对舱内驾驶员、乘客的关怀&#xff0c;正在成为车企新一轮体验升级的关键突破口。在2023年CES展上&#xff0c;类似的产品方案也成为汽车行业的焦点。 比如&#xff0c;一家名为Myant的创新材料技术公司&#xff0c;在今年CES期间推出了一款将传感器和执行器&#xff08;与编织…

深度解刨性能测试工具Locust

An open source load testing tool. 一个开源性能测试工具。 define user behaviour with python code, and swarm your system with millions of simultaneous users. 使用Python代码来定义用户行为。用它可以模拟百万计的并发用户访问你的系统。 如果你常关注我的博客&…

2022尚硅谷SSM框架跟学(十)SSM整合

2022尚硅谷SSM框架跟学 十 SSM整合四、SSM整合4.1ContextLoaderListener(1).创建Maven Module(2).导入依赖(3).配置web.xml(4).创建SpringMVC的配置文件并配置(5).创建Spring的配置文件并配置(6).创建组件(7).创建页面(8).访问测试功能4.2准备工作(1).创建Maven Module(2).导入…

【2023亲测可用】JS 获取电脑本地IP 和 电脑网络IP(外网IP|公网IP)

1、了解&#xff1a;电脑本地的IP地址&#xff08;内网IP&#xff09;和电脑本机在网络上的IP地址&#xff08;外网IP|公网IP&#xff09; 在运行窗口输入“cmd”&#xff0c;在弹出的界面里输入“ipconfig/all”。弹出的数据中&#xff0c;IPv4地址&#xff0c;就是电脑本地的…

使用Hadoop分析气象数据(附代码)

刚学了Hadoop&#xff0c;在网上找完整的分析使用过程进行练手观看。本文数据和方法均来自于大佬的使用Hadoop分析气象数据完整版&#xff08;附带完整代码&#xff09;&#xff08;侵删&#xff09; 文章目录1.获取数据1.1下载数据1.2 数据格式1.3 合并数据2.MapReduce处理数据…