Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 证明XOR不';找不到丢失的号码(面试问题)?_Algorithm_Bit Manipulation - Fatal编程技术网

Algorithm 证明XOR不';找不到丢失的号码(面试问题)?

Algorithm 证明XOR不';找不到丢失的号码(面试问题)?,algorithm,bit-manipulation,Algorithm,Bit Manipulation,面试问题:你会得到一个大约10亿个唯一数字的文件,每个数字都是32位的数字。查找文件中没有的数字 当我接近这个问题时,我尝试了几个3位和4位数字的例子。对于我尝试的例子,我发现当我对这组数字进行异或运算时,我得到了一个正确的答案: a = [0,1,2] # missing 3 b = [1,2,3] # missing 0 c = [0,1,2,3,4,5,6] # missing 7 d = [0,1,2,3,5,6,7] # missing 4 functools.reduce((lam

面试问题:你会得到一个大约10亿个唯一数字的文件,每个数字都是32位的数字。查找文件中没有的数字

当我接近这个问题时,我尝试了几个3位和4位数字的例子。对于我尝试的例子,我发现当我对这组数字进行异或运算时,我得到了一个正确的答案:

a = [0,1,2] # missing 3
b = [1,2,3] # missing 0
c = [0,1,2,3,4,5,6] # missing 7
d = [0,1,2,3,5,6,7] # missing 4

functools.reduce((lambda x, y: x^y), a) # returns 3
functools.reduce((lambda x, y: x^y), b) # returns 0
functools.reduce((lambda x, y: x^y), c) # returns 7
functools.reduce((lambda x, y: x^y), d) # returns 4

然而,当我编写并提交它时,它没有通过测试用例


我的问题是:在面试环境中,我如何确定或排除这样的方法不是可行的解决方案?

在所有示例中,数组正好缺少一个数字。这就是XOR工作的原因。尽量不要使用相同的属性进行测试

对于问题本身,可以通过取每个位的少数来构造一个数字

编辑

XOR对您的示例起作用的原因:


当您对从0到2^n-1的所有数字进行异或运算时,结果为0(每个位中正好有2^(n-1)'1'。因此,如果取一个数字,然后取所有剩余的数字的XOR,结果就是你取的数字,因为取该数字的XOR和所有剩余数字的结果需要为0。

假设一个64位系统有超过4gb的可用内存,我会将这些数字读入一个32位整数数组。然后,我将通过数字循环多达32次

类似于一个反向的“智囊团”游戏,我会一点一点地构造一个缺失的数字。在每个循环中,我计算所有匹配位的数字,到目前为止我选择了0或1。然后我加上不经常出现的位。一旦计数为零,我就少了一个数字

示例:

十进制/二进制的数字是

1 = 01
2 = 10
3 = 11
一个数字的最高有效位为0,两个数字的最高有效位为1。因此,我将0作为最高有效位。 在下一轮比赛中,我必须与00和01比赛。这会立即导致00作为缺失的数字



另一种方法是使用随机数生成器。有50%的几率你会发现一个不存在的数字作为第一猜测。

反例证明:3^4^5^6=4。

不确定“在面试环境中”,但我想你必须想出一个反例。任何长度为1的列表都会失败。哦,哇,是的,这是一个很好的反例。你能详细说明一下“这就是XOR工作的原因”吗?XOR的某些属性是否与一个目标数有关?我感谢您的回答。然而,我并不是在寻找这个问题的解决方案,为了完整性,结合999999996个不同的其他32位数字,选择异或为零。