线性基

线性基

定义

一个正整数序列,让线性基可以用异或和表示其中任意一个数,并且线性基的个数最少

性质

  • 序列中的任何一个数都可以由线性基中的数异或得到

  • 任何数的异或和不为零

  • 保持性质一的前提下,线性基的数量唯一且最少

线性基的构造

不能插入线性基,即x经过若干次异或变成0,根据性质三不需加入

可以被插入,\(x\) 被异或了一些数,剩下的数为 \(y\),将 \(y\) 插入,可以表达 \(x\)

线性基操作

原理如上

bool insert(long long x){
    for(int i=MAXS;i>=0;--i)
        if(x>>i&1){
            if(d[i])x^=d[i];
            else{d[i] = x;return 0;}
        }
    return 1;
}

求最大最小值,使用从高到低贪心法

long long qmax(long long x){
    for(int i=MAXS;i>=0;--i)
        if((x>>i&1)==0&&d[i]!=0)
            x ^= d[i];
    return x;
}
long long qmin(long long x){
    for(int i=MAXS;i>=0;--i)
        if((x>>i&1)==1&&d[i]!=0)
            x ^= d[i];
    return x;
}

练习题

Luogu

闲谈

01trie和线性基都可以处理异或问题,要根据问题选择合适的方法

参考资料

Oi-wiki

posted @ 2024-02-02 17:12  妖灵梦  阅读(31)  评论(0)    收藏  举报