【技巧】浅谈Johnson算法

简介

Johnson算法主要用于求稀疏图上的全源最短路径。其主体思想是利用重赋权值的方法把一个原问题带负权的图转化为权值非负的图。然后再使用N次Dijkstra算法以求出全源最短路。
——姜碧野《PFA算法的优化与应用》

主要步骤

  1. 新建虚点S,S向每个点连边权为0的边;
  2. 以S为起点,跑全局SPFA,求出每个点到S的距离 f x f_x fx
  3. 把每条边边权重赋值;

设从u到v的边权为 w ( u , v ) w(u,v) w(u,v),重赋值以后就变成了: w ′ ( u , v ) = w ( u , v ) + f u − f v w'(u,v)=w(u,v)+f_u-f_v w(u,v)=w(u,v)+fufv
以下为原因:

设原来两点s,t之间最短路途径的点为 s , x 1 , x 2 , x 3 . . . . . , x k , t s,x_1,x_2,x_3.....,x_k,t s,x1,x2,x3.....,xk,t
d i ( s , t ) = w ( s , x 1 ) + w ( x 1 , x 2 ) + w ( x 2 , x 3 ) + . . . + w ( x k , t ) di(s,t)=w(s,x_1)+w(x_1,x_2)+w(x_2,x_3)+...+w(x_k,t) di(s,t)=w(s,x1)+w(x1,x2)+w(x2,x3)+...+w(xk,t)
重赋值以后变成了:
d i ′ ( s , t ) = w ′ ( s , x 1 ) + w ′ ( x 1 , x 2 ) + w ′ ( x 2 , x 3 ) + . . . + w ′ ( x k , t ) di'(s,t)=w'(s,x_1)+w'(x_1,x_2)+w'(x_2,x_3)+...+w'(x_k,t) di(s,t)=w(s,x1)+w(x1,x2)+w(x2,x3)+...+w(xk,t)
d i ′ ( s , t ) = w ( s , x 1 ) + f s − f x 1 + w ( x 1 , x 2 ) + f x 1 − f x 2 + w ( x 2 , x 3 ) + f x 2 − f x 3 + . . . + w ( x k , t ) + f x k − f t di'(s,t)=w(s,x_1)+f_s-f_{x_1}+w(x_1,x_2)+f_{x_1}-f_{x_2}+w(x_2,x_3)+f_{x_2}-f_{x_3}+...+w(x_k,t)+f_{x_k}-f_{t} di(s,t)=w(s,x1)+fsfx1+w(x1,x2)+fx1fx2+w(x2,x3)+fx2fx3+...+w(xk,t)+fxkft
d i ′ ( s , t ) = w ( s , x 1 ) + w ( x 1 , x 2 ) + w ( x 2 , x 3 ) + . . . + w ( x k , t ) + f s − f t di'(s,t)=w(s,x_1)+w(x_1,x_2)+w(x_2,x_3)+...+w(x_k,t)+f_s-f_t di(s,t)=w(s,x1)+w(x1,x2)+w(x2,x3)+...+w(xk,t)+fsft
d i ′ ( s , t ) = d i ( s , t ) + f s − f t di'(s,t)=di(s,t)+f_s-f_t di(s,t)=di(s,t)+fsft
发现, f s − f t f_s-f_t fsft这个东西是不变的,所以可得原图中两点之间的最短路径不变;

又因为三角不等式,所以有 f u + w ( u , v ) > = f v f_u+w(u,v)>=f_v fu+w(u,v)>=fv
所以: f u + w ( u , v ) − f v > = 0 f_u+w(u,v)-f_v>=0 fu+w(u,v)fv>=0,可知重赋值后全局边权为非负数;

所以,这样处理完以后就可以愉快的跑DIJ了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值