Dijkstra算法有多准确?

问题描述 投票:-3回答:2

是否有必要Dijkstra算法始终找到两个顶点之间的最短部分?

graph-algorithm dijkstra
2个回答
1
投票

是的,它确实。它一直是proven

Dijkstra算法的证明是通过对被访问节点数量的归纳来构造的。

不变假设:对于每个被访问节点v,dist [v]被认为是从源到v的最短距离;对于每个未访问的节点u,dist [u]被假定为仅通过受访节点从源到u旅行时的最短距离。仅在存在路径时才考虑该假设,否则将距离设置为无穷大。 (注意:我们不假设dist [u]是未访问节点的实际最短距离) 基本情况是当只有一个被访问节点,即初始节点源时,在这种情况下假设是微不足道的。

否则,假设n-1个访问节点的假设。在这种情况下,我们选择边缘vu,其中u具有任何未访问节点的最小dist [u],并且边缘vu使得dist [u] = dist [v] + length [v,u]。 dist [u]被认为是从源到u的最短距离,因为如果有一条较短的路径,并且如果w是该路径上的第一个未被访问的节点,则由原始假设dist [w]> dist [u]创建矛盾。类似地,如果没有使用未访问节点的路径更短,并且如果该路径上的最后一个节点是w,那么我们就会有dist [u] = dist [w] + length [w,u],矛盾。

在处理完之后,对于每个未访问的节点w,dist [w]仍然是仅使用被访问节点从源到w的最短距离,因为如果有一条较短的路径不能通过你,我们就会有以前发现它,如果使用u的路径较短,我们会在处理你时更新它。


0
投票

如果图中的所有边权重均为正,则Dijkstra算法会找到最短路径。但如果图形具有负权重则不起作用。为了在具有负边缘权重的图中找到最短路径,使用诸如Bellman-Ford的算法。

© www.soinside.com 2019 - 2024. All rights reserved.