例: 文字列 "asdf" と一連の文字列 ("qwer"、"aswr"、"asdv") があるとします。「asdv」と「asdf」のハミング距離は 1 であるため、セットと文字列の間のハミング距離は 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) を扱っていることを意味します。セットはかなり静的なので、前処理が役立つ場合は間違いなくオプションです。
最後に、ここでのアプリケーションは、問題の文字列に最も近いセットを特定することですが、文字列の長さはセットの数よりもはるかに制限的な要因であるため、問題を軽減しました. 個々のサブセットではなく空間全体を見ることによってこれにアプローチする別の方法がある場合、私はすべての耳になります. 私が最初にそのアプローチを採用したときは、スペースの複雑さが完全にばかげているように見えました.