我以前从未用 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。现在我想知道前缀/trie 中的哪个向量与输入向量 s 最相似。由于 s3 具有最小的汉明距离 (1),我希望代码返回向量 s3。
我需要有人向我解释代码是否在做我期望它做的事情,如果是这样,它如何获得最相似的签名,即它如何遍历树。
如果代码没有达到我的预期,有人可以解释一下我提供的示例它做了什么吗?