Dijkstra 有向带权最短路径算法的简明阐释

Dijkstra 算法的目的就是计算在有向带权的完全联通图下从A点到B点所需要的最短路径,权重是路径的长度或者可以说是开销。也就是说,长度越短开销越少的路径的选择几率就越大。网上很多的文章引用了红蓝点来标记,不过上次看到wikipedia上的一副图后觉得,算法这个东西虽然写的越数学越显得有能耐,但既然写出来就是让人看的,为何不写的简明易懂。可能我以后学完Knuth的那本书后,就做一本民众都看得动的算法书好了。算法没那么难。

 

言归正传。

 

假设从A点到B点有以下路径关系:

 

从A出发,可以选择去C、D、E,距离分别是20、3、15。

从C点可以直接到B,也可以选择到F,距离分别是2、5。

从E点也到F,距离是20。

从D点可以到C、E点,距离分别是10,15。

从F点最后会到B,距离是20。

 

A ------20----------→  C  --------------2------------------- → B

                                ↑  ↘--------5--------↘

 ↘ ------3----------→  D                             F ---20------  ↑

                                ↓

↘ ------15----------→ E  -------20----------↑

 

 

线里面的数字就是权,也就是距离,比如 A->C 的距离是20,C->B的距离是1。显然从A->D->C->B是最优路径:3+10+2=15.

 

好那么,Djikstra 要怎么做呢?

 

 

步骤1:

我们从A点开始,比较A点到C、D、E三点的最短路径,同时,在C、D、E三点分别记录A点到这三个点的距离。

这样我们就会首先选择D点,并在C、D、E上分别标出:20、3、15。

步骤2:

我们从选择的D点开始,D点可以到C、E,距离分别是10、15,D点本身是3,于是标记C、E两点分别为:3+10=13、3+15=18.

这时,C点原先是20,现在是13,所以C点变为13.

E点原先是15,现在是18,保留15不变。

13<15,所以选择C点为下一个点。

步骤3:

C点可以去B、F点,距离分别是2和5.显然C点会选择B点。

B被标记为13+2=15

F被标记为13+5=18

因为到B点就结束了。所以算法就完成了。

 

毕竟这个只是sn个人理解而已,很有可能理解错了-_-!! 如果理解如果有错误,请指出,大家一起学习嘛。

 

以上!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值