线性基学习小记

定义

  • 基:在线性代数中,基(也称为基底)是描述、刻画向量空间的基本工具。向量空间的基是它的一个特殊的子集,基的元素称为基向量。向量空间中任意一个元素,都可以唯一地表示成基向量的线性组合。如果基中元素个数有限,就称向量空间为有限维向量空间,将元素的个数称作向量空间的维数。
  • 同样的,线性基是一种特殊的基,它通常会在异或运算中出现,它的意义是:通过原集合S的某一个最小子集S1使得S1内元素相互异或得到的值域与原集合S相互异或得到的值域相同。

构造

  • 若干数的线性基是指一组数 a1,a2,...,an a 1 , a 2 , . . . , a n ,其中 ax a x 的最高位的1在第x位。
  • 设要插入数x,从高位到低位扫一遍,设当前扫到第i位。
  • 若x的(二进制下的)第i位为1,那么分类讨论:1.  ai=0   a i = 0 ,令 ai=x a i = x ;2.  ai>0   a i > 0 ,令 x=xa[i] x = x ⊕ a [ i ]
  • 这种构造方法的时间复杂度为 O(fn) O ( f ∗ n ) (f为位数,n为元素数量),但在求一些东西的时候需要特判。

  • 还有一种6一点、但慢一点的构造方法。
  • 这种方法多了一个操作:回消。我们在插x时,设其插在了 ai a i 位置,则首先用a[0~i-1]消掉 ai a i 的(二进制下的)第0~i-1位(能消就消),然后再用崭新的 ai a i 消掉a[i+1~f](f为位数)的(二进制下的)第i位。
  • 此种构造方法的时间复杂度为 O(f2n) O ( f 2 ∗ n ) (f为位数,n为元素数量)。

性质

  • 线性基有一基本性质:通过线性基中元素xor出的数的值域与原来的数xor出数的值域相同。
  • 证明很显然。
  • 假设x插在了 ai a i 位置,那么实际上 ai=x{aj} a i = x ⊕ { 一 堆 a j 的 异 或 和 } (其中x为初始的x)。因此,我们可以用a表示出x: x=ai{aj} x = a i ⊕ { 一 堆 a j 的 异 或 和 }
  • 既然这样,当我们需要知道 x1x2 x 1 ⊕ x 2 时,我们就可以利用它们对应的那些a来表示它们。

  • 除此之外,线性基还有一性质:线性基没有异或和为0的子集。
  • 这个可以用反证法。假设 ab1ab2ab3...abk=0 a b 1 ⊕ a b 2 ⊕ a b 3 ⊕ . . . ⊕ a b k = 0 ,那么 ab1=ab2ab3...abk a b 1 = a b 2 ⊕ a b 3 ⊕ . . . ⊕ a b k
  • 既然我们可用一堆a去表示出 ab1 a b 1 ,那么删去 ab1 a b 1 也没关系,故 ab1 a b 1 于线性基无用,与线性基是最小子集的定义矛盾。

  • 因此,我总结了一个规律:任意选取线性基中的非0元素,将它们异或起来,那样每种方案所得的异或和都互不相同。
  • 可以使用反证法。设方案A选用集合S1,方案B选用集合S2,两方案异或和相同。
  • S1S2= S 1 ∪ S 2 = ∅ ,则 S1S2=0 S 1 ⊕ S 2 = 0 ,与性质2:线性基没有异或和为0的子集矛盾。
  • S1S2 S 1 ∪ S 2 ≠ ∅ ,不妨设 S3=S1S2 S 3 = S 1 ∪ S 2 ,则易看出 (S1S3)(S2S3)=(S1S3)(S2S3)=0 ( S 1 − S 3 ) ∪ ( S 2 − S 3 ) = ∅ ∧ ( S 1 − S 3 ) ⊕ ( S 2 − S 3 ) = 0 ,于是又变成情况1。

应用

  • 异或集大小: 20 2 非 0 元 素 个 数 。根据性质3易得。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值