线性基复习

线性基

用处:求出一个最小集S,使得S可以通过选取若干个数异或起来得到数T,而数T一定可以表示为数集A中若干个数的异或和(反之亦然)

性质

1、长度固定
2、S中没有任何一个子集(除空集)的异或和为0

建立

把每一个数按照从高到低位扔进S中,若此位置没有值,则在这个位置中放入这个值,否则则将S与这个位置上的数字进行异或。
证明:
1、线性基中数的异或集合的值域与A相同
因为线性基的数可以通过多次异或最终得到和A完全相同的集合,所以不会出现线性基的异或集合与A不同的情况。
2、思考线性基中数的个数,如何可以更好的刻画这个数
设P为A可以异或出来的所有数字
那么其实线性基中数的个数就是P中的不同的最高位个数。
具体证明:我们发现对于最终这样构造的线性基中的任意一个数K,都不会存在另一个不同的数与他的最高位相同。这就意味着如果某一个在P集合中的数Q的最高位i所代表的数不在这个集合里,那么Q只能被若干个最高位大于i的数异或得到,而这些数的最高位一定要相同,就违反了一开始的条件。
3、对于任何一个有二进制最高位相同的集合S满足线性基的条件,那么一定可以找到一个更没有二进制最高位相同的集合T,满足T的个数小于等于S且满足条件。
具体证明:我们可以将有二进制最高位相同的那个数异或另一个这样的数,就可以将这个数的最高位降低,同样的道理,可以一直这样做直到没有位相同,这样的集合大小只能变小或不变
也就是说,我们的线性基一定是不存在最高位不同的数的集合。
4、若线性基中每一位的最高位都不同,则每一个最高位都一定会有至少一个值。
具体证明:若需要异或出一个数的最高位为i并且没有最高位为i的这个数在满足线性基要求的集合S中,那么一定是由若干个最高位比i高的数异或得到这个数。那么这个最高位就一定会重复,违反了3条件。或者说这个集合S的大小就一定不会比我们构造的集合的大小要小。

其他操作

例如异或和最大最小等,这些根据这样建立线性基的特性和性质可以直接得到。

你可能感兴趣的:(基础算法,算法)