假设我在二维空间中有一个对象,以及一组我需要该对象访问的点。积分可以随时添加,但不能删除。
我想要的是能够确定我的对象在O(lg(n))时间内的下一个最近点,然后转到它,然后确定下一个最近的等等。
简单优先级队列对此不起作用,因为对象正在改变位置,因此每次移动时都需要重新排列队列。我想象的是以某种方式将点分类为BST,但我不确定如何对(x,y)进行排序或者它是否可能。
感觉就像我试图解决traveling salesman而没有意识到这一点,如果是这样,我道歉哈哈。
答案 0 :(得分:6)
一种选择是使用空间分区树(如四叉树或k-d树)来存储空间中的所有点。这些数据结构有效(通常在次线性时间内)支持“点p的最近点是什么?”形式的查询。然后,您可以执行以下操作:
希望这有帮助!