在小于O(n ^ 2m)的时间内找到最小汉明距离

时间:2018-04-14 09:16:25

标签: string algorithm hamming-distance

如果您有void moreDumb() { BusinessClass::dummy(); } 个二进制字符串,每个长度为n,则可以更快速地确定任何一对之间的最小Hamming distance,而不是比较所有m对并为每个人计算他们的汉明距离?

  

那可以在不到O(n^2)的时间内完成吗?

除了其他任何内容,如下所述,汉明距离是一个适当的距离函数,因此满足三角不等式,这让我觉得应该有一个更快的解决方案。

2 个答案:

答案 0 :(得分:5)

考虑使用Locality Sensitive Hashing,这是一种可应用于某些距离指标(包括汉明距离)的通用技术。维基百科摘录:

  

LSH哈希输入项目,以便类似项目以高概率映射到相同的“桶”(桶的数量远小于可能的输入项的范围)。

简而言之,您可以使用LSH获取每个桶内的桶,蛮力汉明距离,并输出找到的最小距离。为了以更高的概率获得正确的答案,您可以调整LSH算法的参数和/或多次运行LSH(以便将不同的项目分配到存储桶)。我相信你可以任意接近正确的(最佳)答案,失败率在运行时呈指数下降。 (你可能需要对LSH参数进行二分搜索,如果你的汉明距离非常接近,但你仍然可以避免计算n^2汉明距离。)

算法和分析非常复杂,所以我不认为我现在可以在这里写一个完整的摘要(这是一个大约2-3小时的讲义材料)。我建议您查看讲义/幻灯片hereherehere;它们都覆盖了LSH(不同程度的细节),并提到了汉明距离。

答案 1 :(得分:-2)

如果不使用O(n^2m)执行完整搜索,则无法确定真正的最小值。所有更快的变体只会产生最佳最小值

证明:

1. Assume there would be a faster solution.
2. Then for one or more combinations the hamming distance is not computed.
3. Omitting a combination means, that there is a criteria to decide
   the combination can't be better than the current best minimum.
4. There is no know criteria.

不幸的是,三角形不等式只能缩短真实最大值的计算:

  1. 计算距离Di0,对它们进行排序并选择起始最大值。
  2. 现在省略所有Dij,其中Di0 + D0j <=当前最大值。