成对安定的总和

时间:2015-01-27 19:53:37

标签: arrays algorithm bit-manipulation

我们给出了一个大小 N 的数组,我们必须为所有的 Ai AND(&) Aj 计算总和对(i,j)其中 i< j 。数组的大小可以大到 10 ^ 5 。那么什么是最好的计算方法。比 O(n ^ 2)更好。

1 个答案:

答案 0 :(得分:4)

  1. 我们可以独立解决每个位的问题。

  2. 对于固定位b,让我们调用将此位设置为一个f(b)的元素数。

  3. 答案是sum for all b f(b) * (f(b) - 1) / 2 * 2 ^ b

  4. 为什么这是正确的?我们假设b是固定的。当且仅当这两个数字都将此位设置为1时,这两个数字的位设置为1。如果具有此位设置的元素数为f(b),则确实存在f(b) * (f(b) - 1) / 2对,以便两个元素都设置此位。现在我们可以找到所有b的总和。