如何解决如何找到xor == n的一对数字
我是位操作的新手,我遇到了这个问题,无法弄清楚如何解决它
问题
查找xor等于值n的对,并返回最小差分对
example n=5 possible pairs are 1-4,9-12 and so on
result is 4-1 as the diffrence of 4-1 is minimum
暴力在这里不适用,因为范围非常大,直到1
解决方法
假设n
是肯定的。首先使用O(log n)循环将n
减小为m
的最高幂n
比m = n
while m & (m-1):
m = m & (m-1)
小2:
m
然后您的答案将是n-m
和m ^ (n-m) == n
。
让我尝试给出一个证明草图:
要弄清为什么m ^ x == n
成立,这应该是微不足道的。现在,我证明为什么这对差别最小。让m
代表x
和m > x
,并且不失一般性地假设m == x
。我们不假设n==0
,因为否则m ^ x == n
。在保持m-x
的同时,如果我们将它们的相同零位翻转为1,我们将它们增加相同的数量,因此它们的差异m
仍将相同。因此,我们还可以假设x
和m
上的位在同一位置永远都不会为1。如果我们翻转x
上为0但x
上为1的位,则它将在m
上减小而在m-x
上增大,并且差值m
为更大。如果我们翻转x
上为1但m
上为0的位,则差异可能较小。因此,差异最小的一对无法进行最后一次翻转,即m
翻转m < x
上的任何1位将构成{{1}}。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。