3

高速アクセス(O(n)よりも優れている)でデータを保存する方法を見つけようとしています。

私のデータベースは、いくつかのアイテムに関するいくつかの情報を表すデータ(4096バイトの文字列)で構成されています。
問題は、クエリが決して正確ではないということです。1つのアイテムを取得し、関数を使用して最も近いものを見つける必要がありますF(a,b)

ほんの一例:

1234
3456
6466
F(a,b) = return % of similar digits  

GetClosest(1233,F) = 1234

問題は、F(a、b)が複雑なアルゴリズムであるということです(適切なメトリックではありません)。

私が今持っているのは、データベース全体を調べて、最適なものを検索することです。
複雑さをすばやく見つけることができる種類のツリーまたは他のクラスターデータベースタイプはありますか?

詳しくは:

Fは、%percentageで類似性の値を返します。ここで、100%は完全に一致します。

4

2 に答える 2

1

申し訳ありませんが、あなたが説明していない問題の構造が他にない限り、答えは「おそらくそうではない」です。4096バイトの文字列では、次元の呪いに悩まされています。

短い文字列と十分なデータがあり、文字列の大きなチャンクで最も近い一致が同一である可能性が高い場合は、文字列の異なるチャンクでインデックス付けされた複数のツリーのような構造でデータを保存できます。可能性が高いので、最も近いものは十分に近いので、それらの木の近い要素のみに基づいて最も近いことを証明できます。ただし、文字列のサイズとコンピュータに保存できるデータが限られているため、これが機能する可能性はありません。

そうは言っても、あなたは正確に最も近いものが必要ですか、それともやや近いものだけが必要ですか?近い可能性が高い場合は、ビットのいくつかのランダムなスパースサンプルによってインデックスを付けることができます。検索では、要素の1つに完全に一致する要素のみをチェックできます。これにより、検索スペースが大幅に削減され、近くにあるものの数が少なくなり、妥当な(頻繁に間違っている場合でも)回答が生成される可能性があります。

于 2011-05-10T14:44:06.227 に答える
0

各データに「スコア」を割り当てる方法はありますか。

スコアによってデータにインデックスを付けたり、シーケンスしたりできます。

検索するときは、検索条件にスコアを割り当て、スコアが最も近いアイテムを探します。

これが機能するかどうかは、データと「違い」の定義に大きく依存します。

于 2011-05-10T09:34:14.740 に答える