码迷,mamicode.com
首页 > 其他好文 > 详细

线性基学习

时间:2018-09-29 00:03:23      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:当当   lin   个数   相等   不同   操作   集中   博客   line   

之前是假会,现在是真会。而且我还写了博客。不写博客的东西总有一天会忘。

概述

对于线性基中所有的子集的异或和的集合与线性基中的插入所有数的所有子集的异或和的集合相等。

即线性基代表了原数集中的所有异或和。

线性基中所有子集的异或和两两不同。继而不同的异或和数=\(2^{|线性基|}\)

操作

插入

从高位往低位枚举,若这位上已有数,则异或上这个数后继续,否则将这位赋为当前的数。

查是否存在

从高位往低位枚举,若这位上有数则异或上这个数。当当前值在某时刻=0时说明存在。

查最大异或和

开始答案=0。从高位往低位枚举,若异或上这个数使答案增大则异或。

查与\(x\)异或的最大异或和

开始答案=\(x\),之后查最大异或和。

查最小异或和

答案即为最低的有数的位的数。

查k小异或和

先将线性基重构为线性无关的形式,即若一位上有数,则其他位上的这一位皆为0。如\(\{101101,11111,1010,110\}\)变为\(\{100001,10011,1010,110\}\)

然后将\(k\)拆为二进制,从低位往高位枚举,若k&(1<<i)则答案异或上第\(i\)大的位的数。

线性基学习

标签:当当   lin   个数   相等   不同   操作   集中   博客   line   

原文地址:https://www.cnblogs.com/utopia999/p/9721484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!