面接の準備を始めたところ、次の問題に遭遇しました。
- 整数の配列が与えられます
- ここで、配列内の整数のすべてのペアのハミング距離の合計をバイナリ表現で計算します。
例:
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;
}
この問題を解決する最善の方法は何ですか?