当初始位置估计错误时,您的导航软件如何更新推荐路线?
How does your navigation software update the recommended route when the initial position estimate was wrong?
您刚刚在 phone 上的导航软件中输入了目的地地址。它计算它认为花费最短时间的路线。
在您开车时,您会遇到一些 GPS 漂移,并且导航软件认为您已经在高速公路上驶出匝道。
我想从算法的角度想知道,当导航软件在一秒钟后估计出更准确的位置时,如何知道自己进行校正?这个问题看似简单,但我正在寻找一个非常具体的答案。
我猜测该应用程序在内存中存储了一个图形,其中包含多个节点,这些节点描绘了不同的道路位置(这也是它知道如何在正确的方向上绘制一条线)。当它猜测你在出口匝道退出时,它意识到你与它认为你去的节点的估计距离太远而不准确,所以它在图表上回溯并走另一条路并找到正确的节点。这个对吗?或者它更简单?它是否会进行 DFS 返回,直到找到最接近您当前位置的节点?[=10=]
那里有很多不同的导航系统,它们使用不同的算法,所以我怀疑是否有一个通用的答案,但是:
典型的 "textbook" 快速导航方法是双边略微修改的 Dijkstra。换句话说,你从头开始,用你到达那里的时间和你来自的节点标记所有直接连接的节点。
然后对连接到这些节点的节点重复该操作。冲洗,重复。如果您遇到一个以前见过的节点,您可以将 "new" 路径到达那里所花费的时间与已经标记在那里的时间进行比较。只有较短的幸存下来。
您可以从起点和终点交替进行。 (你可以有点聪明——例如,你很少会在错误的方向上在偏僻的道路上行驶 50 公里)。在某些时候,两棵树 "meet"。你基本上可以在你找到的所有可以从两端到达的节点之间做一个图形切割,并使用经过最短距离节点的路径。
现在,回到您的问题:您的导航系统发现您走了一条它不希望您走的路。没问题,该节点只能是直接连接到您所在节点的节点——其他节点不太可能,除非您可以传送。现在,如上所述,由于 Dijkstra 已经计算出到达该节点需要多长时间,所以这只是旋转树的问题。真的,如果你在做路线规划,这是非常标准的策略。
那么,您的问题很有趣!我建议您阅读 Dijkstra 算法。
您刚刚在 phone 上的导航软件中输入了目的地地址。它计算它认为花费最短时间的路线。
在您开车时,您会遇到一些 GPS 漂移,并且导航软件认为您已经在高速公路上驶出匝道。
我想从算法的角度想知道,当导航软件在一秒钟后估计出更准确的位置时,如何知道自己进行校正?这个问题看似简单,但我正在寻找一个非常具体的答案。
我猜测该应用程序在内存中存储了一个图形,其中包含多个节点,这些节点描绘了不同的道路位置(这也是它知道如何在正确的方向上绘制一条线)。当它猜测你在出口匝道退出时,它意识到你与它认为你去的节点的估计距离太远而不准确,所以它在图表上回溯并走另一条路并找到正确的节点。这个对吗?或者它更简单?它是否会进行 DFS 返回,直到找到最接近您当前位置的节点?[=10=]
那里有很多不同的导航系统,它们使用不同的算法,所以我怀疑是否有一个通用的答案,但是:
典型的 "textbook" 快速导航方法是双边略微修改的 Dijkstra。换句话说,你从头开始,用你到达那里的时间和你来自的节点标记所有直接连接的节点。
然后对连接到这些节点的节点重复该操作。冲洗,重复。如果您遇到一个以前见过的节点,您可以将 "new" 路径到达那里所花费的时间与已经标记在那里的时间进行比较。只有较短的幸存下来。
您可以从起点和终点交替进行。 (你可以有点聪明——例如,你很少会在错误的方向上在偏僻的道路上行驶 50 公里)。在某些时候,两棵树 "meet"。你基本上可以在你找到的所有可以从两端到达的节点之间做一个图形切割,并使用经过最短距离节点的路径。
现在,回到您的问题:您的导航系统发现您走了一条它不希望您走的路。没问题,该节点只能是直接连接到您所在节点的节点——其他节点不太可能,除非您可以传送。现在,如上所述,由于 Dijkstra 已经计算出到达该节点需要多长时间,所以这只是旋转树的问题。真的,如果你在做路线规划,这是非常标准的策略。
那么,您的问题很有趣!我建议您阅读 Dijkstra 算法。