【问题标题】:In pathfinding, what is the difference between DFS and Dijkstra?在寻路中,DFS 和 Dijkstra 有什么区别?
【发布时间】:2017-12-07 09:25:26
【问题描述】:

我正在研究 DFS 和 Dijkstra。 在我的简单测试用例中,大多数都表明 DFS 更快。 在我的测试用例中,通过每个节点的成本相同。 但是大多数人更喜欢 Dijkstra 而不是 DFS 在寻路中,因为 Dijkstra 非常准确。

那么,DFS 和 Dijkstra 有什么区别? 另外,每种算法的优缺点是什么?

【问题讨论】:

  • 我不同意@Dukeling
  • @Fubar 是哪一部分,为什么...

标签: algorithm depth-first-search dijkstra path-finding


【解决方案1】:

DFS 一直沿节点跳跃,直到找到 a 路径,而 Dijkstra 更类似于 BFS,除了它跟踪权重(并非所有路径都具有相同的成本)并且将继续检查最短路径在到达目标之前尚未检查。

一般来说,DFS 是(通常)最快的找到路径的方法,并且可以通过递归非常容易地实现,但 Dijkstra 的算法是找到最短可能路径的最快一般方法.

在不太一般的情况下,有 A*,这是 Dijkstra 的算法,顶部有一些额外的启发式算法来猜测哪些路径可能最好先检查。这也将找到最短的路径,但如果您的启发式方法很好,可能会更快。

编辑:

我应该补充一点,如果您想要一个“相当不错”的快速路径并且可以使用启发式算法,那么如果您的图表没有太多死胡同,那么带有启发式算法的 DFS 通常是一个不错的选择。这称为Greedy Best First Search,是一种很好的、​​未充分利用的寻路算法,可用于例如游戏,您可以在其中设计地图以减少死胡同,或者 A* 非常昂贵的路线图。

【讨论】:

    【解决方案2】:

    他们中的大多数表明 DFS 更快

    DFS 速度更快,因为开销更少。 DFS 使用堆栈,弹出和添加到堆栈速度很快。 然而,使用堆实现的最有效的 Dijkstra,添加到堆的速度较慢。 DFS 的运行时间是 O(V + E),Dijkstra 是 O((V + E) log V)。注意到 Dijkstra 添加了 log V,这是添加到堆中的成本,因此它比 DFS 慢。

    大多数人在寻路中更喜欢 Dijkstra 而不是 DFS,因为 Dijkstra 非常准确。

    好吧,Dijkstra 从起点找到最短路径

    DFS 不保证最短路径,它只会生成访问图中非常节点的路径。

    BFS 也能找到最短路径

    Dijkstra 找到加权图的最短路径。如果图没有加权边,那么 BFS 或 Dijkstra 就可以了。

    【讨论】:

      猜你喜欢
      • 2014-10-16
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 2011-12-07
      • 2019-11-05
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多