Я никогда раньше не кодировал с помощью python (я программист на Java), и я смотрю на код, который говорит, что он возвращает наиболее похожую битовую подпись/вектор в дереве префиксов. Подпись может быть, например, такой «1001». Может кто-нибудь объяснить мне, как работает код? Как он выполняет итерацию по дереву префиксов, чтобы найти наиболее похожую/ближайшую сигнатуру к сигнатуре запроса в дереве? Сходство основано на расстоянии Хэмминга.
Вот код:
class SignatureTrie:
@staticmethod
def getNearestSignatureKey(trie, signature):
digitReplacement = {'0': '1', '1': '0'}
targetKey, iteratingKey = signature.to01(), ''
for i in range(len(targetKey)):
iteratingKey+=targetKey[i]
if not trie.has_prefix(iteratingKey): iteratingKey=iteratingKey[:-1]+digitReplacement[targetKey[i]]
return iteratingKey
Вот исходный файл: https://github.com/kykamath/streaming_lsh/blob/master/streaming_lsh/classes.py
Редактировать:
Я приведу пример того, что «я» ожидаю от кода. Я не знаю, действительно ли код делает это и как он это делает. Вот почему я прошу интерпретацию кода, особенно обход дерева префиксов.
Предположим, у меня есть следующее дерево префиксов, содержащее три строки/подписи: s1 = 1110 s2 = 1100 s3 = 1001
Предположим, у меня есть входная подпись s = 1000. Теперь я хочу узнать, какой вектор в префиксе/дереве больше всего похож на входной вектор s. Поскольку s3 имеет наименьшее расстояние Хэмминга (1), я ожидаю, что код вернет вектор s3.
Что мне нужно, так это кто-то, кто объяснит мне, делает ли код то, что я от него ожидаю, и если да, то как он получает наиболее похожую сигнатуру, то есть как он проходит по дереву.
Если код не делает то, что я ожидаю, может кто-нибудь объяснить, что он делает, на приведенном мной примере?