【问题标题】:Minimum manhattan distance with certain blocked points具有某些阻塞点的最小曼哈顿距离
【发布时间】:2013-06-10 10:13:04
【问题描述】:

笛卡尔平面中任意两点之间的最小曼哈顿距离是各自 X 轴和 Y 轴的绝对差之和。例如,如果我们有两个点 (X,Y) 和 (U,V),那么距离将是:ABS(X-U) + ABS(Y-V)。现在,我应该如何确定仅平行于坐标轴移动的几对点之间的最小距离,以便不需要在所选路径中访问某些给定点。我需要一个非常有效的算法,因为避免点的数量可以达到 10000 个,并且查询数量的范围相同。点的坐标将小于 ABS(50000)。一开始我会得到一组要避免的点,所以我可能会使用一些离线算法和/或预计算。

例如,(0,0) 和 (1,1) 之间的曼哈顿距离是 2 从路径 (0,0)->(1,0)->(1,1) 或 (0, 0)->(0,1)->(1,1)。但是,如果我们的条件是 (1,0) 和 (0,1) 不能被访问,则最小距离增加到 6。这样的一条路径将是:(0,0)->(0,-1 )->(1,-1)->(2,-1)->(2,0)->(2,1)->(1,1)。

【问题讨论】:

  • “选定路径中的某些点不需要访问”是什么意思?
  • 如果 (1,0) 和 (0,1) 不需要被访问,那么 (0,0) 和 (1,1) 之间的曼哈顿距离将不再保持 2. 简单原因因为我无法访问最小路径所需的点。在这种情况下,答案是 6。
  • 所以你的意思是那些点是障碍?
  • 是的!而且,我们显然必须沿着坐标点移动才能获得曼哈顿距离。
  • @divanshu 讲这么多是没有意义的。首先O(10^9)O(1) - 你误用了那个符号。其次,您所描述的寻路。人们一直在建议标准的寻路算法,而您似乎拒绝了它们。 -- 您的问题与标准寻路问题有何不同?

标签: algorithm coordinate-systems


【解决方案1】:

这个问题可以通过广度优先搜索或深度优先搜索来解决,其中广度优先搜索是标准方法。您也可以使用 A* 算法,它在实践中可能会给出更好的结果,但理论上(最坏情况)并不比 BFS 好。

这是可以证明的,因为您的问题简化为解决迷宫问题。显然,您可能会遇到很多障碍,以至于网格实际上变成了迷宫。众所周知,BFS 或 DFS 是解决迷宫的唯一方法。请参阅Maze Solving Algorithms (wikipedia) 了解更多信息。

我的最终建议:使用 A* 算法并希望最好。

【讨论】:

  • 不。迷宫绝对是一个非常不同的情况。它与所讨论的问题无关。我的问题比解迷宫简单得多。 A* 也会很慢。渐近地不是很好。
  • @divanshu 你说你有一个有障碍物的网格,那就是迷宫。
  • 迷宫有边缘而不是点。这里的点最多只能达到 O(10^4)。这是主要的收获。我可以处理每个障碍点,而在您的情况下,它是无法以任何方式处理的边缘。此外,迷宫是有界的。在这里,我知道除了给定的积分,其他都是免费的。答案完全取决于给定的点。我想这与迷宫有很大不同。
  • 有些迷宫的障碍物比其他迷宫少,或者它们是否有围墙,这在功能上仍然是相同的问题。正如我上面所说:A* 是您的最佳选择。
【解决方案2】:

您不了解此处的解决方案,或者我们不了解问题:

1) 你有一个笛卡尔平面。因此,每个节点恰好有 4 个相邻节点,由 x+/-1、y+/-1 给出(忽略边)

2) 执行 BFS(或 DFS,A*)。您只能遍历 x/y +/- 1。预先存储 10000 个障碍物,然后检查节点 x/y +/-1 是否可按需访问。您不需要真正的图形对象

如果太慢,你说可以离线计算——10^10 只需要 1.25GB 来存储索引障碍物查找表。让算法继续运行?

我哪里出错了?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2013-02-28
    • 2014-08-13
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多