zoukankan      html  css  js  c++  java
  • <学习笔记>线性基

    线性基可以理解为一组集合(S={p_1, p_2,...,p_n})满足原集合(A)的任意一个子集的异或和都能在S的子集(且该子集是唯一的)中找到,且(|S|)最小, 则称S为A的线性基

    线性基的大小约为(log_2max{S}),也就是说,我们可以用(O(Nlog_2M+log_2M))的效率来求出一个集合的最大异或和,最小异或和等(其中(M)(A)中最大的数)

    线性基的性质: 每个数的二进制最高位各不相同

    线性基的构造类型--动态构造

    线性基的构造方法:我们用大小为(log_2M)的集合(S)来存储线性基,其中(S_j)表示最高位为j的线性基,我们现在插入一个数(x),每次查询(x)最高位,设最高位为(j),将x修改为(x xor S_j),如果最高位上的1无法通过其他数异或得到, 那么将(S_j)设为(x)

    原理: (a xor b xor a=b) 只要能构造出x那么肯定能构造出(x xor sum) sum是原先能xor出来的某一个值

    线性基的合并:假设有A, B两个线性基需要合并, 那我们只需要把B中的元素依次全部插入A中即可

    参考资料:
    oi-wiki:https://oi-wiki.org/math/basis/
    menci:https://oi.men.ci/linear-basis-notes/

  • 相关阅读:
    day4递归原理及实现
    day4装饰器
    day4迭代器&生成器&正则表达式
    open()函数文件操作
    Python中的内置函数
    function(函数)中的动态参数
    copy深浅拷贝
    collections模块
    set集合
    字典dict常用方法
  • 原文地址:https://www.cnblogs.com/gllonkxc/p/15247260.html
Copyright © 2011-2022 走看看