茶艺师学算法打卡23:A*算法
学习笔记
省流版:
A* 算法是 Dijkstra 的优化版本,它只算出最短路径的次优方案。
Dijkstra 最短路径算法只考虑点与点的距离g(边权),而A还要考察该点到终点的曼哈顿距离h,最终以f = g + h为依据判断该点是否出列,最重要的是A计算到终点即停止计算得出结果
详细版:
-
Dijkstra 最短路径算法:
- Dijkstra 算法是一种用于计算图中节点之间最短路径的算法。
- Dijkstra 算法基于节点之间的边权重(距离)来计算最短路径。
- Dijkstra 算法使用贪心策略,每次选择距离起始节点最近的节点进行扩展。
- Dijkstra 算法适用于没有负权边的图。
-
A*算法:
- A*算法是一种启发式搜索算法,用于计算图中节点之间的最短路径。
- A*算法结合了 Dijkstra 算法的最短路径搜索和启发式搜索的思想。
- A*算法除了考虑节点之间的边权重(距离)外,还考虑了节点到目标节点的预估距离(通常使用曼哈顿距离或欧几里德距离)。
- A*算法使用启发式函数(heuristic function)来评估节点的优先级,计算公式为 f = g + h,其中 g 表示起始节点到当前节点的实际代价,h 表示当前节点到目标节点的估计代价。
- A*算法在搜索过程中根据 f 值的大小来选择下一个扩展的节点,以期望更快地找到最短路径。
-
额外:
- A*算法相比于 Dijkstra 算法,在搜索过程中引入了启发式函数,可以更快地找到最短路径,尤其在图中存在目标节点时效果更为明显。
- A*算法在计算到达目标节点时可以提前终止搜索,从而减少不必要的计算量,提高效率。