【问题标题】:Finding the minimum Hamming distance in less than O(n^2m) time在小于 O(n^2m) 的时间内找到最小汉明距离
【发布时间】:2018-04-27 05:18:43
【问题描述】:

如果您有n 二进制字符串,每个长度为m,有没有比比较所有O(n^2) 对并计算它们的汉明距离更快的方法来确定任何对之间的最小Hamming distance ?

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

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

【问题讨论】:

  • www 上有大量的论文和其他资源。试试谷歌!到目前为止,尝试了什么?
  • 这是一个距离,所以它验证了d(a,c) ≤ d(a,b)+d(b,c),这当然可以用来不测试每一对。
  • 这也可能对你有所帮助(你必须找到一个好的订购):stackoverflow.com/questions/38900004/…
  • @MrSmith42: n 二进制字符串具有(n-1)*n/2 汉明距离,因为汉明距离是在两个字符串之间定义的。在这样的汉明空间中进行有效的最近邻搜索并非易事。至少到目前为止,我的 Google 搜索还没有取得成果。
  • 您可以构造一个kd-tree 并且(对于m 的适度值)使用查找表来确定两个字符串之间的距离。这会导致复杂性O(n log n)

标签: string algorithm hamming-distance


【解决方案1】:

考虑使用Locality Sensitive Hashing,这是一种通用技术,可应用于某些距离度量,包括汉明距离。摘自维基百科:

LSH 对输入项目进行哈希处理,以便相似项目以高概率映射到相同的“桶”(桶的数量远小于可能的输入项目的宇宙)。

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

算法和分析相当复杂,所以我认为我目前无法在这里写一个完整的总结(大约需要 2-3 小时的讲座材料)。我建议看一下讲义/幻灯片hereherehere;它们都涵盖了 LSH(在不同程度上的细节),并提到了汉明距离。

【讨论】:

    【解决方案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. 现在省略 Di0 + D0j

    【讨论】:

    • 你的第一句话有理由吗?
    • 我也想知道,而且似乎很容易找到不必比较所有字符串的示例。如果“前”两个字符串的汉明距离 ==1,您只需要验证没有重复的字符串,应该是 O(n*m)。我不知道这是否可以概括。
    • 如果最后一次比较得出的汉明距离 == 1 怎么办?如果我很幸运的例子不是一般规则。根据进一步的限制,更快的解决方案是可能的。但是如果没有任何约束,就无法推断出 Dij 的下限。这是一个上限,这只有助于找到最大值。
    • 你的“证明”似乎非常不稳定——我不明白你是如何得出没有标准可以让你安全地跳过距离计算的结论。
    • 不,它不是这样工作的。您声称不存在此类标准。您有责任证明这些标准的存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2010-11-11
    • 2019-11-19
    • 2013-12-09
    • 2013-09-02
    相关资源
    最近更新 更多