快乐地打牢基础(10)——线性空间 异或线性基 和 整数线性基

本文介绍了线性基的概念,特别是异或线性基的构造和应用。线性基是一组数,能够通过异或操作表示原数集中的所有数字。文章详细讲解了如何构造异或线性基,以及如何利用线性基解决数字查询、求异或最大值、最小值和第k小值的问题。此外,还探讨了整数线性基在向量空间中的意义。
摘要由CSDN通过智能技术生成

一、异或线性基


现在对于n个数字(下面称这n个数为原数集): a 1 , a 2 … … a n a_1,a_2……a_n a1a2an,找到一组数 p 1 , p 2 , . . . , p m p_1,p_2,...,p_m p1,p2,...,pm,可以用 p p p 中数的异或组合来表示 a a a中的数(即 p p p集合和 a a a集合通过异或出来的值域是一样的),那么称 p p p 就是 a a a 的一个线性基。

例如:
对于集合 A   { 2 , 8 , 10 } A\ \{2,8,10\} A { 2,8,10},它的线性基就是 P { 2 , 8 } P\{2,8\} P{ 2,8}
因为 2 ( 2 ) = 10 , 8 ( 2 ) = 1000 2_{(2)}=10,8_{(2)}=1000 2(2)=10,8(2)=1000 2 2 2 ^ 8 8 8 = 10 10 10

所以通过 P P P 中的元素异或,就可以直接得到 A A A 中的所有元素。

先说一说线性基有什么性质:
  1.原数集中的任意一个数字都能够通过线性基中的元素异或出来(这与线性基的构建方式有关),同时也说明线性基不唯一。
  2.原数集中的数字异或出来的值域与线性基中的元素以后出来的值域相等(通过上一条性质可知)。
  3.线性基中没有异或和为零的非空子集:现在假设存在这样一个子集使得 b 1 , b 2 … … b x b1,b2……bx b1b2bx 的异或和为零,那么根据异或的性质能得出: b 1 = b 2 ⊕ b 3 ⊕ … … ⊕ b x b1=b2⊕b3⊕……⊕bx b1=b2b3bx,既然 b 1 b1 b1 已经能用除他之外的线性基元素表示出来,我们便没有必要再将 b 1 b1 b1 放在线性基中。
  4.线性基中的选取元素的每一种方案,都对应一个异或值,不存在多种选取方案对应同一个异或值的情况:现在假设存在这种情况,那么我们就会存在一个非空子集的异或值为零,这与上一条性质矛盾。
  5.线性基是满足以上性质的最小集合,即线性基中不存在任何一个多余的元素。

构造线性基

首先定义两个数组:
a [ i ] a[i] a[i] 是原数集 , p [ i ] p[i] p[i] 是在二进制中二进制位为 1 1 1 最高位为第 i i i 位的数。

对于 p [ i ] p[i] p[i]可能不好理解,举个例子: x = 3 x = 3 x=3,在二进制下 x = x = x=11,其二进制位为 1 最高位为第 1 位,所以
p [ 1 ] = 3 p[1] = 3 p[1]=3;

我们主要通过插入操作来实现线性基的构造如下:
令插入的数为 x x x,考虑 x x x 的二进制最高位 i i i

  • 若线性基的第 i i i 位为 0 0 0 p [ i ] = 0 p[i]=0 p[i]=0),则直接在该位插入 x x x,退出;
  • 若线性基的第 i i i 位已经有值 a i a_i ai​,则 x = x ⊕ a i x=x⊕a_i x=xai ,重复以上操作直到 x = 0 x=0 x=0

插入顺序的不同会导致线性基的不同。

举个例子,原数集 a   { 2 , 8 , 10 } a\ \{2,8,10\} a { 2,8,10}
既然要异或,先将原数集变为二进制表示:
1 0 1    0 ( 10

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值