问题
假设您有 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)。有没有更好的数据结构或算法?由于没有单个查询整数,因此无法使用有效地在大集合中找到具有低汉明距离的二进制字符串的想法。