私は以前に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
編集:
「私」がコードに期待していることの例を挙げます。コードが実際にそれを行っているのか、どのように行っているのかはわかりません。そのため、コードの解釈、特にプレフィックス ツリーのトラバースを求めています。
3 つの文字列/署名を含む次のプレフィックス ツリーがあるとします: s1 = 1110 s2 = 1100 s3 = 1001
入力シグネチャ s = 1000 があるとします。ここで、プレフィックス/トライのどのベクトルが入力ベクトル s に最も類似しているかを知りたいと考えています。s3 は最小のハミング距離 (1) であるため、コードがベクトル s3 を返すことを期待しています。
私が必要としているのは、コードが私が期待していることを実行しているかどうか、もしそうなら、どのように最も類似した署名を取得しているか、つまりどのようにツリーをトラバースしているかを説明してくれる人です。
コードが私が期待していることをしていない場合、誰かが私が提供した例を挙げてそれが何をするのか説明してもらえますか?