最小xor路径到阵列的可能线性时间算法

时间:2015-07-12 01:48:22

标签: algorithm language-agnostic greedy

在一家大公司的技术面试中,我被问到了这个问题。 我可以得到一个基本的暴力强迫解决方案,但被要求找到一个更好的解决方案(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)

我只能给出一个蛮力方法的解决方案,但它看起来很天真。面试官一直在寻求更好的解决方案。我正在考虑一些贪婪的方法,但无法找到解决方案。你能帮我么。

1 个答案:

答案 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

因此,最佳路径从第一个元素直接到最后一个元素没有中间停止。