线性基学习笔记

来自蒟蒻XXJ的学习记录

定义

给定一个无符号的整数集合\(A\)

线性基的主要思想就是用尽量少的数字表示出\(A\)中的所有数字

首先根据尽量少就可以看出来线性基的第一个性质:

1.线性基中的所有数字都是不能由其他数字异或得到的

根据其主要思想就可以看出来第二个性质:

2.\(A\)中所有的数字都可以由线性基的某个子集异或得到

线性基的实现\(&\)线性基的构造

设集合中最大的元素在二进制意义下有\(L\)位

这种构造方法构造出的线性基中\(i,Bi\)一定满足以下的性质:

1.\(Bi=0\)时:

  • 当且仅当\(j>i\)时,有可能出现\(Bj\)在第\(i\)位为\(1\)

2.\(Bi>0\)时:

  • 整个\(B\)数组中只有\(Bi\)的第\(i\)

  • \(Bi\)比\(i\)高的二进制位上面一定是\(0\)

  • \(Bi\)比\(i\)低的二进制位上面有可能是\(1\) 如果出现了这种情况……好像那个\(Bj=0\)

线性基的构造是动态构造的,要从一个空的\(B\)集合开始,考虑在一个已存在的\(B\)中插入一个数字\(t\)

从\(t\)最高位上的\(1\)来考虑,如果这一位已经存在了\(1\)就要把\(t\)的这一位消掉才可以继续插入 于是就把\(t Xor Bj\)

如果这一位不存在\(1\)就直接把这个数字作为\(Bj\)

但是根据刚才的构造方法的分析:

  • 最高位一定是\(j\)这个是一定可以保证的

  • 对于位置上面比\(i\)低的二进制位\(k\)上的\(1\)若是存在\(Bk!=0\)那么就要\(Xor Bk\)

  • 对于在线性基中位置比\(j\)靠后的 就要把他们的\(j\)位消掉 于是就直接\(Xor\)

所以这个算法的流程应该是显而易见的了……

posted @ 2017-04-02 09:03  Xiaojian_xiang  阅读(418)  评论(0编辑  收藏  举报