我正在寻找一个包含向量的数据结构,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 树或覆盖树之类的东西。
我的问题有以下特点:
- kd 树的维度太高(5 - 50 维度)
- 频繁的插入和删除
- 我总是很好地猜测哪个向量靠近查询
我想在用于连续数学优化的进化算法中使用这种结构。该算法包含大量候选解决方案。在此算法中,每个解决方案都应了解其周围环境。
通过稍微修改现有解决方案来创建新的候选解决方案。那是创建新解决方案的现有解决方案是我想要使用的提示。