Dijkstra 简要证明

s 起点
d[v] ,v
集合S : 存在与S中的顶点V都满足 d[v]=最短路径

1.正确性引理
存在v点最短路径,s->… ->u->v,且u在S中,则当u点松弛v点后,d[v] 为最小值。

2.证明在dijkstra中选取的数组中最小的元素d[v]为该顶点的最短路径值
proof:
假设选取的最小数组元素不是最短路径值,存在路径s->….x->y->v 是最短路径,(x可能是起点s,y可能是顶点v),且x在S集合中,y不在S集合中。根据正确性引理,d[y]是最短路径值,且d[y]<=d[v]。如果y是v点,d[y]=d[v]且是最短路径,与假设矛盾。如果y不是v点,显然d[y]绝对小于d[v],那么d[v]就不是数组中最小的元素,与条件矛盾.

你可能感兴趣的:(计算-算法)