例如: 如果我有字符串「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