浅谈:狄克斯特拉算法Dijkstra找最小树问题

6.3.1狄克斯特拉算法(Dijkstra  algorithm,1959)

         计算两节点之间或一个节点到所有节点之间的最短路

对每个节点,用两种标号:
T

P
,表示从始点到该节点的距离,
P
是最短距离
(

)
,为永久标号,
T
是目前路径的距离,是临时标号。


通过不断改进
T
值,当其最小时,将其改为
P
标号。
开始时,令始点有
P=0

P
标号,其它节点为
T=+
¥
.
•标号过程分为两步: –1.修改T标号。假定 是新产生的P标号点,考察以 为始点的所有弧段  ,如果  是P标号点,则对该点不再进行标号;如果 是T标号点,则进行如下修改 –2.产生新的P标号点,原则:在
现有的所有T标号中将值最小者改为P标号

以上为狄克斯特拉的算法详述,为了让后来者有一个清晰的认识,对这个算法有一个理解,说白了就是要弄明白这个算法是怎么算的,个人是这样理解的(我的语文是数学老师教的,表达不好勿怪): 假设有一个网络,你可以在脑海里想象,网络把服务站连接起来,网络的线条错综复杂,交织在一起,我们的目的是在这个网络中找到一个“最佳网络”,这种“最佳网络”的要求:1、能把所有的服务站连接起来;2、要保证网络连线最短。    看一看狄克斯特拉是怎么算的:任意选择一个点a作为起点,算出与这个点相邻的点的距离(待会着重阐述距离这个问题),比较它们的大小,最小的距离就是我们得到的点b,a到b就是我们得到的第一条“网络连线”,接下来的操作,我们要仔细品味:在刚刚的操作的过程后,我们得到了a、b两个点,现在以a、b为“中心”,进行相同的操作,分别求出距离最短的点,这样我们得到了第三个点c,这样我们得到的连线是a-b-c,也可能是b-a-c;(请注意一点我们的网络连线没有方向,只要能把两个服务站连接起来就可以了),假如得到是a-b-c,那么以a、c为“中心”找出最短距离….以此类推        这里我们有必要对“最短距离”做出进一步的解释,就是怎么计算最短距离:        第i个服务站到第j个服务站的距离=起点到第1个服务站的距离+第1个服务站到第二个服务站的距离+…+第i-1个服务站到第i个服务站的距离+第i个服务站到第j个服务站的距离

如果我们没有讲清楚,下面的PPT的详解和例题会帮你做出进一步的理解        百度云最小树问题:http://pan.baidu.com/s/1bnud3KN

   欢迎交流:qq:545692102                                  2015.8.6  星期四  晴

     

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/qq_26512631/article/details/47319805
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞