spfa优化
来源:互联网 发布:中行外汇行情分析软件 编辑:程序博客网 时间:2024/06/10 01:20
SPFA对于稀疏图非常的有用,然而对于稠密图就是辣鸡吗?(还是很厉害的)。
稠密图可以使用dij,因为它稳定,但是SPFA真的败给了稠密图了吗?
答案是不是的,优化强着呢,杠杠滴~
优化一:SLF
怎么做呢?
假设我们当前在跑SPFA的最短路(下面都是)。
设我们的队头为i,要加进去队列的数为j,那么我们就可以根据最短路,加出如下优化
若dis[j]小于dis[i],那么j加进队列的开头,反之,加入队尾。
为什么呢?因为j比i更有可能是最短路的一个点,所以我们先进行如何?
实现怎么弄?
因为head=1必定不可能进行如上情况。
只有head>1才有如上情况。
我们先把head-2,因为当前队头为head,下一次+1就到了head-1了
然后j放在head-1上:
优化20%左右
且是针对负数的
begin if dis[b[x,i]]<dis[d[head]] then begin dec(head,2); d[head+1]:=b[x,i]; end else begin inc(tail); d[tail]:=b[x,i]; end;end;
优化二: LLL
我们可以算出所有队列(head~tail))的元素的dis值的和,然后求出平均数
如果当前的队头i的dis值比这个平均值大,也就是说,后面有存在比这个点更加有可能为最短路的值
那么把队头的数放到队尾
每次如此,知道有一个小于等于平均值。
inc(head); ans:=0; for i:=head to tail do ans:=ans+dis[d[i]]; ans:=ans/(tail-head+1); while dis[d[head]]>ans do begin inc(tail); d[tail]:=d[head]; inc(head); end; x:=d[head];
加上两个优化,跑的会快很多的。
阅读全文
1 0
- spfa优化
- Spfa优化小结
- SPFA的两个优化
- SPFA的两个优化
- spfa 的 slf 优化
- spfa优化 SLF LLL
- SPFA的两个优化
- SPFA模板(SLF优化)
- SPFA 判环优化
- spfa判负环优化
- SPFA算法 Bellman_ford优化
- 堆优化SPFA
- SPFA优化总结
- SPFA经典优化
- 对于SPFA的优化
- SPFA以及其优化
- [图论] SPFA + SLF优化
- 对于SPFA的优化
- 2017年8月18日训练日记
- 公网ip访问服务器网站(博客)
- C语言之常见错误解决办法
- 高并发解决方案
- 文章标题
- spfa优化
- 2017广东工业大学程序设计竞赛决赛:G. 等凹数字(数位DP)
- HDU1087 Super Jumping! Jumping! Jumping!(dp问题)
- HDU 6129 Just do it【杨辉三角】
- 2017.08.18 利用python打印一年的日历
- 图的基本存储的基本方式二——邻接表(链表)
- heroku 自动部署create-react-app项目
- google books ngram viewer数据集的下载与使用
- OJ中的语言选项里G++ 与 C++的区别