狄克斯特拉算法

1.理解算法:

懒,找走最近的路

2.适用条件:

正权边(负的不适用)


3.贝尔曼-福德算法

适用条件:

适用于包含负权边的图

4.换钢琴的实例

这是交换物品的一张图,乐谱是起点(已经有的东西),现在需要花最少的钱来还到钢琴。

第一步:从起点(乐谱)出发,找到最便宜的节点。

这里只有两个节点,一个是唱片(权值为5),一个是海报(权值为0),所以选择海报这个节点。

第二步:计算前往该节点(海报)的各个邻居的开销。

父节点 节点 开销

乐谱 唱片 5

乐谱 海报 0

海报 吉他 30

海报 架子鼓 35

— 钢琴 ∞

第三步:再次执行第一步。下一个最便宜的节点为唱片。

第四部:再次执行第二步。计算前往该节点(唱片)的各个邻居的开销。

父节点 节点 开销

乐谱 唱片 5

乐谱 海报 0

唱片 吉他 20

唱片 架子鼓 25

— 钢琴 ∞

第五步:更新开销。

发现通过唱片到吉他和通过唱片到架子鼓的开销更小。所以将架子鼓和吉他的父节点更新为唱片。

第六步:重复第一步。现在起点变成了唱片。下一个最便宜的节点是吉他。

第七步:重复第二步。计算前往该节点(吉他)的各个邻居的开销。

父节点 节点 开销

乐谱 唱片 5

乐谱 海报 0

唱片 吉他 20

唱片 架子鼓 25

吉他 钢琴 40

第八步:重复第一步。起点是唱片,除了吉他,下一个最便宜的节点是架子鼓。

第九步:重复第二步。计算前往该节点(架子鼓)的各个邻居的开销。

父节点 节点 开销

乐谱 唱片 5

乐谱 海报 0

唱片 吉他 20

唱片 架子鼓 25

架子鼓 钢琴 35

第十步:更新开销。

通过架子鼓到钢琴更便宜,所以钢琴的父节点更新为架子鼓。

至此,就找到了从乐谱到各个节点的最便宜的方案,例如要还到钢琴,就需要35元。怎么确定路径呢?根据父节点向前推导就可以知道这条路径了。

你可能感兴趣的:(狄克斯特拉算法)