問題
N (~100k-1m) 個の整数/ビット文字列がそれぞれ K (例: 256) ビットの長さであるとします。アルゴリズムは、ペアごとのハミング距離が最小の k ペアを返す必要があります。
例
N = 4
K = 8
i1 = 00010011
i2 = 01010101
i3 = 11000000
i4 = 11000011
HammingDistance(i1,i2) = 3
HammingDistance(i1,i3) = 5
HammingDistance(i1,i4) = 3
HammingDistance(i2,i3) = 4
HammingDistance(i2,i4) = 4
HammingDistance(i3,i4) = 2
k=1 の場合、ペアリスト {(i3,i4)} を返す必要があります。k=3 の場合、{(i1,i2), (i1,i4), (i3,i4)} を返す必要があります。等々。
アルゴリズム
単純な実装では、すべてのペアごとの距離を計算し、ペアを並べ替えて、距離が最小の k を返します: O(N^2)。より良いデータ構造またはアルゴリズムはありますか? 単一のクエリ整数がないため、大きなセットでハミング距離が低いバイナリ文字列を効率的に見つけるのアイデアは使用できないようです。