二维空间中的最短路径和分类点

时间:2013-06-27 23:21:36

标签: algorithm sorting tree graph-algorithm shortest-path

假设我在二维空间中有一个对象,以及一组我需要该对象访问的点。积分可以随时添加,但不能删除。

我想要的是能够确定我的对象在O(lg(n))时间内的下一个最近点,然后转到它,然后确定下一个最近的等等。

简单优先级队列对此不起作用,因为对象正在改变位置,因此每次移动时都需要重新排列队列。我想象的是以某种方式将点分类为BST,但我不确定如何对(x,y)进行排序或者它是否可能。

感觉就像我试图解决traveling salesman而没有意识到这一点,如果是这样,我道歉哈哈。

1 个答案:

答案 0 :(得分:6)

一种选择是使用空间分区树(如四叉树或k-d树)来存储空间中的所有点。这些数据结构有效(通常在次线性时间内)支持“点p的最近点是什么?”形式的查询。然后,您可以执行以下操作:

  1. 为空间中的点构建空间分区树。
  2. 使用树找到最接近起点的点p。
  3. 重复以下步骤:
    1. 转到第p页
    2. 从树中删除p。
    3. 将p设置为最接近当前位置的点。
  4. 希望这有帮助!