異なる値を含むデータセットがあります:
Set1 = {X1, X2, ..., Xn}
Set2 = {X1, X2, ..., Xn}
...
X 値の範囲は異なります (これがまさに、問題を解決するために必要なアルゴリズムを理解できない理由です) - 一部は厳密に [0.0 - 1.0] 値であり、他の値は異なる/任意の範囲にある可能性があります。
これらのセットを「グループ化」する方法、つまり、指定された 2 つのセット間の「類似性」を見つける方法を見つける必要があります。
明らかに、各値を別の値と比較する "IF" ステートメントの長いチェーンを単純に書くことができ、それらが DELTA 量だけ異なる場合は、2 つの与えられたセットが "類似" していないことを示すことができます。問題は、私のセットが巨大で、動的データが含まれていることです。したがって、各セットのある種のハッシュ値を計算するための汎用関数が必要です(少なくともそれが私が考えている方法です):
int hash1 = HashFunction(Set1)
int hash2 = HashFunction(Set2)
if (|hash1 - hash2| < DELTA): 「セットは類似しています」を返す
実装方法のヒントやアイデアをいただければ幸いです。
アップデート:
コメントを読んで、質問を少し変更する必要があるかもしれないことに気付きました。良い「類似性」指標についての提案は何ですか?
「類似性」とは、セットの値がどの程度「近い」かを示す動的な値を意味します。たとえば、テスト セットSetA{ 0.5, 100 }がある場合、SetB{ 0.5, 100 }は 1 (または完全一致を示すその他の値) を生成する必要があります。同時に、SetAとSetC { 0.1, 300 }を比較すると、はるかに低い「一致」値が返されますが、SetD { 0.45, 101 }は「完全一致」に類似した値が返されます。ここで注目すべき重要な点は、たとえば、0.45 と 0.5 の値は、100 と 300 の値よりも「類似」しているということです。/ 最大(0.45, 0.5) < |100 - 300| /最大(100、300)。
単純に 2 つのセット間の値の差の合計を計算すると、意味のある結果は得られません (2 つのセットには (論理的な観点から) 完全に異なる数値が含まれている可能性がありますが、互いに相殺して誤った結果が得られるため)。