我想在 3 到 20 维中存储 50 到 10 000 个向量。我想知道将向量存储在哪个结构中,以便能够快速解决最近邻或近似最近邻问题。我将使用欧几里得、曼哈顿、Max 和加权曼哈顿度量。
我开始研究这个问题并发现(如果我错了,请纠正我)当维数远小于向量数时,kd-trees 会做到这一点。性能可以是深度次线性的 (O(log(n)))。
问题是结构将发生非常迅速的变化。每个向量在程序过程中可以改变数千次。此外,向量不需要保持它们的大致位置或比例。整个结构可以“穿越”R^n。
问题在于,为了保持 kd-tree 的高性能,需要不时进行重新平衡。此操作可能与重建整个树一样昂贵。
如何解决kd-tree快速变化的问题?