Algorithm 计算具有给定xor范围(0-k)的所有对
给定一个大小为Algorithm 计算具有给定xor范围(0-k)的所有对,algorithm,bit-manipulation,xor,Algorithm,Bit Manipulation,Xor,给定一个大小为n的数组A和一个整数k,我们如何从0到k计算每个x的对数(A[i],A[j]),从而i
n
的数组A
和一个整数k
,我们如何从0
到k
计算每个x
的对数(A[i],A[j])
,从而i
和A[i]XOR A[j]=x
例如,给定数组A=[1,2,3]
和k=2
,有
0 pairs with XOR 0
1 pair with XOR 1 (2 XOR 3)
1 pair with XOR 2 (1 XOR 3),
因此结果是[0,1,1]
我有一个
O(n^2)
解决方案,但我正在寻找一个更有效的解决方案。让C
成为a
的频率,即C[x]=count(a[I]=x)
然后问题变成C
和C
的异或卷积,并从索引0
的结果中减去len(A)
,因为它包含对(i,j)
,其中i==j
XOR卷积可以通过求解,参见
最后,复杂性是
O(n+m log m)
,其中m
是len(C)
,等于max(A)
让C
成为A
的频率,即C[x]=count(A[i]=x)
然后问题变成C
和C
的异或卷积,并从索引0
的结果中减去len(A)
,因为它包含对(i,j)
,其中i==j
XOR卷积可以通过求解,参见
最后,复杂性是
O(n+mlogm)
,其中m
是len(C)
,等于max(A)
你说的异或2是什么意思?k在这里扮演什么角色?对不起,我不明白您的问题。@srv236 1 xor 3给出2。xor 2是1xor3的结果。k的作用是我们需要找到从0到k的每个数字的结果,这就是为什么输出为0 1 1如果您共享当前的实现,它可能有助于理解任务和问题。这是对StackOverflow社区的滥用,因为这个问题是HackerEarth Vimeo Full Stack Developer Hirching Challenge,有效期至2020年9月13日。xor 2是什么意思?k在这里扮演什么角色?对不起,我不明白您的问题。@srv236 1 xor 3给出2。xor 2是1xor3的结果。k的作用是我们需要找到从0到k的每个数字的结果,这就是为什么输出为0 1 1如果您共享当前的实现,它可能有助于理解任务和问题。这是对StackOverflow社区的滥用,因为这个问题是HackerEarth Vimeo Full Stack Developer Hirching Challenge,该挑战将一直持续到2020年9月13日。无论该挑战以何种方式结束。没有什么能阻止我发布这个答案。不管挑战以什么方式结束。没有什么能阻止我发布这个答案。