每天学一点算法-SPFA算法

SPFA算法


定义


发明人:邓凡丁

时间:1994

时间复杂度O(e)

原理:一个先进先出的queue队列,一个保存最短距离的数组D。

初始化时:queue中只有一个源点。也就是起始点自己。D中的数值除了起始点自己的距离为0外,其他都是最大值。

queue={V0},D={0,max,max,max...max},然后将Vo拿出来比对第J个顶点的距离max的值与0+(Vo到其邻近点距离)。如果max大于该值,则将max的索引值j放入到queue.即Vj放入queue中。挨个遍历知道queue为空。遍历结束。D中值为各点距离起始点最短距离。


以上图为例。V0到V1的距离为2,V0到V4的距离为10

V0->V1=2

V0-V4=10

V1-V2=3

V1-V4=7

V2-V3=4

V3-V4=5

V4-V2=6

初始值queue={V0},D={0,max,max,max,max};

第一步取V0:V0-V1=2,2<max,更新queue={0,2,max,max,max},将V1加入到D中,D={V1}

                         V0-V4=10,10<max,更新queue={0,2,max,max,10},将V4加入到D中,D={V1,V4}

第二步取V1:V1-V2=3,则V0-V1-V2 = 2+3=5;5<max,更新queue={0,2,5,max,10},D={V4,V2}

                         V1-V4=7,则V0-V1-V4=2+7=9<10,更新queue={0,2,5,max,9},将V4添加到D中,由于V4已存在,D={V4,V2}

第三步取V4:V4-V2=6,则V0-V4-V2=10+6>5,则不更新queue.D={V2}

第四步取V2:V2-V3=4,则V0-V2-V3= 5+4=9<queue。更新queue={0,2,5,9,9},将V3加入到D中,D={V3}

第五步取V3:V3-V4=5,则V0-V3-V4 = 9+5=14>9,不更新,D为空,结束。

OY!


时间复杂度


O(e)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值