Dijkstra算法证明

上文
Dijkstra最短路径搜索算法非常著名,该算法适用于权重非负的加权有向图中最短路径搜索.

Dijkstra最短路径搜索算法:
使用distTo[]索引数组记录搜索起点到节点i的路径长度.若当前最短路径搜索起点为s, 初始化distTo[s]为0, 其余元素为正无穷大.
每次选择distTo[]元素最小且尚未被松弛的节点进行邻边松弛, 当所有节点松弛完毕后, 所有从s可达的节点v的最短路径均搜索完成.

证明:
假设,当前未被松弛的节点中,有 d i s t T o [ v ] distTo[v] distTo[v]最小, 对节点 v v v的所有邻边 v − > w v->w v>w进行松弛, 若当前松弛成功, 则 d i s t T o [ w ] = d i s t T o [ v ] + W v − > w distTo[w] = distTo[v] + W_{v->w} distTo[w]=distTo[v]+Wv>w, 由于图中所有边权重均非负, 因此 d i s t T o [ w ] > = d i s t T o [ v ] distTo[w] >= distTo[v] distTo[w]>=distTo[v]. 如松弛失败, 则 d i s t T o [ w ] distTo[w] distTo[w]未更新, d i s t T o [ w ] > = d i s t T o [ v ] distTo[w] >= distTo[v] distTo[w]>=distTo[v].综上, 在节点 v v v完成其邻边的松弛后, 图中的其他未松弛节点 d i s t T o [ ] distTo[] distTo[]值均大于 d i s t T o [ v ] distTo[v] distTo[v],因此 v v v节点不会在后续被其他节点松弛, 因此在完成节点 v v v的松弛后, d i s t T o [ v ] distTo[v] distTo[v]的值即为起点 s s s v v v的最短路径. 当所有节点均完成松弛后, 不存在任意边能够对节点进行松弛, 因此根据最短路径最优性条件,起点 s s s到其他可达顶点的最短路径均完成搜索.
根据该推论, 由于已被松弛过的节点不会在后续其他节点松弛过程中进一步松弛, 因此每一步只有未被松弛的节点 w w w, 其 d i s t T o [ w ] distTo[w] distTo[w]会发生变化.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值