我希望在3到20个维度中存储50到10,000个向量。我想知道在哪个结构中存储向量,以便能够快速解决最近邻居或近似邻近问题。我将使用Euclidean,Manhattan,Max和加权曼哈顿指标。
我开始阅读问题并发现(如果我错了,请纠正我),当维度的数量远小于向量的数量时,kd-tree将会这样做。性能可以是深度次线性的(O(log(n)))。
问题是结构会迅速变化。每个向量在程序过程中可以改变数千次。 此外,矢量不需要保持它们的大致位置或比例。整个结构可以“穿越”R ^ n。
问题在于,为了保持kd-tree的高性能,需要不时地进行重新平衡。此操作可能与重建整个树一样昂贵。
如何解决快速改变kd-tree的问题?
答案 0 :(得分:2)
您应该在不同的数据结构上运行amortized analysis算法。结果将根据您使用的特定数据结构的操作顺序而有所不同。
我建议你看看R-tree。查看静态网格可能也是一个好主意,因为如果对数据结构的更新比查询更频繁,那么更新该结构可能会表现得相当好。
如果对数据结构的更新频繁,那么最好不要总是在每次更改时更新数据结构,而是首先使用过时的数据结构,然后对所有更改的元素进行搜索。这样您就可以对数据结构进行批量更改,这可能会更有效。摊销分析也可以回答这一点。
您还应该查看可用于多维树的文献。他们肯定会找到更有效的数据结构操作建议或者你还没有想过的建议。但是我还不能推荐文献。