《计算机网络自顶向下》之重头戏迪杰斯特拉算法

时间:2024-03-30 14:46:35

 

迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。

关于Dijkstra算法是如何工作的,下面我们通过一道例题来说明:

《计算机网络自顶向下》之重头戏迪杰斯特拉算法

首先以T到所有网络节点的最短路径为例

为了方便计算,避免后期因为人为的疏忽漏算或者算错,我们先把所有的其他点都列出来,像这样:
《计算机网络自顶向下》之重头戏迪杰斯特拉算法
其中N是指它开始的地方
《计算机网络自顶向下》之重头戏迪杰斯特拉算法
首先t与自己肯定为0,后选择一个与T连接最短的u;下一步TU,与x未直接相连,距离为infinity,同理得出w也为无穷;
与y直接相连,距离为7.....以此类推,它的规范写法如下:
《计算机网络自顶向下》之重头戏迪杰斯特拉算法

以此类推,如果你面前有好几条路要走,你一定要选择最短的那一条,这也是贪心算法的由来;

再举个例子:

以tuvw为例:到x的最短距离为3+4;到v的距离最短为4,到y的距离最短为7,规范表达如下:
《计算机网络自顶向下》之重头戏迪杰斯特拉算法
注意了!数字后面的字母表示的是与目标直接相连再N范围之内的节点!这里容易混淆。

总结一下

本文并没有着重与分析dijkstra算法的原理,而是采用一道经典的例题来剖析,适合于数学基础较低的同学,其中所涉及的图论等数学知识,感兴趣的读者可以自行去了解。

如有问题,欢迎私信或发邮件联系我:[email protected]