继续讨论迪杰特斯拉算法正确性

上一文中我们谈到了单源路径算法 迪杰特斯拉算法。

今天我们就来继续讲一下这个算法的正确性。如果有点忘记的同学们可以先点回去复习一下,尤其是注意一下迪杰特斯拉算法的贪婪规则。

我们怎么证明该算法的正确性呢?老规矩,我们使用数学归纳法(一般想不到什么好办法,就用这个办法吧)。

当X为空时,我们会选择与起点s点最近的点加入X,显然s到该点的最近路径选择是正确的。

我们假设已经有一个X了,且所有X中节点对应的最短路径以及长度均正确存储在A[v], B[v]中。

现在我们假设新加入一个点w时, 存在一条额外的路径使得该路径比迪杰特斯拉算法选择的路径还要更短。

如上图所示,我们假设v到w是算法选择的路径。注意此时y点不在X中。大家还记得迪杰特斯拉算法选择新的点加入X中的原则吗?我当时还强调了一下,上文中用红字显示的。即在所有从X出发的边中选择使得A[v^{\star}] + l_{v^{\star}, w^{\star}} 最小的(v, w)。 大家有没有发现我们是选择的一条边啊,表面上看起来是选择点加入X这个集合中。但是从X出发的边是不是有很多条,且起点可以是v 也可以是Z啊,因为v和z都在X中。

那么这里,如果算法选择了v到w,那么也就意味着v到w的距离A[v^{\star}] + l_{v^{\star}, w^{\star}}小于A[z^{\star}] + l_{z^{\star}, y^{\star}},显然就更加小于A[z^{\star}] + l_{z^{\star}, y^{\star}}+ l_{y^{\star}, w^{\star}}

 也就说明v到w 才是到w的最短路径。与我们前面的假设就矛盾了。至此我们证明了该算法的正确性。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值