博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线性基学习笔记
阅读量:4332 次
发布时间:2019-06-06

本文共 795 字,大约阅读时间需要 2 分钟。

来自蒟蒻XXJ的学习记录

定义

给定一个无符号的整数集合\(A\)

线性基的主要思想就是用尽量少的数字表示出\(A\)中的所有数字

首先根据尽量少就可以看出来线性基的第一个性质:

1.线性基中的所有数字都是不能由其他数字异或得到的

根据其主要思想就可以看出来第二个性质:

2.\(A\)中所有的数字都可以由线性基的某个子集异或得到

线性基的实现\(&\)线性基的构造

设集合中最大的元素在二进制意义下有\(L\)位

这种构造方法构造出的线性基中\(i,Bi\)一定满足以下的性质:

1.\(Bi=0\)时:

  • 当且仅当\(j>i\)时,有可能出现\(Bj\)在第\(i\)位为\(1\)

2.\(Bi>0\)时:

  • 整个\(B\)数组中只有\(Bi\)的第\(i\)

  • \(Bi\)比\(i\)高的二进制位上面一定是\(0\)

  • \(Bi\)比\(i\)低的二进制位上面有可能是\(1\) 如果出现了这种情况……好像那个\(Bj=0\)

线性基的构造是动态构造的,要从一个空的\(B\)集合开始,考虑在一个已存在的\(B\)中插入一个数字\(t\)

从\(t\)最高位上的\(1\)来考虑,如果这一位已经存在了\(1\)就要把\(t\)的这一位消掉才可以继续插入 于是就把\(t Xor Bj\)

如果这一位不存在\(1\)就直接把这个数字作为\(Bj\)

但是根据刚才的构造方法的分析:

  • 最高位一定是\(j\)这个是一定可以保证的

  • 对于位置上面比\(i\)低的二进制位\(k\)上的\(1\)若是存在\(Bk!=0\)那么就要\(Xor Bk\)

  • 对于在线性基中位置比\(j\)靠后的 就要把他们的\(j\)位消掉 于是就直接\(Xor\)

所以这个算法的流程应该是显而易见的了……

转载于:https://www.cnblogs.com/Xiaojianxiang/p/6658200.html

你可能感兴趣的文章
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
技术分析淘宝的超卖宝贝
查看>>
i++和++1
查看>>
react.js
查看>>
P1313 计算系数
查看>>
NSString的长度比较方法(一)
查看>>