1. 简介
广度优先算法可以找出段数最少的路径,但是对于路径上带权重的图,想要找出最快的路径,则需要使用狄克斯特拉算法。
2. 原理
为了说明狄克斯特拉算法的原理,使用换钢琴的的例子来做说明.
假设Rama想拿自己的乐谱换架钢琴:
- Alex说:“这是我最喜欢的乐队Destroyer的海报,我愿意拿它换你的乐谱。
- 如果你再加5美元,还可拿乐谱换我这张稀有的Rick Astley黑胶唱片。”
- Amy说:“哇,我听说这张黑胶唱片里有首非常好听的歌曲,我愿意拿我的吉他或架子鼓换这张海报或黑胶唱片。
- Beethoven惊呼:“我一直想要吉他,我愿意拿我的钢琴换Amy的吉他或架子鼓。”
商品兑换的关系如下:
现在需要确定,Rama如何才能以最少的钱换到他想要的钢琴。
狄克斯特拉算法解决问题的思路主要包括以下四步:
- 找出最便宜的节点,即可用最便宜的价格可前往的节点。
- 对于该节点的邻居,检查是否有前往它们的更短路径,如果有,就更新其开销。
- 重复这个过程,直到对图中的每个节点都这样做了。
- 计算最终路径
下面结合狄克斯特拉的算法步骤,对该问题进行推算。
2.1 找出最便宜的节点
对于乐谱而言,可以直接兑换唱片和海报,所需的费用分别为5和0.
为了观察的算法过程中数据的变化情况,使用一个表格来计算兑换的开销以及父节点的情况,对于目前开销的未知的节点用无穷大来表示,经过该步骤后,数据的情况如下:
父节点 |
---|