关于为什么求最大异或和一定要先求出线性基,不能直接拿原来的值直接异或的问题

这个问题也困扰了我很久,下面我们看求最大异或和的代码(部分),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。

过于专业的证明由于博主太垃圾,不能给出。。。

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值