【问题标题】:Shortest path and sorting points in a 2-dimensional space二维空间中的最短路径和排序点
【发布时间】:2013-06-25 15:28:27
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    1. 为空间中的点构建空间划分树。
    2. 使用树找到离您的起点最近的点 p。
    3. 重复以下操作:
      1. 移动到点 p。
      2. 从树中删除 p。
      3. 将 p 设置为离您当前位置最近的点。

    希望这会有所帮助!

    【讨论】:

    • @Phpdna 他想要一个移动的物体。他可以通过支持有效地计算您放置对象的任何点发生的情况来获得它。
    • 是的。但是当它改变时将它插入到树中是移动和昂贵的。还有什么都有。黑白往往是一样的。
    • @Phphdna 我不确定你是否是这个意思,但我只需要计算到达目的地后要去的下一个地方,而不是在移动时改变方向。
    • @Phpdna 我希望您是故意拖钓,否则您的评论毫无意义。从四叉树中插入/删除很便宜,就像查找邻域中的所有点一样。在这种情况下,移动的点甚至不需要在树中。您只需要尚未访问过的点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多