dijkstra算法在路由器中的路由表中的应用。
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。
一句话理解:最短加最短还是最短。
解析:从已知节点出发找的最小路径的边和顶点,将顶点加入到已知节点并形成无环图使整体和最小。
参考文献:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
一句话理解:最短加某个值还是最短。
解析:确定源节点,从已知的节点为出发点迭代找出到未知节点的最短路径,形成从某节点到所有节点最短路径。
Dijkstra算法 – 大概过程
创建两个表,OPEN, CLOSE。
OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
1. 访问路网中里起始点最近且没有被检查过的点,把这个点放入OPEN组中等待检查。
2. 从OPEN表中找出距起始点最近的点,找出这个点的所有子节点,把这个点放到CLOSE表中。
3. 遍历考察这个点的子节点。求出这些子节点距起始点的距离值,放子节点到OPEN表中。
4. 重复2,3,步。直到OPEN表为空,或找到目标点。
参考文献:
http://blog.csdn.net/todd911/article/details/9347053
http://blog.csdn.net/zrjdds/article/details/6728332
相同
贪心算法+迭代累加
区别
1:
Prim是计算最小生成树的算法,比如为N个村庄修路,怎么修花销最少。
Dijkstra是计算最短路径的算法,比如从a村庄走到其他任意村庄的距离。
2:
Prim算法中有一个统计总len的变量,每次都要把到下一点的距离加到len中;
Dijkstra算法中却没有,只需要把到下一点的距离加到cls数组中即可;
3:
Prim算法的更新操作更新的cls是已访问集合到未访问集合中各点的距离;
23 for (j=0;j<n;j++)
24 {
25 if (!visited[j] && map[j][nid]<adjset[j])//更新条件:j点未访问,加入新点后已访问集合到j的距离变小了
26 {
27 adjset[j] = map[j][nid];
28 }
29 }
Dijkstra算法的更新操作更新的cls是源点到未访问集合中各点的距离,已经访问过的相当于已经找到源点到它的最短距离了;
20 for (j=1;j<=n;j++)
21 {
22 if(!vis[j]&&map[nxt][j]<MAX&&(min+map[nxt][j])<cls[j])//更新条件:j点未访问,新点与j点之间有路,
23 cls[j]=cls[nxt]+map[nxt][j];
24 }
参考文献:http://www.cnblogs.com/CheeseZH/archive/2012/10/09/2717106.html
路由:静态配置,Rip协议,ospf 协议,BGP协议。