Dijkstra理解篇(不讲复杂的原理,只讲易懂的理解)

 

1.Dijkstra算法能干什么呢

       它能够解决单源最短路径问题。大家对于单源最短路径问题都众所周知。就是能够解决从A城市去B城市怎么走最快的问题(中途可以路过其他城市)。

 

2.Dijkstra算法的基本思想

       我们先来看一个案例,假设现在有个旅者想要从哈尔滨去山东,那么就有两种前往的方法。

       第一种:坐直达车直接从哈尔滨去山东。

       第二种:从哈尔滨先坐车到北京,然后再从北京坐车到山东。(从北京再转车去别的城市之后再去山东也是可以的)

       但是我们现在只知道哈尔滨到北京HB,哈尔滨到山东HS,北京到山东的路程BS。在只有这三个城市可以作为落脚点的情况下,我们只需要算出来直达所需要的路程d1 = HB,再算出途径北京中转所需要的路程d2 = HB + BS,然后一比较就可以了。

      

       现在我们来看一个更加复杂的例子:

       还是这个旅行者想要从哈尔滨去山东,但是他想了想,除了北京,沈阳可以作为中转城市。这种情况下,告诉我们哈尔滨到北京HB,哈尔滨到山东HS,北京到山东的路程BS,哈尔滨到沈阳HY,沈阳到北京YB,沈阳到山东YS。

       那么在计算途径北京再去山东的路程时,可以这样走:哈尔滨-北京-山东,也可以这样走哈尔滨-沈阳-北京-山东。如果再去北京之前先去沈阳能够更加节省路程,那么能够得到一种更好的方案。

       由于旅者有智慧,所以在做选择的时候,他会优先选择沈阳和北京中离哈尔滨更近的城市,再去计算这个城市到其他城市的距离,再做出选择。

 

       这就引出了我们Dijkstra算法的核心思想了。Dijkstra想要做得到事情是:

       1.首先,旅者一开始只知道各个城市之间的距离

       2.接着,旅者选择其中一个离起始点最近的城市(比如说是沈阳),计算以这个城市为中转的话到其他城市需要多少路程。如果比原来的方案更加近的话那么就将这个更好的方案记下来替代原来的方案。

       3.然后,因为沈阳已经计算过了,所以接着再从除开沈阳之外的城市中挑选一个距离起始点最近的城市,再次进行2的操作。如此反复只到所有的点都被作为中转站计算过一遍。

       4.这个时候就能够得出最短路径的方案了。

 

3.Dijkstra算法的使用条件

       适用于无向图(城市之间相互设置相同的权值,不互通的城市之间设为无穷大),有向图(对于单向:A->B设置权值,B->A设为无穷大),但是无法解决负权图(权值可能出现负数的图)。由于权值出现负数会与现实相矛盾,多绕路反而路程短。

      

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值