迪杰斯塔拉

对迪杰斯特拉的理解:

    迪杰斯塔拉算法可以找到单源点到其他结点的最短路径。做法是先找到一条最短的路径,再用该路径去更新当前保存的到每个结点的路径值;再找到一条次短路径,用该路径再去更新......直到计算出到所有路径的距离。

迪杰斯塔拉算法要求路径权值非负:

解释1:

    Dijkstra算法当中将节点分为已求得最短路径的集合(记为S)和未确定最短路径的个集合(记为U),归入S集合的节点的最短路径及其长度不再变更,如果边上的权值允许为负值,那么有可能出现当与S内某点(记为a)以负边相连的点(记为b)确定其最短路径时,它的最短路径长度加上这条负边的权值结果小于a原先确定的最短路径长度,而此时a在Dijkstra算法下是无法更新的,由此便可能得不到正确的结果。求带负权值边的单源最短路径可以用贝尔曼-福特算法。

解释2(举例子):

    因为dijkstra算法在计算最短路径时,不会因为负边的出现而更新已经计算过的顶点的路径长度,这样一来,在存在负边的图中,就可能有某些顶点最终计算出的路径长度不是最短的长度。
    考虑有三个顶点,三条边:(1,2,1),(1,3,2),(2,3,-3),最终计算出的路径长度是(1,2,最短路径为1),(1,3,最短路径为-2),但明显存在(1,2,最短路径-1)这条更短的路径。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值