异或线性基练习

Posted uid001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异或线性基练习相关的知识,希望对你有一定的参考价值。

异或线性基定义:

设$S$为一个集合, $a_1,a_2,...,a_r$为$S$的一个子集, 若满足

$(1)a_1,a_2,...,a_r$线性无关 (在$a_1,a_2,...,a_r$中任选元素的异或和均不为$0$)

$(2)S$中每个元素均可由$a_1,a_2,...,a_r$异或得到

则$a_1,a_2,...,a_r$为$S$的异或线性基

 

一些性质:

$(1)S$与$S$的异或线性基等价

$(2)S$张成的元素数$=2^r$

 

线性基的求法:

可以利用线性代数中高斯消元, 但有更简便做法, 一般是采用动态插入维护线性基, 这里直接给出代码

void ins(int x) {
    REP(i,1,*a) x = min(x, x^a[i]);
    if (x) a[++*a] = x;                                               
}

$*a$统计维数, 最后$a_1,a_2,...a_*a$即为线性基的一个等价向量组

如果求张成空间中最大元素可以由贪心很容易得到

ll query() {
    ll ans = 0;
    REP(i,1,*a) ans = max(ans, ans^a[i]);
    return ans;                                                       
}

 


以上是关于异或线性基练习的主要内容,如果未能解决你的问题,请参考以下文章

Nowcoder 练习赛26 D xor序列 ( 线性基 )

线性基小节

「线性基」

线性基

线性基学习

关于线性基的一丢丢理解