R^n
どのベクトルがクエリに近い可能性があるかについて、ユーザーが提供したヒントを使用して最近傍クエリを実行できるベクトルを保持するデータ構造を探しています。例えば:
class NearestNeighborStructure;
...
NearestNeighborStructure structure;
Vector vec1 = {1,0,0};
Vector vec2 = {1,1,0};
Vector vec3 = {1,1,1};
structure.insert(vec1);
structure.insert(vec2);
structure.insert(vec3);
ここで、最近傍を見つけたいとします。
Vector query = {0,0,0};
不可解な理由で、私はそれvec2
が に非常に近いと信じていquery
ます。だから私は電話します:
Vector nn = structure.findNNusingHint(query, vec2); // vec2 is a hint
assert(nn == vec1); // vec1 is the correct nearest neighbor
データ構造は、私が提供したヒントを利用する必要があります。真の最近傍を取得するまで、それを改善する必要があります。
構造が挿入と削除をサポートしている場合のボーナス ポイント。
編集:
サブリニア時間で最近傍を計算できる構造を探しています。少なくとも場合によっては。kd treesやcover treesのようなもの。
私の問題には次の特徴があります。
- kd ツリーの次元が高すぎます (5 ~ 50 次元)
- 頻繁な挿入と削除
- どのベクトルがクエリに近いかについて、私は常に良い推測をしています
この構造を、連続的な数学的最適化に使用される進化的アルゴリズムで使用したいと考えています。アルゴリズムには、多数の解候補が含まれています。各ソリューションは、このアルゴリズムの周囲を認識している必要があります。
新しい候補ソリューションは、既存のソリューションをわずかに変更することによって作成されます。それが既存の解決策から新しい解決策を生み出すヒントです。