线性空间与线性基(待整修,现在是史,OIwiki上的史。)
各代数结构定义
群
对于一个集合 \(G\) 和运算 \(\times\),若其满足:封闭性、结合律,具有单位元,对于每个元素都有逆元,则称呼 \((G,\times)\) 为一个群。
阿贝尔群,或交换群是运算满足交换律的群的称呼。半群是运算满足封闭性、结合律加上一个集合的代数结构。
域
对于一个集合 \(K\) 和两个运算 \(+\) 和 \(\times\),满足:
\((K,+)\) 是交换群,并记其单位元为 \(0_K\)。
\((K-\{0_K\},\times)\) 是交换群。
\(\times\) 对 \(+\) 有分配律。
则称 \((K,+,\times)\) 为域。
线性空间
给定域 \((K,+,\times)\) 与某集合 \(V\) 与两种运算 \(\oplus\) 和 \(\cdot\)。
\((V,\oplus)\) 应为阿贝尔群,\(\oplus\) 叫向量加法(实际上不要求 \(V\) 是向量集合)。
\(\cdot\) 称为数乘,\(\cdot:K\cdot V\mapsto V\),记为 \(kv\)。
\(V\) 中元素称为向量,\(K\) 中元素称为标量。称呼 \(K\) 的两种运算为标量加法、标量乘法。
若满足数乘对向量加法、标量加法分配律,且:
数乘结合律:对于 \(a,b\in K,(a\times b)\cdot\mathbf{u}=a\cdot(b\cdot u)\)
标量乘法单位元:对于 \(K\) 的乘法单位元 \(1\),有:\(1\cdot\mathbf{u}=\mathbf{u}\)
则称 \((V,+,\cdot,K)\) 为一线性空间。
不是很严谨地说,标量乘法对应着一种「缩放」,基域 \(K\) 中的元素就代表着缩放的「比例」,向量加法对应「叠加」。同时,\(K\) 中的元素还代表着向量的「坐标」的取值范围。——OI wiki
运算统称为线性运算。
性质:(以下设零向量为 \(\theta\))
- \(\theta\) 唯一
- \(\forall\alpha\in V,-\alpha\) 唯一(这里减法定义为 \(-\oplus\))
- \(\exists 0\in K,\forall\alpha\in V,\) 有 \(0\cdot\alpha=\theta\)
- \(\forall k\in K\), 有 \(k\cdot\theta=\theta\)
- \(\forall\alpha\in V,(-1)\cdot\alpha=-\alpha\)
- 无零因子:\(\forall\alpha\in V,k\in K,k\cdot\alpha=\theta\implies k=0\lor\alpha=\theta\)
- 加法的消去律:\(\forall\alpha,\beta,\gamma\in V,\alpha\oplus\beta=\alpha+\gamma\oplus\beta=\gamma\)
下面,由于可以判断是哪种乘法和哪种加法,统一使用 \(+\) 和 \(\times\)。
线性无关、有关
定义
称 \(a_1,a_2,\dots ,a_n\in V\) 为 \(V\) 的一个向量组。
在此基础上,对于 \(k_1,k_2,\dots,k_n\in K\),称 \(\displaystyle\sum_{i=1}^n k_ia_i\) 为该向量组的一个线性组合;
若向量 \(\beta\in V\) 可以表示为向量组 \(a_1,a_2,\dots,a_n\) 的一个线性组合,则称 \(\beta\) 能被向量组 \(a_1,a_2,\dots,a_n\) 线性表出。
对于 \(k_1,k_2,\dots,k_n\in K\), 若向量组 \(a_1,a_2,\dots,a_n\) 满足\(\displaystyle\sum_{i=1}^nk_ia_i=\theta\iff k_i=0, i=1,2,\dots,n,\) 则称向量组\(a_1,a_2,\dots,a_n\) 线性无关,否则称向量组 \(a_1,a_2,\dots,a_n\) 线性相关。
性质
称两向量组等价,当且仅当一个向量组的所有元素都可以被另外一个向量组线性表出。等价关系是满足传递性的。符号为 \(\cong\)。
替换定理:设线性无关向量组 \(a_1,a_2,\dots,a_n\) 可以由向量组 \(b_1,b_2,\dots,b_m\) 线性表出,则 \(n\le m\),且存在一排列 \(\sigma_1,\sigma_2,\dots,\sigma_m\),使得向量组 \(a_1,a_2,\dots,a_n,b_{\sigma_{n+1}},b_{\sigma_{n+2}},\dots,b_{\sigma_{m}}\) 等价于向量组 \(b_1,b_2,\dots,b_m\)。
证明考虑对 \(n\) 归纳。
可以由替换定理证明,两个等价的线性无关向量组必含有相同个数的向量。这是 OI 线性基的基本原理之一。
有几条性质:
若向量组的一部分线性相关,则向量组线性相关。若向量组线性无关,则其任意非空部分均线性无关。
含 \(\theta\) 的向量组线性相关。
向量组线性相关当且仅当向量组的某个向量可以由其余向量线性表出。
此基础上可以定义极大线性无关向量组。
容易证明,任意极大线性无关向量组的大小相同。记作原向量组的秩。等价的向量组的秩相等。
线性变换
一个线性空间到另一个线性空间的映射。我们可以认为这也就是矩阵乘法。
线性空间的变体
线性包 span
对于线性空间 \((V,+,\cdot,K),
\left\{v=\sum_{i=1}^nk_ia_i:a_i\in V,k_i\in K,i=1,2,\dots,n\right\}\) 也构成一线性空间,称为由向量组 \(a_1,a_2,\dots,a_n\) 张成 的线性空间(或 线性包),记作\(\operatorname{span}\{a_1,a_2,\dots,a_n\}\)。
线性子空间
对线性空间 \((V,+,\cdot,K),\) 若代数系统 \((V_1,+,\cdot,K)\) 满足:
- \(\varnothing\ne V_1\)
- \(V_1\subseteq V\)
- \(V_1\) 关于 \(+,\cdot\) 构成 \(K\) 上的线性空间
则称 \(V_1\) 为 \(V\) 的线性子空间,简称子空间,记作 \(V_1\leq V\)。同样有真线性子空间 \(V_1<V\)。
由阿贝尔群的定义,线性空间 \(V\) 的非空子集 \(V_1\) 是其线性子空间当且仅当线性运算在 \(V_1\) 上封闭。
线性空间的和(交)、并、积
对于定义在同一域上的两个线性空间 \(V_1,V_2\):
容易验证,\(V_1\cap V_2\) 是 \(V_1,V_2\) 的线性子空间,称为 \(V_1\) 和 \(V_2\) 的并。
两个线性空间的和 \(V=V_1+V_2\) 满足 \(V=\{a+b|a\in V_1,b\in V_2\}\)。可以证明,\(V\) 是包含 \(V_1\cap V_2\) 的最小线性子空间。
\(V_1\) 与 \(V_2\) 的 直积 \(V_1\times V_2\) 定义为二者的笛卡儿积关于如下的加法和数乘构成 \(K\) 上的线性空间:
\(+:(V_1\times V_2)\times(V_1\times V_2)\mapsto V_1\times V_2; ((u_1,v_1),(u_2,v_2))\to (u_1+u_2,v_1+v_2)\)
\(\cdot:\Bbb{P}\times(V_1\times V_2)\mapsto V_1\times V_2; (k,(u,v))\to (ku,kv)\)
和与并满足交换、结合律。
变种分配律:令 \(V_1,V_2,V_3\) 是关于 \(K\) 的线性空间,线性空间的交与并有如下关系:
V_1+(V_2\cap V_3)\subseteq (V_1+V_2)\cap (V_1+V_3)\]
对于线性包,显然有:
\]
线性空间同构
设 \(V,V'\) 为定义在同一域上的线性空间且存在同一数乘、向量加法,如果存在双射 \(\sigma:V\mapsto V'\),则称 \(V,V'\) 同构。
比方说可以证明,实数域和复数域不同构。
定义基:线性空间 \(V\) 的某一极大线性无关向量组 \(S\),则称 \(S\) 为 \(V\) 的一个基。维数是基中的向量数,记为 \(\dim V\)。在 OI 中,我们一般研究有限维数的情况。
同构具有性质:同一域上的两线性空间同构当且仅当其维数相等。
所以,\(K^n\) 与 \(K\) 上的 \(n\) 维数线性空间同构。
线性基
性质
上所述基也称线性基。
设一线性空间维数为 \(n\),则有如下(不显然)性质:
\(V\) 中任一向量均可被 \(S=\{a_1,a_2,\dots,a_n\}\) 线性表出 \(\iff\) \(S\) 是 \(V\) 的线性基。
证明:取 \(V\) 的一组线性基 \(T=\{b_1,b_2,\dots,b_n\}\)。
则 \(T\) 可被 \(S\) 线性表出。则:
\]
即证明结论。
同样,任意线性无关组都可以插入一些线性空间中向量使得其变为一组基。
有子集维数公式:\(\dim V_1+\dim V_2=\dim(V_1+V_2)+\dim(V_1\cap V_2)\)
证明不难,略。
异或线性基
若给定线性空间在域 \(\mathbb{Z}_2^n\) 上,则称为异或线性基。
对于异或线性基,插入一个数,可以容易地判断这个数是否可以被表出:某个数在线性基中的形式是第 \(i\) 位为 \(1\),前面为 \(0\),后面随便。
inline void ins(int x){
for(int i=60;i>=0;i--){
if(x&(1ll<<i)){
if(a[i])x^=a[i];
else{
a[i]=x;
return;
}
}
}
}
复杂度是 \(O(n\log V)\) 的。
实数线性基
若给定线性空间在域 \(\mathbb{R}^n\) 上,则称为实数线性基。
对于实数线性基,直接一个一个插入高斯消元,因为任意极大线性无关向量组等价且大小相等。
构造原理:选了这个作为第 \(i\) 维向量的基,就用它去干剩下的未插入的向量。
如果是整数,那么就可以避免 double:用大质数去模。
本题要求线性基代价和最小,那么可以放在一起高斯消元。(动态可以同余最短路?)
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=19660813;
int n,m,len=0,s=0;
struct qsy{
int v[505],w;
bool operator <(const qsy &b)const{return w<b.w;}
}a[505];
int q[505];
int qp(int a,int b){
if(b==0)return 1;
int T=qp(a,b>>1);T=T*T%mod;
return b%2?T*a%mod:T;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)cin>>a[i].v[j];
}
for(int i=1;i<=n;i++)cin>>a[i].w;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!a[i].v[j])continue;
if(!q[j]){
q[j]=i;++len;s+=a[i].w;
break;
}
int d=a[i].v[j]*qp(a[q[j]].v[j],mod-2)%mod;
for(int k=j;k<=m;k++)a[i].v[k]=(a[i].v[k]-d*a[q[j]].v[k]%mod+mod)%mod;
}
}
cout<<len<<" "<<s<<endl;
return 0;
}
当然,不管哪种线性基,都满足线性基的线性代数性质。
线性基求交
设 \(A,B\) 是两线性基,\(V_A=span(A),V_B=span(B)\)。
容易证明,\(V_C=V_A\cap V_B\) 是线性空间,\(C\) 是其线性基,称 \(A,B\) 线性基交为 \(C\)。
设存在一线性基 \(W=\{b\mid b\in B,b\in V_A\}\)。
其需要满足:\(V_{B-W}\cap V_A=\{0\}\)。
下证明:\(V_W=V_A\cap V_B\)。
显然 \(V_W\subseteq V_A\cap V_B\)。只需证明:\(\forall u\in V_A\cap V_B,u\in V_W\)。
反证;设 \(u\not\in V_W,u\in V_A\cap V_B\)。
设 \(\oplus \{b_i\}=u,b_i\in B\)。分为两部分 \(\alpha=\{b_i\}\cap W,\beta=\{b_i\}\cap(B-W)\),\(\oplus \alpha=s,\oplus \beta=t\)。
则 \(s\in V_W,t\in V_{B-W},u=s\oplus t\)。故 \(t=u\oplus s\in V_A\),因为 \(u\in V_A,s\in V_W\subseteq V_A\).
而 \(V_{B-W}\cap V_A=\{0\}\),故 \(t=0,u=s\in V_W\),矛盾。
所以:\(W\) 是待求的线性基交。
接下来介绍求线性基交的算法。
依次遍历 \(b_i\),若 \(b_i\in span(V_A\cup\{b_1,b_2\dots,b_{i-1}\})\),则设其为 \(\alpha\oplus \beta\),其中 \(\alpha\in V_A,\beta\in span(\{b_1,b_2,\dots,b_{i-1}\})\)。令 \(b_i\oplus \beta\to b_i\),否则什么都不做。
最后求出 \(W=\{b_i\}\cap V_A\) 即可。容易验证,\(V_{B-W}\cap V_A=\{0\}\),因此这是正确的。
线性基合并
是 trival 的,把一边的元素插进另一边即可。
线性空间与线性基(待整修,现在是史,OIwiki上的史。)的更多相关文章
- 【HDU 3949】 XOR (线性基,高斯消元)
XOR Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- BZOJ_2115 [Wc2011] Xor 【图上线性基】
一.题目 [Wc2011] Xor 二.分析 比较有意思的一题,这里也学到一个结论:$1$到$N$的任意一条路径异或和,可以是一个任意一条$1$到$N$的异或和与图中一些环的异或和组合得到.因为一个数 ...
- BZOJ CF388D. Fox and Perfect Sets [线性基 数位DP]
CF388D. Fox and Perfect Sets 题意:求最大元素\(le n\)的线性空间的个数 给神题跪了 orz 容易想到 每个线性基对应唯一的线性空间,我们可以统计满足条件的对应空间不 ...
- 高斯消元 & 线性基【学习笔记】
高斯消元 & 线性基 本来说不写了,但还是写点吧 [update 2017-02-18]现在发现真的有好多需要思考的地方,网上很多代码感觉都是错误的,虽然题目通过了 [update 2017- ...
- 【UOJ453】【集训队作业2018】围绕着我们的圆环 线性基 DP
题目大意 有一个 \(n\times k\) 的 01矩阵 \(C\),求有多少个 \(n\times m\) 的矩阵 \(A\) 和 \(m\times k\) 的矩阵 \(B\),满足 \(A\t ...
- 【题解】kth异或和/魔改版线性基
[题解]魔改版线性基 魔改版线性基解决此类问题. 联系线性空间的性质,我们直接可以构造出这样的基: \[ 100000 \\ 010000 \\ 000010 \\ 000001 \] 使得每个基的最 ...
- ACM线性基学习笔记
https://www.cnblogs.com/31415926535x/p/11260897.html 概述 最近的几场多校出现了好几次线性基的题目,,会想起之前在尝试西安区域赛的一道区间异或和最大 ...
- BZOJ4004 [JLOI2015]装备购买[贪心+线性基+高消]
一个物品可以被其他物品表出,说明另外的每个物品看成矩阵的一个行向量可以表出该物品代表的行向量. 于是构造矩阵,求最多选多少个物品,就是尽可能用已有的物品去表示,相当于去消去一些没必要物品, 类似于xo ...
- BZOJ 2844 albus就是要第一个出场 ——高斯消元 线性基
[题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i ...
- BZOJ 2115 [Wc2011] Xor ——线性基
[题目分析] 显然,一个路径走过两边是不需要计算的,所以我么找到一条1-n的路径,然后向该异或值不断异或简单环即可. 但是找出所有简单环是相当复杂的,我们只需要dfs一遍,找出所有的环路即可,因为所有 ...
随机推荐
- Golang网络模型netpoll源码解析
0.引言 在学习完了Socket编程的基础知识.Linux系统提供的I/O多路复用的实现以及Golang的GMP调度模型之后,我们进而学习Golang的网络模型--netpoll.本文将从为什么需要使 ...
- 关于被static修饰还可序列化的问题
今天为了验证一下被static修饰的变量到底可不可以序列化,出现了以下的情况: 然后找到一条评论,豁然开朗 把序列化的内容注释掉,直接从序列化文件读取对象,就发现没有获取到
- 题解 ICPC 2019 SH 区域赛 F 树上简单问题
题解 ICPC 2019 SH 区域赛 F 树上简单问题 CF的Gym里没找着 牛客的题目链接 首先这个题多测非常SB, 每次都要清空, 需要特别注意. 树剖应该都会吧, Defad之后也会发博客讲解 ...
- 生产环境BigDecimal用错了,已哭晕在厕所。。。
大家好,我是苏三,又跟大家见面了. 前言 在日常开发中,很多小伙伴喜欢用 BigDecimal 来处理精确计算,比如钱.分数.比例啥的. 理论上,它比 double 或 float 更精确,但如果你用 ...
- Postman 汉化教程
Postman 汉化教程(Postman中文版) 迷恋自留地 postman官网下载地址 https://www.postman.com/downloads/ postman汉化包 https://g ...
- One API 替代品 Chat Nio 安装与使用教程
有这样一位初中生,他在初一下学期发起了一个项目,专门用来给他的朋友们免费体验 GPT 模型. 到了八年级的暑假,他决定把这个项目开源出来,并且正式命名为 Chat Nio,同时项目的定位为一站式 LL ...
- Day01 Markdown 学习笔记
Day01 Markdown 学习笔记 1.标题 n级标题 = n个"#" + 空格 + 标题名称 (最多6个) 2.文本 Hello World Hello World ...
- docker-compose安装mongo
创建目录 [root@localhost tools]# mkdir -p /root/tools/mongo/{data,conf,init} 创建初始化用户脚本 [root@localhost m ...
- 记一次 .NET某工业视觉软件 崩溃分析
一:背景 1. 讲故事 前两天给训练营里的一位学员分析了一个dump,学员因为弄了一整天也没找到祸根,被我一下子弄出来了,极度想看看我是怎么分析的?由于在微信上不能一言两语表尽,干脆写一篇文章出来详细 ...
- IDEA导入他人的项目时提示“project sdk is not defined”的解决办法
IDEA导入他人的项目时提示"project sdk is not defined"的解决办法 1.在IDEA中,在有问题的项目上单击鼠标右键,然后选择"Open Mod ...