[图论]Dijstra 算法的正确性证明

NOTE – dijstra算法的正确性非常依赖于边权值的非负。

原因是: 设V为所有点集, S为确定最短路径的点集,算法每次取V-S中与源点距离最小的点来松弛其他边,并将该点其加入S中.
反证法 + 归纳法
初始时,只有一个源点位于S中,加入S的为与源点直接距离最短的点k,并以k来松弛其他边。假设k’为松弛后与源点距离最小的点,则k’此时可以加入S,即此时k’与源点的距离为最短路径的长度,设其为d’。
假设d’非最短路径长度,即存在一个更短的路径.
思考d’如何得来的,其是通过源点 --- k --- k'得到。已知与源点直接相邻的点中k为最近点,并且边的权值为非负,因此不存在通过其他直接相邻的点t的更短路径.

以上思路可以写成更严格的归纳法.

    原文作者:Quasars
    原文地址: https://www.jianshu.com/p/dc177c73fab9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞