作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设您有 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 的想法不能使用,因为没有单个查询整数。
最佳答案
最近的论文“The Closest Pair Problem under the Hamming Metric”只有涉及 n^2 因子的算法(除非 K 非常大)。即使只找到一对也是如此。因此,除非您对实例的结构做出进一步的假设,否则似乎很难对此进行改进。比如你假设汉明距离不是很大,你可以采样几列,在假设这些列完全匹配的情况下,根据这些将字符串散列到桶中,然后在每个桶中分别进行两两比较。对另一组随机列重复此操作,以最大限度地减少您错过某些对的可能性。
关于algorithm - 快速计算具有最小汉明距离的对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7086100/
我是一名优秀的程序员,十分优秀!