私は次のサブ問題があるアイデアを試しています:
m
固定長のタプルを含むsize のリストがありますn
。
[(e11, e12, .., e1n), (e21, e22, .., e2n), ..., (em1, em2, .., emn)]
(t1, t2, .., tn)
ここで、リストに属さないランダムなタプルが与えられた場合、リストに属する最も近いタプルを見つけたいと思います。
次の距離関数 (ハミング距離) を使用します。
def distance(A, B):
total = 0
for e1, e2 in zip(A, B):
total += e1 == e2
return total
1 つのオプションは、徹底的な検索を使用することですが、リストが非常に大きいため、これは私の問題には十分ではありません。私が思いついた他のアイデアは、最初kmedoids
にリストをクラスター化してK
medoid(クラスターセンター)を取得するために使用することです。クエリでK
は、distance 関数を呼び出して最も近いクラスターを特定できます。次に、その特定のクラスターから最も近いタプルを検索できます。うまくいくはずだと思いますが、クエリタプルがクラスターの端にある場合に問題がないかどうかは完全にはわかりません。
しかし、私の心は今完全に空白なので、問題を解決するためのより良いアイデアがあるかどうか疑問に思っていました. しかし、何か巧妙な方法があるのではないかと強く感じています。
何かを事前に計算する必要があるソリューションは、クエリの複雑さを軽減する限り問題ありません。