半路算法之Dijkstra——以路由算法的角度进行理解
前一阵无线传感网络课程(wsn)布置了一项任意语言任意环境实现dijkstra算法的作业。我一琢磨,好啊,之前一直喊着没时间安心搞算法,这次可以作为切入点啊!
不过,真正开始写之后才发现问题重重,自己要提升的地方还有很多。
捧出神器《算法导论》,翻到第六部分图算法中的Dijkstra算法开始研究:
Dijkstra算法解决了有向图G=(V, E)上带权的单源最短路径,且权值不为负。
即是说Dijkstra的适应问题有以下特征:单源、非负权、有向(虽然到现在我也不懂为什么老师给出的图是无向图,按照我的理解是它对无向图同样适用)。
且在尽可能的优化下,Dijkstra算法比Bellman-Ford算法效率高。
先列出算法的伪代码:
initialize-single-source(G, s)
S <- NULL
Q <- V[G]
while Q != NULL
do
u <- extract-min(Q)
S <- S+{u}