标签:bsp 怎么 $1 循环 问题: 这一 结束 并且 失败
我们有些时候会遇到类似这样的问题:给定一组数字,求异或和最大值。
我们可以用线性基来解决这个问题。
那么我们怎么考虑这个问题呢?
我们可以类比于向量。
在向量中,我们可以用单位向量表示某一个方向上的单位量。并且我们能用n个单位向量导出一个$n$维的空间。
同理对于异或空间也是可以线性基来导出的。
我们可以把一个长整型看成$64$维的向量,每个方向为$0$或$1$。
我们考虑一个数能导出怎样的一个单位向量呢?
我们发现如果是单位向量,那么这个向量除了当前这个方向上为$1$,其余都是$0$。
但是在这里我们可以放宽这个要求,我们要求高位上全为$0$,这一位为$1$。
如果前$k$维的单位向量都已经被成功导出,那么我们就可以完全地掌控前$k$维的空间了。
大致就是这个意思。
我们考虑插入一个数的操作。
我们从高位(维)向低位(维)遍历,如果我们发现当前第$i$位上为$1$,也就说明了这一个数对这个$i$维空间有影响。
我们判断一下,当前这个空间是否已经被成功导出了,如果已经被导出的话,我们就有办法消除这个影响,也就是异或上当前这个空间的单位向量。
如果没有被成功导出,那么我们最高就能影响到当前这个空间了,记录这个向量为当前空间的单位向量,结束循环。
有没有插入失败的情况呢?
有,就是当前这个向量能被完全消除影响,也就是说能被之前的向量导出的时候。
标签:bsp 怎么 $1 循环 问题: 这一 结束 并且 失败
原文地址:https://www.cnblogs.com/onglublog/p/10047932.html