gpt4 book ai didi

python - 从python中的前缀树返回最相似的位签名

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:43 25 4
gpt4 key购买 nike

我以前从未用 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 = 1110s2 = 1100s3 = 1001

enter image description here

假设我有输入签名 s = 1000。现在我想知道前缀/特里树中的哪个向量与输入向量 s 最相似。由于 s3 的汉明距离最小 (1),我希望代码返回向量 s3。

我需要有人向我解释代码是否正在执行我期望的操作,如果是,它如何获得最相似的签名,即它如何遍历树。

如果代码没有达到我的预期,有人可以根据我提供的示例解释它的作用吗?

最佳答案

class SignatureTrie:

@staticmethod
def getNearestSignatureKey(trie, signature):

digitReplacement = {'0': '1', '1': '0'}
targetKey = signature.to01() # string with 0 and 1
iteratingKey = '' # empty string

for i in range(len(targetKey)): # loop through targetKey string (i being an index)
iteratingKey += targetKey[i] # append char at position i
if not trie.has_prefix(iteratingKey): # if iteratingKey is not the trie
# flip last digit (0 if 1, 1 if 0) of iteratingKey
iteratingKey = iteratingKey[:-1]+digitReplacement[targetKey[i]]

return iteratingKey

关于python - 从python中的前缀树返回最相似的位签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17931866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com