Dijkstra算法

105 阅读2分钟

1、算法原理:从起点出发,逐步锁定最短路线

Dijkstra算法是用来找“最短路径”的,比如从家到公司,有好几条路可以走,每条路的红绿灯数量、堵车情况不一样,怎么找到用时最短的路?这个算法的思路就是“先确定最近的点,再以它为基础找下一个最近的点”。

举个例子,假设起点是A,要到终点E,中间有B、C、D三个节点,路线和距离是A到B2公里,A到C5公里,B到C1公里,B到D3公里,C到D2公里,C到E4公里,D到E1公里。第一步先算从A到各个点的距离:A到B2,A到C5,A到D和E暂时算“无穷远”。现在最近的是B,就以B为基础,算从B到其他点的距离加上A到B的距离:A→B→C是2+1=3,比原来的A→C5更近,所以更新A到C的距离为3;A→B→D是2+3=5,记下来。

第二步,剩下的点里最近的是C(距离3),以C为基础算:A→C→E是3+4=7,A→C→D是3+2=5,和之前的A→B→D一样。第三步,剩下的点里最近的是D(距离5),以D为基础算:A→D→E是5+1=6,比之前的A→C→E7更近,更新A到E的距离为6。最后就得出A到E的最短距离是6,路线是A→B→C→D→E或者A→B→D→E。

2、核心特点分析

优点是实用性极强,能解决生活中很多“找最优”的问题,而且计算结果准确,它的逻辑也比较清晰,就是一步步“贪心”地找最近的点,容易理解。