快速计算具有最小汉明距离的对
Posted
技术标签:
【中文标题】快速计算具有最小汉明距离的对【英文标题】:Fast computation of pairs with least hamming distance 【发布时间】:2011-08-16 22:58:16 【问题描述】:问题
假设您有 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)。有没有更好的数据结构或算法?看来Efficiently find binary strings with low Hamming distance in large set的想法不能用,因为没有单个查询整数。
【问题讨论】:
你知道最接近的对的期望有多接近吗? 通常有一对距离为零或一位。 你能发布一个有代表性的数据集吗?如果最近的对之间的距离超过 2(或 5,或 ..),您是否可以不返回匹配项? 【参考方案1】:最近的论文“The Closest Pair Problem under the Hamming Metric”只有涉及 n^2 因子的算法(除非 K 非常大)。即使只找到一对。因此,除非您对实例的结构做出进一步的假设,否则似乎很难改进这一点。例如,假设汉明距离不是很大,则可以在假设这些列完全匹配的情况下,对几列进行采样,将字符串散列到桶中,然后分别在每个桶中进行成对比较。对另一组随机列重复此操作,以最大限度地减少您错过某些对的概率。
【讨论】:
以上是关于快速计算具有最小汉明距离的对的主要内容,如果未能解决你的问题,请参考以下文章