例如: 如果我有字符串“asdf”和字符串集(“qwer”,“aswr”,“asdv”)。集合和字符串之间的汉明距离为1,因为“asdv”和“asdf”的汉明距离为1。计算字符串和字符串之间的最小汉明距离
很容易蛮力像这样的东西
def hamming_distance(string, set):
min = len(string)
for element in set:
element_distance = sum(ch1 != ch2 for ch1, ch2 in zip(string, element))
if min > element_distance:
min = element_distance
if min == 0:
break
return min
我觉得这为O(n * K),其中n = LEN(字符串)和k = LEN(套)。然而,最大集大小与n^2成比例,这意味着我们基本上处理O(n^3)。该集相当静态,所以如果预处理将有助于这绝对是一种选择。
最后,我应该提及的是,这里的应用程序是要确定哪个集合最接近问题的字符串,但我减少了这个问题,因为字符串长度是一个更多的限制因素集。如果还有另外一种方法来看待整个空间而不是单个子集,我会全神贯注。当我第一次采取这种方法时,似乎空间复杂性将会变得完全荒谬。
的M-树是快速跳过大部分元素集合的一个好方法。我将不得不一起玩,看看空间复杂性是否合理,但这看起来很有希望。如果一切顺利,我一定会接受你的答案。 – blackfedora