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日。无论该挑战以何种方式结束。没有什么能阻止我发布这个答案。不管挑战以什么方式结束。没有什么能阻止我发布这个答案。