给定范围[l, r]
(其中l < r
)和数字k
(其中k <= r - l
),我想选择一组S
{ {1}} k
中的不同数字,可以最大化成对xors的总和。例如,如果[l, r]
和[l, r] = [2, 10]
并且我们选择k = 3
,则xors的总和为S = {4, 5, 6}
。
这是我到目前为止的想法:在d(4, 5) + d(4, 6) + d(5, 6) = 1 + 1 + 2 = 4
中,对于每个位索引[l, r]
小于或等于i
中最高设置位的索引,该数字设置r
的{{1}}中元素的数量等于S ^ S
,其中i
是j * (k-j)
中j
的元素数位设置。为了优化这一点,我们希望选择S
,以便对于每个位i
,S
包含i
个位置S
的元素。对于k/2
来说这很容易,但我仍坚持对i
进行概括。
答案 0 :(得分:0)
乍一看,这个问题似乎没有代数解决方案。我的意思是,这似乎是一个 NP-hard 问题(一个优化问题),在多项式时间内无法解决。
几乎总是可能的,人们可以通过可行的空间蛮力。
直观地说,我可以建议调查Locality Sensitive Hashing。在 LSH 中,通常会尝试查找两组之间的相似性。但在您的情况下,您可以在以下意义上滥用此算法。
[l,r]
中随机抽样。最后可以预期汉明距离较大的点应该在同一个邻域中(这就是名称 Locality Sensitive Hashing )的原因。但是,这只是一个想法。