我正在阅读关于dijkstra算法和A * star算法的文章。我知道不同之处在于启发式使用。但什么是启发式以及它如何影响算法?启发式只是衡量距离的一种方法吗?但是dijkstra也考虑了距离?对不起,但我的问题是关于启发式的,它意味着什么以及为什么要使用它们...(我读过它,但不明白) 其他问题:什么时候应该使用?
谢谢
答案 0 :(得分:3)
在这种情况下,启发式算法是一种为算法提供某种形式的额外评估信息的方法,因此算法可以找到“足够好”的解决方案,而无需详尽地搜索每个可能的解决方案。
Dijkstra的算法不使用启发式算法。它从起始节点向外扩展,并检查图中的每个节点以找到最短路径。虽然这是准确的,但它的计算成本可能很高。
相比之下,A *算法使用距离+成本启发式,来指导算法选择下一个要探索的节点。这意味着该算法在不检查图上的每个节点的情况下找到可能的搜索解决方案。因此,运行成本要便宜得多,但却完全失去了准确性。它的工作原理是因为结果通常足够接近最优解,并且发现比对整个图的详尽搜索更便宜。
至于何时应该使用它们,它实际上取决于应用程序。但是,使用A *算法需要允许的启发式算法,因此这可能不适用于算法无法获得此类信息的情况。
答案 1 :(得分:1)
启发式基本上意味着一个想法或直觉!您用来解决难题的任何策略都是启发式的!在某些领域(如组合问题),它指的是可以帮助您在多项式时间内次优地解决NP hard问题的策略。
答案 2 :(得分:1)
Dijkstra解决了单源路由问题,即它为您提供了从单点到空间中任何其他点的成本。
A *解决了单源单目标问题。它为您提供从给定点到另一个给定点的最小距离路径。
A *通常比Dijkstra快,只要你给它一个可接受的启发式算法,这就是对目标距离的估计,永远不会过高估计距离。与此处给出的先前答案相反,如果使用的启发式是可接受的,则A *已完成并将为您提供最佳答案。