在一家大公司的技术面试中,我被问到了这个问题。 我可以得到一个基本的暴力强迫解决方案,但被要求找到一个更好的解决方案(O(n)),因为n被告知在5,00,000的限制内。
给定一个整数数组的正数(p1,p2,.. pn),任务是找到从第一个数字到最后一个数字的最小费用路线。路线成本定义为通过阵列的XOR总和。例如,如果路线是p1,p4,p6,p10,那么路线成本是(p1 xor p4)+(p4 xor p6)+(p6 xor p10)。允许重新访问任何数字。我们必须找到从p1到pn的最低成本路线。 (N< 5,00,000)
我只能给出一个蛮力方法的解决方案,但它看起来很天真。面试官一直在寻求更好的解决方案。我正在考虑一些贪婪的方法,但无法找到解决方案。你能帮我么。
答案 0 :(得分:2)
我们有三角不等式
(a XOR b) <= (a XOR c) + (c XOR b) for all a, b, c >= 0,
可以通过对位位置求和或通过观察我们可以将XOR作为度量嵌入到L1空间中来直接证明,其中i
对应于a
的点的2^i
维度为{{ 1}}如果a
的二进制表示中的相应位为1
,如果相应位为0
则为0
。
因此,最佳路径从第一个元素直接到最后一个元素没有中间停止。