【发布时间】:2015-03-21 15:57:27
【问题描述】:
我开始准备面试,遇到了这个问题:
- 给出了一个整数数组
- 现在以二进制表示形式计算数组中所有整数对的汉明距离之和。
示例:
given {1,2,3} or {001,010,011} (used 3 bits just to simplify)
result= HD(001,010)+HD(001,011)+HD(010,011)= 2+1+1=4;
我知道我可以在这里使用的唯一优化,来自纯粹的蛮力解决方案,是在汉明距离的单独计算中,如下所示:
int hamming_distance(unsigned x, unsigned y)
{
int dist;
unsigned val;
dist = 0;
val = x ^ y; // XOR
// Count the number of bits set
while (val != 0)
{
// A bit is set, so increment the count and clear the bit
dist++;
val &= val - 1;
}
// Return the number of differing bits
return dist;
}
解决这个问题的最佳方法是什么?
【问题讨论】:
标签: optimization hamming-distance