【发布时间】:2017-12-15 15:14:42
【问题描述】:
我正在寻找以下问题的有效解决方案。这应该适用于 python,但不必在 in python。
我有一个二维矩阵,矩阵的每个元素代表二维正交网格中的一个点。我想计算网格中几个点之间的最短距离。如果网格中没有“障碍”,这将是微不足道的。
图中的每个单元格都是矩阵的一个元素(矩阵是正方形的,但也可以是矩形的)。 灰色单元格是障碍物,两点之间的任何路径都必须绕过它们。 绿色细胞是我感兴趣的。我对红色细胞不感兴趣,但可以通过它们。
像A和B这样的点之间的距离计算起来很简单,但是如何计算如图所示的A和C之间的路径呢?
我已经阅读了A* algorithm,但由于我正在使用一个相当大的网格,通常是(几百)x(几百),我想知道是否有更智能的替代方案。请记住:我必须找到所有“绿色细胞”之间的距离,而不仅仅是其中两个之间的距离。如果我有 n 个绿色单元格,我将有多个等于二项式系数 (n 2) 的组合。
网格是固定的,我必须计算一次所有距离,然后它们会在进一步的计算中使用它们,比如根据矩阵中的相关索引访问它们。
注意:问题不是this one,坐标在列表中。我的 2D 坐标组织在 2D 网格中,问题是如何利用这一方面来获得更有效的算法。
【问题讨论】:
-
灰色和红色有什么区别?
-
如果你需要计算 all 最短距离,那么你有(大致)要存储的绿色单元格距离数的平方;修复网格如何解决这个问题?
-
灰色和红色:如前所述,灰色是障碍物,路径不能通过它们。红色只是“无趣”的点,实际上是缺少数据,无需获取与它们的距离。可能无关紧要,但我想我会提到它。
-
关于“所有最短距离”:不,它不是绿色单元格(n)数量的平方,它是二项式系数(n 2),两个单元格的(无序)组合在所有的绿色中。与网格固定这一事实没有直接关系。
-
您可以在this visualisation of search algorithms 中尝试您的数据的可能情况并决定哪一种可能获得最快的结果。
标签: python arrays matrix distance a-star