判断负环算法

  1. 负环的定义
    负环是指权值和为负数的环。负环会使图的最短路径计算陷入死循环,因此,存在负环的图不存在最短路。

  2. 负环的计算方法:
    负环有两种计算方法,都是基于Bellman-Ford算法或者SPFA算法。
    第一种算法是:统计每个点的入队次数,如果某个点入队大于等于n次,则说明有负环
    第二种算法是:统计到某个点的最短路所经过点的个数,如果经过n个点,则说明存在负环。
    (一般情况下,我们使用第二种算法)
    由于当负环存在时,SPFA会陷入死循环,且n是非死循环的最坏情况。所以以上两种算法是正确的。

  3. 求负环算法的编程实现
    首先将所有点的距离都赋值为0
    然后将所有的点入队。
    下面说明这两步的正确性:
    在这里插入图片描述
    算法的复杂度分析:
    SPFA算法的理论复杂度为O(m),但是在实际求负环中算法的复杂度接近O(mn)。这种算法复杂度是比较高的。但是,经验来看,当SPFA的复杂度比较高时,图中大概率存在负环。
    当所有点的入队次数和超过2n时,就认为图中大概率存在负环。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值