之前一直不能理解,为什么bellman-ford算法只需对所有的边最多执行v-1次松弛操作,即可完成单源最短路径的计算。
也查过很多资料,看过各种各样的解释。现在经过自己的总结,给出了自己的一个解释,在此记录,以作备忘。
不一定对,仅供参考。
这里将会使用倒推法来验证v-1。
1.把从源点到每个节点的最短路径看成是一条线,那么会有v-1条这样的线。(v是节点数量)
2.将所有的这些线进行整合、合并,在同一层级上的相同的节点转化成一个节点,那么会得到一个类似于树的结构。
3.当对所有的边进行第1轮松弛操作的时候,那么至少树的第一层的那些节点的最短路径就能确定了,对于其他也被松弛了的节点,不去做考虑。
4.同理,进行第2轮松弛操作的时候,至少树的第二层的那些节点的最短路径也能确定了。以此类推,进行第n轮松弛操作的时候,至少树的第n层的那些节点的最短路径也能确定。
6.所以,在最坏的情况下,当所有节点是一条链的时候,最多需要v-1轮的松弛操作。
7.可以看出,对于一般的图来说,就算是在最差的情况下,一般也不需要v-1轮的松弛操作。
8.可以从树高来算出最多需要多少轮次的松弛操作。