线性基学习笔记

线性基学习笔记

前言: 即西安区域赛A爆炸以后,觉得高斯消元这东西的没学好。耐下性子来读了些东西,总结如下

概述

基(basis)是线性代数中的一个概念,它是描述、刻画向量空间的基本工具。而在现行的 OI 题目中,通常在利用基在异或空间中的一些特殊性质来解决题目,而这一类题目所涉及的知识点被称作「线性基」。

预备知识

这里有一些线性代数的基本知识,以便更好的理解基的概念。

向量空间(vector space)

向量空间 - 维基百科

定义 (F,V,+,) 向量空间(vector space),其中 F 为域,V 为集合, V 中元素称为向量,+ 为向量加法, 为标量乘法,且运算满足 8 条公理(见维基百科)。

线性无关(linearly independent)

线性无关 - 维基百科

对于向量空间中 V n 个元素的向量组 (v1,,vn) ,存在不全为 0 的数 aiF,满足

a1v1+a2v2++anvn=0

则称这 n 个向量线性相关(linearly dependent),否则称为线性无关(linearly independent)

线性组合(linear combination)

线性组合 - 维基百科

对于向量空间中 V n 个元素的向量组 (v1,,vn) ,其线性组合(linear combination)是如下形式的向量

a1v1+a2v2++anvn

其中 a1,,anF

一组向量线性无关 没有向量可用有限个其他向量的线性组合所表示

张成(span)

对于向量空间中 V n 个元素的向量组 (v1,,vn) ,其所有线性组合所构成的集合称为 (v1,,vn) 张成(span),记为 span(v1,,vn)

基(basis)

基(线性代数)

若向量空间 V 中向量组 B 既是线性无关的又可以张成 V ,则称其为 V基(basis)

B 中的元素称为基向量。如果基中元素个数有限,就称向量空间为有限维向量空间,将元素的个数称作向量空间的维数。

性质

B 是向量空间 V 的基。则 B 具有以下性质:

  1. V B 的极小生成集,就是说只有 B 能张成 V ,而它的任何真子集都不张成全部的向量空间。
  2. B V 中线性无关向量的极大集合,就是说 B V 中是线性无关集合,而且 V 中没有其他线性无关集合包含它作为真子集。
  3. V 中所有的向量都可以按唯一的方式表达为 B中向量的线性组合。

第三点尤其重要,感性的理解,基就是向量空间中的一个子集,它可以通过唯一的线性组合,来张成向量空间中所有的向量,这样就可以大大的缩小我们向量空间的大小。

线性相关性引理(Linear Dependent Lemma)

如果 (v1,,vn) V 中是线性相关的,并且 v10,则有至少一个 j{2,,m} 使得下列成立:

  1. vjspan(v1,,vj1)
  2. 如果从 (v1,,vn) 去掉第 j 项,则剩余向量组的张成仍然等于 span(v1,,vn)

证明: (v1,,vn) V 中是线性相关的,并且 v10,则有不全为 0 a1,,anF,使得

a1v1++amvm=0

a2,a3,,an 不会全为 0 (因为 v10)。设 j {2,,m} 中使得 aj0 的最大者,那么

vj=a1ajv1aj1ajvj1

这就有 (1) 成立。

为了证明 (2) ,设 uspan(v1,,vn) ,则存在 c1,,cnF ,使得

u=c1v1++cnvn

在上面的等式中,可以用之前的等式右边来代替 vj 。这样 u 包含于从 (v0,,vn) 去掉第 j 项的张成,因而 (2) 成立。

ACM 中的线性基

异或运算下的基

求法

对于数 a0,a1,,an ,将 ai 的二进制表示 (bmb0)2 看作一个向量 ai=(bm,,b0) ,为了叙述上的方便,下文称向量 ai 的第 j 位为 bj

向量组 a1,,an 可以张成一个向量集合 span(a1,,an) ,加上我们的异或运算和乘法运算(显然满足 8 条公理),即可形成一个向量空间 V=({0,1},span(a1,,an),,)

我们考虑求出向量空间 V 的一个基 B,从 B=(a1,,an) 开始。

第 1 步:如果 a1=0 ,则从 B 中去掉 a1 ,否则保持 B 不变。
第 j 步: ajspan(a1,,aj1) ,则从 B 中去掉 aj ,否则保持 B 不变。

经过 n 步后终止程序,得到一个向量组 B。由于每一次去掉的向包含于前面诸向量的张成,到最后这个组 B 仍然可以张成 V 。而且这一程序确保了 B 中的任何向量都不包含与它前面诸向量的张成,根据线性相关性引理可知 B 是线性无关的。于是 B V 的一个基。

利用高斯消元来判断向量能否被前面的向量张成,就可以写出下面的程序:

void cal() {
    for (int i = 0; i < n; ++i)
        for (int j = MAX_BASE; j >= 0; --j)
            if (a[i] >> j & 1) {
                if (b[j]) a[i] ^= b[j];
                else {
                    b[j] = a[i];
                    for (int k = j - 1; k >= 0; --k) if (b[k] && (b[j] >> k & 1)) b[j] ^= b[k];
                    for (int k = j + 1; k <= MAX_BASE; ++k) if (b[k] >> j & 1) b[k] ^= b[j];
                    break;
                }
}

这个程序实现的非常精妙,我们每次维护一个对角矩阵。执行到第 i 步的时候,我们从高到低考虑数 ai 1 的二进制位 j,如果 j 这一行的对角线已经为 1 了,那么我们不能加入,同时为了保持上三角性质,需要将第 j 行的行向量异或到 ai 如果 j 这一行的对角线为 0,那么我们就可以将 ai 添加到这一行,同时为了维护一个对角矩阵,要先用下面的行消自己,再用自己消上面的行。

如果一个向量 ai 能被 a1,,ai1 张成 ,它不应添加进 B ,在高斯消元的过程中它必然是已经存在的行向量的线性组合,所以这个方程实际上是多余的,它最后一定会被异或为一个 0 。反之如果向量 ai 不能被 a1,,ai1 张成,那么它一定能找到某一个行添加进去。

我们来模拟下这个过程, n=5,a={7,1,4,3,5} 。一开始矩阵是这样的:

000000000

加入 7=(111)2 ,矩阵变为:

100100100

加入 1=(001)2 ,添加到最后一行,同时为了维护对角矩阵,消去第一行的最低位,矩阵变为:

100100001

加入 4=(100)2 ,由于第一行已经有数了,它被异或为 (010)2 ,加入第二行,同时为了维护对角矩阵,消去第一行的第二位,矩阵变为:

100010001

剩下的数都加不上了。

这样所有被选上的 ai 构成一个向量空间 V 的一个基 B。同时我们知道高斯消元最后得到的矩阵 b B 中的向量构成的矩阵进行若干初等行变换得到的矩阵,而任意初等行变换不会影响向量之间的线性无关性,且任意初等行变换过后,这些向量仍然能够张成原有的向量空间(不难证明)。所以,所有非 0 bi 仍然构成向量空间 V 的一个基。

大家所称的「线性基」一般都指这个方式得到的基,因为这个基具有一个独特的性质,可以应用到 OI 题目中。所以我们一般谈论的线性基,特指高斯消元解出的对角矩阵的非零行构成的向量组。

性质

对于最后得到的矩阵,如果第 i 的主对角线上为 1 ,此时我们称第 i 位存在于线性基中。对于存在于线性基的二进制位,有一个重要的性质:

对于任意存在于线性基的二进制位 i ,至多只有一个 bj 满足第 i 位为 1

证明:高斯消元的过程中,我们维护了一个对角矩阵,如果二进制位 i 存在于一个向量 bj上,那么 bj 它一定消去了别的向量第 i 位上的 1,故二进制位 i 只存在于 bj 上。

自然,对于不在线性基中的二进制位 i ,那么第 i 行主对角线下方全为 0 ,而主对角线上方就可能有若干个 1

注意

上述高斯消元过程是消成了一个对角矩阵,如果消成上三角矩阵,虽然不具备这个性质,但是仍然能知道那些二进制位 i <script type="math/tex" id="MathJax-Element-156">i</script> 存在于线性基中,有时为了代码的简便,只消成上三角矩阵。下文不做区分,请自行判断。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值