如果您有void moreDumb() {
BusinessClass::dummy();
}
个二进制字符串,每个长度为n
,则可以更快速地确定任何一对之间的最小Hamming distance,而不是比较所有m
对并为每个人计算他们的汉明距离?
那可以在不到
O(n^2)
的时间内完成吗?
除了其他任何内容,如下所述,汉明距离是一个适当的距离函数,因此满足三角不等式,这让我觉得应该有一个更快的解决方案。
答案 0 :(得分:5)
考虑使用Locality Sensitive Hashing,这是一种可应用于某些距离指标(包括汉明距离)的通用技术。维基百科摘录:
LSH哈希输入项目,以便类似项目以高概率映射到相同的“桶”(桶的数量远小于可能的输入项的范围)。
简而言之,您可以使用LSH获取每个桶内的桶,蛮力汉明距离,并输出找到的最小距离。为了以更高的概率获得正确的答案,您可以调整LSH算法的参数和/或多次运行LSH(以便将不同的项目分配到存储桶)。我相信你可以任意接近正确的(最佳)答案,失败率在运行时呈指数下降。 (你可能需要对LSH参数进行二分搜索,如果你的汉明距离非常接近,但你仍然可以避免计算n^2
汉明距离。)
算法和分析非常复杂,所以我不认为我现在可以在这里写一个完整的摘要(这是一个大约2-3小时的讲义材料)。我建议您查看讲义/幻灯片here,here和here;它们都覆盖了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.
不幸的是,三角形不等式只能缩短真实最大值的计算: