Dijkstra算法的正确性

也请参阅附件!

假设:

在图V中存在1> n个节点和m个边。V可以是有向的或无向的。

2>所有边的权重是非负有限数。

Dijkstra算法的作用:

------------------------

它找到从特定节点到所有其他顶点的所有最短路径。

Dijkstra算法如何做到这一点:

----------------------------

在算法运行的任何时间点,我们都有2组节点。

集1的节点的最短路径已被发现。

集2具有最短路径尚未发现的节点。

同样,节点S的最短路径为0。

因此最初,集合1仅具有一个单个节点S.S距离S的路径最短,而S的距离为0。

我们称0为S的Dijkstra得分,并将其表示为D(S)。 我们将其存储在某个地方。

现在,我们检查从集合1到集合2的所有边。我们将D(S)分别添加到所有这些边

并比较结果。 结果为D(V)最小的节点V包含在Set 1中并排除在外

从组2中存储D(V)。

同样,在下一步中,将单独检查连接集合2的节点的S或V的所有边。

现在我们有2个Dijkstra分数D(S)和D(V)。 因此对于具有一个终点为S的边缘

将被添加到D(S),其他将被添加到D(V)。 找到最小结果D(U),其中节点为U​​。

U被包含在集合1​​中。U被排除在集合2中。存储D(U)。

这样,算法即可工作。 由于Set 2为空,它将停止。

节点的所有Dijkstra分数都是最短路径。

正确性:

------------

我们假设当第(K + 1)个节点添加到集合1中时,

Dijstra算法首次失败。 那意味着

第(K + 1)个节点是从S到最短路径有错误的第一个节点。

我们称节点K + 1的Dijkstra分数为D(K + 1)。

因此,直到第K个节点,所有dijkstra分数才真正成为最短路径。

我们假设从S出发的实际最短路径不是D(K + 1)。 ----假设1

因此,存在一条更短的替代路径。 这意味着该替代方案中的任何节点

路径到S的距离比值D(K + 1)小。 ----假设2

同样,这条最短的替代路径是从Set 1到Set 2的某个地方。

假设此交叉边缘连接节点J。显然,直到从S到该替代路径中的J为止,所有节点的Dijkstra得分均为距S的最短距离。

这是矛盾。 根据假设2,D(J)始终小于D(K + 1)。

因此,在集合1中包含第K个节点后,就永远不能包含第K + 1个节点

因为D(J)小于D(K + 1),所以在节点J之前进入集合1。

因此,假设1是错误的。

附加图片
文件类型:jpg Dijkstra_correctness.jpg (14.5 KB,896观看次数)

From: https://bytes.com/topic/algorithms/insights/951294-correctness-dijkstras-algorithm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值