对于SPFA的一些理解(写给自己)

SPFA

算法优点:

    1.时间复杂度比普通的Dijkstra和Ford低。
    2.能够计算负权图问题。
    3.能够判断是否有负环

核心思想

我们采取的方法是动态逼近法:
1.设立一个先进先出的队列
2.每次取出队首元素,用队首元素到起点的最优值对与其相连的其他元素的到起点的最优值进行优化(a+b>c)正确性是显然的
3.当队列为空时及所有元素优化到不能再优化了,算法结束

SPFA对于负边权的处理

SPFA对于所有正边权都双向存边
对于所有负边权都单项存边
why???!!!
因为若对负边权双向存边的话,设a,b两点之间边权为-2,a->b b->a 。a,b可以互相无限松弛,没有个头,这样的话还怎么判断负环和单个的负边权呢!(重点重点重点)
||好了,如果单项存边,那么这个负边权只能由a->b被使用,b->a使用不了,所以可以满足要求

SPFA对于负环

由于负边权时单向储存的,假设三个点a,b,c;
a->b;b->c;c->a;
如果a,b,c转了一圈a点的值变小了的话,那么可以用a再一次更新b,b再一次更新a,a又获得一个更小值,如此往复;
如果当a进队超过n-1次那么一定存在负环,因为n个点的图,入度最大为n-1,若超过n-1,那么一定存在负环

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星和彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值