为啥不能处理负权?
首先我们要清楚一个点:Dijkstra是每次贪心的选择跟当前邻接的点,而不会去考虑处邻接之外的其他点
而如果所有Dijkstra算法适用于不存在负权边的图(有无向均可),这个是因为迪杰斯特拉算法是基于贪心策略,每次都找一个距源点最近的点,然后将该距离定为这个点到源点的最短路径;但如果存在负权边,那么直接得到的最短路不一定是最短路径,因为可能先通过并不是距源点最近的一个次优点,再通过一个负权边,使得路径之和更小,这样就出现了错误。如下:

1——>2权值为5,1——>3权值为6,3——>2权值为-2,求1到2的最短路径时,Dijkstra就会选择权为5的1——>2,但实际上1——>3——>2才是最优的结果。
另外如果包含负环,则意味着最短路径不存在。因为只要在负权回路上不断兜圈子,所得的最短路长度可以任意小。负数的绝对值越大,该值就越小。
本文探讨了迪杰斯特拉算法在处理图中负权边时的局限性。由于Dijkstra算法基于贪心策略选择最近顶点,负权边可能导致无法找到最短路径。例如,在存在负权回路的情况下,最短路径甚至不存在,因为路径可以通过负权回路无限缩短。文章通过实例解释了为什么Dijkstra不适用于包含负权边的图,并强调了负权边对算法的影响。
3609

被折叠的 条评论
为什么被折叠?



