线性基

线性基是一个比较好学但是可能用处并不大的算法。

下面是我觉得比较好的两篇博客。

线性基浅谈

线性基详解

线性基的复杂度非常优秀,正常插入的话就是 \(O(n*64)\) 的,百万的数据是随便跑的。

线性基最重要的是它的几个优秀的性质,一般线性基的题目都考察这些性质。

  1. 原数集中的数字异或出来的值域 与 线性基中的元素以后出来的值域相等。
    这个很重要,说明线性基可以代替原数集进行下一步的操作,也是线性基正确性的保障。

  2. 线性基是精简的,而不是冗余的。
    这个就是说线性基是满足条件的最小数集,而且也不会多,具体来说有这么几个小性质:
    线性基中没有异或和为零的非空子集。
    线性基中的选取元素的每一种方案,都对应一个异或值,不存在多种选取方案对应同一个异或值的情况

以上为线性基的两大性质,这两个性质是线性基的基础。

关于做题的话,主要的难度方面是你很难想到这是一道线性基的题目,一般来说想到之后就不难了。

补充线性基基本用途:

  1. 查询n个数异或的最大值。
  2. 查询n个数异或的最小值。
  3. 查询某个数是否能被异或得到。
  4. 查询n个数异或的k小值。
posted @ 2020-11-18 20:42  longdie  阅读(120)  评论(1编辑  收藏  举报