例如:如果我有字符串“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(string) 和 k = len(set)。但是,最大集合大小随 n^2 缩放,这意味着我们本质上是在处理 O(n^3)。这些集合相当静态,因此如果预处理会有所帮助,那绝对是一种选择。
最后,我应该提到这里的应用程序是确定哪些集合最接近所讨论的字符串,但我已经减少了这个问题,因为字符串长度是比集合数量更多的限制因素。如果有另一种方法可以通过将空间视为一个整体而不是单个子集来解决这个问题,我会全神贯注。当我第一次采用这种方法时,似乎空间复杂性会变得非常荒谬。