假设你有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,它应该返回pairlist {(i3,i4)}。对于k = 3,它应该返回{(i1,i2),(i1,i4),(i3,i4)}。等等。
天真的实现计算所有成对距离,对这些对进行排序并返回具有最小距离的k:O(N ^ 2)。有没有更好的数据结构或算法?看起来Efficiently find binary strings with low Hamming distance in large set中的想法无法使用,因为没有单个查询整数。
答案 0 :(得分:6)
最近的论文“The Closest Pair Problem under the Hamming Metric”只有涉及n ^ 2因子的算法(除非K非常大)。即使只找到一对也是如此。因此,除非您对实例的结构做出进一步的假设,否则似乎很难对此进行改进。例如,如果假设汉明距离不是很大,则可以对几列进行采样,根据这些列在这些列完全匹配的假设下将字符串散列到桶中,然后分别在每个桶中进行成对比较。对另一组随机列重复此操作,以最大限度地减少错过某些对的概率。