线性基学习笔记

本文详细介绍了线性基的概念,包括矩阵性质、线性相关性、极大线性无关组及其性质,以及线性基的定义。讨论了线性基在张成集合中的作用,指出线性基可以解决按位贪心问题。

一、基础概念:

1)矩阵性质

1、结合性:(AB)C=A(BC)

2、分配率:(A+B)C=AC+BC,C(A+B)=CA+CB

一般来说,矩阵不满足交换律

2)线性相关

1、n维线性空间:将其看做一个集合,其中的每一个元素均使用n个相互独立的自由变量表示,如坐标系可看做二维线性空间

2、线性组合:百科定义很权威。粗略理解就是n维线性空间中的一个元素向量a可由一个向量集表示

3、线性相关性:对于一个n维向量元素集合S{a1,a2……,am},若存在等式a1k1*a2k2……amkm=0(k1……km不全为0),则称A线性相关,反之线性无关

4、等价向量组:对于向量组A:a1,a2,……,am、B:b1,b2,……,bn,如果A能被B线性表示且B能被A线性表示,则向量组A、B等价

等价向量组定理:若A可由B线性表示且m>n,则A线性相关

推论1:若A可由B线性表示且m<=n,则A线性无关

推论2:两个线性无关的等价向量组,包含个数相同的向量

证明:推论2可由推论1取一次反得到,推论1可由等价向量组定理得到,等价向量组定理证明:

不妨考虑这样一个矩阵 k1=a1z1+……+anzn

                                   k2=b1z1+……+bnzn

                                   ……

                                   km=m1z1+……+mmzn

m>n且存在一组解z1……zn可将k1……km表示出来,由高斯消元及矩阵的性质,求解后必然会行全零,这意味着某一项常数能被消除,再转化为向量组,显而易见~

高斯消元相关

5、极大线性无关组:

对于向量组A:a1……an,若存在一组ai……ar(r-i<n)线性无关且ai……ar+1线性相关,则称ai……ar为A的一组极大线性无关组,通俗的说,极大线性无关组ai……ar能表示向量组A中的其它任意元素且本身线性无关

ps:若A线性无关,则其极大线性无关组就是其本身

极大无关组性质:

1)向量组A的任意极大线性无关组与A等价

2)向量组A的任意两个极大线性无关组等价

推论:一个向量组A的任意两个极大线性无关组等价等大

6、向量组的秩:A的极大线性无关组的大小称为向量组A的秩,记作r(A)

性质:向量组A可由向量组B线性表示,则r(A)<=r(B)

证明:不妨设A、B均线性无关,如果A能被B线性表示且r(A)>r(B),再次结合高斯消元与矩阵相关知识,易证无解

二、线性基

前置知识:

1、张成:对于S,所有,S中所有元素任意组合后的xor和的结果所组成的集合

2、拟阵:贪心的数学基础= =一篇不错的博客

ps:其实不必纠结于拟阵理论证明,我们只需记住线性基解决的问题大都可以按位贪心(由拟阵证明)即可

3、我们将线性相关引入张成集合,对于S中的一个元素k,可由其余元素xor和得到,则张成集合S线性相关,相对的,称为线性无关。

结论:去掉k后,张成集合S不变

线性基定义:

我们称B为S的线性基,当B满足下列条件时:

1)S是B集合张成的子集

2)B线性无关

显然,一个集合的极大线性无关组,就是该集合的线性基

有了线性基之后,xor问题似乎就没那么难了

下面给出操作模板:

#define Inc(i,L,r) for(register int i=(L);i<=(r);++i)
#define Red(i,r,L) for(register int i=(r);i>=(L);--i)
#define ll long long
struct Linear_Basis{
	int cnt,flag;//flag判断是否有0 
	ll p[64],New[64]; 
	inline bool insert(ll k){//插入操作 
		Red(i,62,0){//如果不明白xor…… 
			if(!(k>>i))continue;
			if(!p[i]){p[i]=k;break;}
			k^=p[i];
		}
		return k>0;
	}
	inline void construct(){//重构线性基,在查询第k大时使用 
		Red(i,62,0)Red(j,i-1,0)if((p[i]>>j)&1)p[i]^=p[j];//根据xor性质,我们只用保留当前位上的1 
		Inc(i,0,62)if(p[i])New[cnt++]=p[i];
	}
	inline ll Query(ll kth){//查询第k大 
		if((1ll<<cnt)-1+flag<kth)return -1;//注意longlong 
		if(kth==1&&flag)return 0;
		kth-=flag;
		ll ret=0;
		Inc(i,0,cnt)if((kth>>i)&1)ret^=New[i];
		return ret;
	}
	inline ll Query_Max(){//求最大值 
		ll ret=0;
		Red(i,62,0)if((ret^p[i])>ret)ret^=p[i];//拟阵证明,按位贪心 
		return ret;
	}
};
inline void Merge(int x,int y){//将x,y线性基合并 
	Inc(i,0,62)x insert(y [i]);//暴力插入 
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值