这个问题也困扰了我很久,下面我们看求最大异或和的代码(部分),b是储存得到的线性基
for(int i = len - 1; i >= 0; --i){
if((ans ^ b[i]) > ans){
ans ^= b[i];
}
}
举一个例子就好了。
比如我们有6,5,4个数,要求最大异或和,我们先写出它们的二进制
110
101
100
如果我们直接用6,5,4求的话,过程为
ans = 0;
ans ^ 6 > ans --> ans = 6
ans ^ 5 < ans --> ans不变,ans = 6
ans^4 < ans --> ans不变,ans = 6
这样得出的结果是6
下面是用线性基求得过程,6,5,4的线性基为
110
001
000
这样很显然,结果为7,大于6。
过于专业的证明由于博主太垃圾,不能给出。。。