algorithm - 在寻路中,DFS 和 Dijkstra 有什么区别?

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

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

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

最佳答案

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

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

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

编辑:

我应该补充一点,如果您急需一条“相当不错”的路径并且可以使用启发式方法,那么如果您的图表没有太多死胡同,那么带有启发式方法的 DFS 通常是一个不错的选择。这叫做 Greedy Best First Search是一种很好的、​​未被充分利用的寻路算法,可用于例如游戏,您可以将 map 设计成几乎没有死胡同,或者 A* 非常昂贵的路线图。

关于algorithm - 在寻路中,DFS 和 Dijkstra 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47691649/

相关文章:

javascript - 三维数组上的 Dijkstra 算法

c++ - 有向图中两个给定节点的最近交汇点

python - 在 Python 中使用搜索算法解决三狼三羊之谜

algorithm - 使用深度优先搜索在图中查找循环

graph - 使用 DFS 检测图中的循环 : 2 different approaches and what's the difference

algorithm - 完全图中两个顶点之间的最短路径

algorithm - 如何更新 Dijkstra 算法中松弛顶点的 key ?

使用同步滤波器对图像进行抗锯齿的算法

ruby - 在此凯撒密码中, "print i[-1]"是如何从 z 换行到 a 的?

java - 如何对 map 进行排序或我需要遵循哪种遍历方法?