Lecture 22

本文详细介绍了A*算法,一种在静态网络中求解最短路径的有效直接搜索方法。A*算法是代价优先搜索(UCS)的优化,通过贪心思想减少搜索空间。与Dijkstra算法不同,A*算法依赖于启发函数来指导搜索,而启发函数的选择直接影响算法的效率和准确性。文章通过N数码问题举例说明启发函数的应用,并对比了A*算法与回溯法的区别。
摘要由CSDN通过智能技术生成

绪论

前一章节,我们介绍了两种求解单源结点到其他所有结点最短路径(单源最短路径问题)的算法。但如果只是需要求解某一个结点到另一个结点的最短路径(或者求解少量的最短路径对),求解出单个结点到其他所有结点的最短路径就显得不那么必要(效率略低),我们需要设计出更适用于求解某一个结点到另一个结点最短路径的算法。

BFS显然是求解某一个结点到另一个结点最短路径的一种算法,这一章节介绍的A*算法则是在静态网络中求解最短路径最有效(?)的直接搜索方法。


Background && Idea

课件里对A*算法的描述除了绪论提到的“解决单个结点到单个结点最短路径问题”,“限定于静态网络”,还有“类似于Dijkstra算法”和“假设的最短路径”。

在这里插入图片描述
那什么叫做“类似于Dijkstra算法”呢?在学习Dijkstra算法时,课件上也提出了Dijkstra算法类似于Prim算法的说法。我们在Dijkstra算法的推演过程认为Dijkstra算法从某种意义上可以看作“Bellman-ford算法通过贪心的优化”:Bellman-ford优化的版本SPFA算法在每个阶段对前一个阶段所有发生变化的最短路径进行扩展,Dijkstra算法基于“长度越短的最短路径越接近于实际上的最短路径”这一“经验”每一轮只扩展当前网络长度最短的最短路径,最终通过数学方法证明的结果是Dijkstra算法在权都为非负值的网络中能够解决单源结点的最短路问题。

Prim算法则是基于Cut Property,每次选择当前网络中最短的一条边加入最小生成树森林。

两种算法在求解问题时,都是根据一定的依据(长度越短的最短路径越接近于实际上的最短路径,Cut Property)做出在当前看来是最好的选择,来避免为找最优解要穷尽所有可能而必须耗费的大量时间,在找到局部最优的结果后验证结果同样在整体最优或者讨论局部最优具体在哪些情况下最优。

这两种算法类似的思想我们往往称为贪心思想,A*算法是UCS(代价优先搜索)通过贪心思想的优化,与一般的贪心又略有不同,但思想上是一致的。


Algorithm Description

UCS是与BFS同类的搜索算法:

BFS以宽度作为搜索过程的顺序一层一层向外扩展,每一阶段搜索同一深度的所有节点,然后以该深度的所有结点扩展到下一深度的所有节点。由于在无权图(各边的权值相同)中,该点在搜索树的深度=起始点到该点的路径长度,所以BFS在无权图中可以作为一种寻找最短路径的方法。

UCS以代价作为搜索过程的顺序一层一层向外扩展,每一阶段搜索当前代价最低的结点,然后将该节点相邻的

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值