当前位置: 首页 > news >正文

线性代数相关笔记

线性基

导入

线性基,顾名思义,就是一个包含数字最少的集合,使得原集合中的任何数都能用线性基中的元素表示。

集合中的元素满足一些性质:

  • 原集合中的任意元素都可以用线性基中的若干元素的异或和表示
  • 线性基中任意数异或和不为 0 0 0,否则不满足集合大小最小
  • 以任意顺序枚举原集合中元素,所得集合大小相同
  • 大小为 n n n 的线性基可以表示 2 n 2^n 2n 个数;若线性基中存在二进制第 i i i 位为 1 1 1 的数,则可以表示 2 n − 1 2^{n-1} 2n1 个二进制下第 i i i 位为 1 1 1 的数。

操作

插入

我们用数组 p 表示线性基,假设要插入 x x x,从高到低枚举 x x x 的二进制的每一位数字,如果 x x x 的第 i i i 位为 1 1 1 p i = 0 p_i=0 pi=0,那么令 p i = x p_i=x pi=x 并结束插入;否则,令 x^=p[i],继续枚举下一位。

void insert(int x)
{for(int i=50;i>=0;--i)if(x>>i&1){if(!p[i]) {p[i]=x;break;}else x^=p[i];}
}

求异或最大值

求原集合的子集的异或最大值,利用贪心思想。若 ans^p[i]>ans,则 ans^=p[i]

int pmax()
{int ans=0;for(int i=50;i>=0;--i)if((ans^p[i])>ans) ans^=p[i];return ans;
}

求异或最小值

分两种情况考虑:

  • 线性基大小 < < < 原集合大小:原集合中一定存在异或和为 0 0 0 的一些数,所以异或最小值为 0 0 0
  • 线性基大小 = = = 原集合大小:在线性基内求异或最小值,线性基内的最小元素与其他元素异或得到的值一定更大,所以异或最小值为线性基中最小元素。

剩的异或 k k k 小值先咕了 QwQ 本来学线性基是想过 YbtOJ 的最大异或对的,结果发现线性基是任意数的最大异或和,这一道题是一对,只能用 trie 树


练手板子题

代码如下:

#include <bits/stdc++.h>
using namespace std;
#define int long longint p[55];void insert(int x)
{for(int i=50;i>=0;--i)if(x>>i&1){if(!p[i]) {p[i]=x;break;}else x^=p[i];}
}int pmax()
{int ans=0;for(int i=50;i>=0;--i)if((ans^p[i])>ans) ans^=p[i];return ans;
}signed main()
{int n,x;cin>>n;for(int i=1;i<=n;i++) cin>>x,insert(x);cout<<pmax();return 0;
}

行列式

行列式,是一种对于矩阵的特殊形式——方阵的表示形式。所谓方阵,就是 n × n n\times n n×n的矩阵。

一个 n × n n\times n n×n 的方阵 A A A 的行列式记为 det ⁡ ( A ) \det(A) det(A) 或者 ∣ A ∣ |A| A,一个 2 × 2 2\times2 2×2 矩阵的行列式可表示如下:
det ⁡ ( a b c d ) = a d − b c \det \begin{pmatrix} a&b\\ c&d \end{pmatrix}=ad-bc det(acbd)=adbc
把一个 n n n 阶行列式中的元素 a i j a_{ij} aij 所在的第 i i i行和第 j j j列划去后,留下来的 n − 1 n-1 n1 阶行列式叫做元素 a i j a_{ij} aij 的余子式,记作 M i j M_{ij} Mij。记 A i j = ( − 1 ) i + j M i j A_{ij}=(-1)^{i+j}M_{ij} Aij=(1)i+jMij,叫做元素 a i j a_{ij} aij 的代数余子式。

一个 n × n n\times n n×n 矩阵的行列式等于其任意行(或列)的元素与对应的代数余子式乘积之和,即:
det ⁡ ( A ) = a i 1 A i 1 + ⋯ + a i n + A i n = ∑ j = 1 n a i j ( − 1 ) i + j det ⁡ ( A i j ) \det(A)=a_{i1}A_{i1}+\cdots+a_{in}+A_{in}=\sum_{j=1}^na_{ij}(-1)^{i+j}\det(A_{ij}) det(A)=ai1Ai1++ain+Ain=j=1naij(1)i+jdet(Aij)
代码实现:

int dett(int a[maxn][maxn],int n)//n为阶数
{int dett=0,k=0,h=0;if(n==1) return a[0][0];else if(n==2) return a[0][0]*a[1][1]-a[0][1]*a[1][0];else{for(int p=0;p<n;p++){for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(j==p) continue;tmp[h][k]=a[i][j],k++;if(k==n-1) h++,k=0;}dett=dett+a[0][p]*pow(-1,p)*det(tmp,n-1)}return dett;}
}

高斯消元

前置芝士

三角矩阵

上三角矩阵的对角线左下方的系数全部为 0 0 0,下三角矩阵的对角线右上方的系数全部为 0 0 0。三角矩阵可以看作是一般方阵的一种简化情形。由于带三角矩阵的矩阵方程容易求解,在解多元线性方程组时,总是将其系数矩阵通过初等变换化为三角矩阵来求解。

举个栗子,下面的矩阵 U U U 就是一个上三角矩阵。
U = [ u 1 , 1 u 1 , 2 u 1 , 3 ⋯ u 1 , n 0 u 2 , 2 u 2 , 3 ⋯ u 2 , n 0 0 ⋱ ⋱ ⋮ ⋮ ⋮ 0 ⋱ u n − 1 , n 0 0 ⋯ 0 u n , n ] U= \begin{bmatrix} u_{1,1}&u_{1,2}&u_{1,3}&\cdots&u_{1,n}\\ 0&u_{2,2}&u_{2,3}&\cdots&u_{2,n}\\ 0&0&\ddots&\ddots&\vdots\\ \vdots&\vdots&0&\ddots&u_{n-1,n}\\ 0&0&\cdots&0&u_{n,n} \end{bmatrix} U= u1,1000u1,2u2,200u1,3u2,300u1,nu2,nun1,nun,n

增广矩阵

又称扩增矩阵,就是在系数矩阵的右边添上一列,这一列是线性方程组的等号右边的值。

高斯消元

基本思想

通过一系列的加减消元运算,将方程组化为上三角矩阵。然后再逐一回代求出 x x x

实现过程

解方程:
{ 3 x 1 + 2 x 2 + x 3 = 6 2 x 1 + 2 x 2 + 2 x 3 = 4 4 x 1 − 2 x 2 − 2 x 3 = 2 \begin{cases} 3x_1+2x_2+x_3=6\\ 2x_1+2x_2+2x_3=4\\ 4x_1-2x_2-2x_3=2 \end{cases} 3x1+2x2+x3=62x1+2x2+2x3=44x12x22x3=2
我们把这个方程组写成增广矩阵的形式:

相关文章:

线性代数相关笔记

线性基 导入 线性基&#xff0c;顾名思义&#xff0c;就是一个包含数字最少的集合&#xff0c;使得原集合中的任何数都能用线性基中的元素表示。 集合中的元素满足一些性质&#xff1a; 原集合中的任意元素都可以用线性基中的若干元素的异或和表示线性基中任意数异或和不为…...

【SA8295P 源码分析 (四)】69 - Android 侧添加支持 busybox telnetd 服务

【SA8295P 源码分析】69 - Android 侧添加支持 busybox telnetd 服务 一、下载 busybox-1.36.1.tar.bz2 源码包二、编译 busybox 源码三、将编译后的 busybox 打包编入Android 镜像中系列文章汇总见:《【SA8295P 源码分析 (四)】网络模块 文章链接汇总 - 持续更新中》 本文链接…...

如何开发一个 Safari 插件

本文字数&#xff1a;2493字 预计阅读时间&#xff1a;15分钟 由于常用浏览器是Safari&#xff0c;而Safari浏览器的插件比不上Chrome&#xff0c;所以就有了自己开发常用的Safari插件的想法。 打算开发当前页面生成二维码的Extension&#xff0c;因为网络原因&#xff0c;AirD…...

n皇后问题,不用递归

注释如下&#xff1a; class Solution:def totalNQueens(self, n: int) -> int:if n < 1: # 如果 n 小于 1&#xff0c;直接返回 0return 0count 0 # 初始化解的个数为 0stack [(0, set(), set(), set())] # 初始化一个栈&#xff0c;元素为当前处理的行数、已经放…...

Verilog基础:$fopen和$fclose系统函数、任务的使用

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 $fopen和$fclose是两个用于打开和关闭文件的系统函数、任务。最初&#xff0c;在Verilog-1995标准中&#xff0c;最多只能同时打开32个文件&#xff0c;其所使用的…...

python之字典的用法

python之字典的用法 Python中的字典是一种无序、可变、可迭代的数据类型&#xff0c;它由键值对组成&#xff0c;每个键都映射到一个值。字典在Python中被视为可变对象&#xff0c;这意味着我们可以随时更新、添加或删除字典中的键值对。 以下是一些关于Python字典的基本用法&a…...

Leetcode1971. 寻找图中是否存在路径

Every day a Leetcode 题目来源&#xff1a;1971. 寻找图中是否存在路径 解法1&#xff1a;并查集 并查集介绍&#xff1a;并查集详解 代码&#xff1a; /** lc appleetcode.cn id1971 langcpp** [1971] 寻找图中是否存在路径*/// lc codestart class UnionFind {vector&…...

程序可以创建多少个用户界面对象?

有人提到这样一个问题&#xff1a;”一个程序最多可以注册多少个窗口类?” 问题的答案不是一个具体的数字。因为大多数用户界面对象都来自一个共享的内存池&#xff0c;我们称之为”桌面堆内存”。尽管我们可以计算一个最大的理论值&#xff0c;但是在实际的场景中&#xff0…...

业绩不俗,毛利率下滑,股价接连下跌,片仔癀将向何处去?

撰稿|行星 来源|贝多财经 10月16日&#xff0c;中药龙头企业漳州片仔癀药业股份有限公司&#xff08;600436.SH&#xff0c;下称“片仔癀”&#xff09;发布截至9月30日的2023年前三季度业绩报告。发布财报后&#xff0c;片仔癀的股价多日下跌。 10月17日、18日、19日和20日…...

云安全—docker容器镜像检测

0x00 前言 docker镜像是属于整个云原生的重要基石之一&#xff0c;如果从镜像开始就没有安全性的话&#xff0c;那么整个云原生也就没有任何的安全性可言。所以镜像检测技术就成为了一个比较重要的点&#xff0c;本篇将通过研究docker镜像工具来整体分析风险以及应对方案。 市…...

JDBC相关记录

JDBC&#xff1a;Java DadaBase Connectivity 即Java语言连接数据库。 本质&#xff1a;JDBC是SUN公司制定的一套接口&#xff08;interface&#xff09;。 作用&#xff1a;不同的数据库有自己独特设计原理&#xff0c;JDBC的可以让Java程序员关注业务本身&#xff0c;而不需要…...

Nginx的基本介绍 安装 配置文件 日志

一、Nginx介绍二、nginx的优点三、多路复用1、I/O multiplexing 多并发 四、nginx内部技术架构五、安装NginxNginx部署-yum安装获取Nginx的yum源yum安装Nginx浏览器访问 编译安装Nginx安装编译环境安装依赖环境创建nginx用户安装nginx启动nginx实现nginx开机自启&#xff08;脚…...

docker部署nginx并设置挂载

前言&#xff1a; 最近在学习docker和nginx&#xff0c;因为容器在运行过程中&#xff0c;相关的配置文件及日志都会存在容器内。对容器以来较高&#xff0c;当容器不存在的时候。所有的文件也就都没有了。并且当需要查看日志&#xff0c;修改配置文件的时候必须进入到容器内部…...

MAC如何在根目录创建文件

在这之前先明确一下啥是根目录。 打开终端&#xff0c;输入cd /&#xff0c;然后输入 ls 查看根目录下有哪些文件 可以看到 usr、etc、opt 这些文件的地方才叫根目录&#xff0c;而不是以用户命名&#xff0c;可以看到音乐、应用程序、影片、桌面的地方哈 介绍一种叫做软连接…...

某全球领先的芯片供应商:优化数据跨网交换流程,提高安全管控能力

1、客户介绍 某全球领先的芯片供应商&#xff0c;成立于2005年&#xff0c;总部设于北京&#xff0c;在国内上海、深圳、合肥等地及国外多个国家和地区均设有分支机构和办事处&#xff0c;致力于为客户提供更优质、便捷的服务。 2、建设背景 该公司基于网络安全管理的需求&am…...

自然语言处理---文本预处理概述

自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是计算机科学与语言学中关注于计算机与人类语言间转换的领域。其主要应用于&#xff1a;语音助手、机器翻译、搜索引擎、智能问答等。 文本预处理概述 文本语料在输送给模型前一般需要一…...

GCC编译器 什么是宏? 标识符和关键字

一.GCC是什么&#xff1f; GCC是用于编译C语言和其它语言的开源软件。 全称是 GNU Compiler Collection&#xff0c;意思是GNU编译器集和。 支持多种操作系统和硬件平台。二.GCC的作用 GCC的作用是将源码转换为可执行的文件&#xff0c;使之可以在计算机上运行。三.GCC编译c文…...

【GESP】2023年06月图形化三级 -- 自幂数判断

文章目录 自幂数判断【题目描述】【输入描述】【输出描述】【参考答案】其他测试用例 自幂数判断 【题目描述】 自幂数是指N位数各位数字N次方之和是本身&#xff0c;如153是3位数&#xff0c;其每位数的3次方之和是153本身&#xff0c;因此153是自幂数&#xff0c;1634是4位数…...

MySQL常见面试题

一、存储引擎相关 &#xff08;1&#xff09;MySQL 支持哪些存储引擎? MySQL支持多种存储引擎&#xff0c;比如InnoDB&#xff0c;MyISAM&#xff0c; MySQL大于等于5.5之后&#xff0c;默认存储引擎是InnoDB &#xff08;2&#xff09;InnoDB 和 MyISAM 有什么区别? InnoD…...

前端HTML CSS JS风格规范

本文代码规范来自HTML/CSS代码开发规范文档 文件命名规范 使用小写字母、数字和下划线组成文件名。 避免使用特殊字符和空格。 使用语义化的命名&#xff0c;能够清晰地表达出文件的功能或内容。 目录结构规范 使用约定俗成的目录结构&#xff0c;如&#xff1a;src/compon…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...