鉴于10,000个64维向量,我需要找到距离任意点的欧几里得距离最小的向量。
棘手的部分是这些10,000个向量移动。我见过的大多数算法都假定了静止点,因此可以很好地利用索引。我想在每个时间步都重建索引会太昂贵。
以下是伪代码。
for timestep in range(100000):
data = get_new_input()
nn = find_nearest_neighbor(data)
nn.move_towards(data)
需要注意的一点是,每个时间步长的矢量只会移动一点点,约为1%-5%。一个非最佳解决方案是每~1000步重建索引。如果最近的邻居是近似的,则可以。也许使用每个向量动量会有用吗?
我想知道在这种情况下使用的最佳算法是什么?