ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SPFA 的优化

2022-04-04 10:31:06  阅读:215  来源: 互联网

标签:temp 队列 入队 SPFA 优化 dis


众所周知,SPFA作为一种暴力单源最短路算法,卡掉它并不是什么难事,毕竟,毕竟。

如果想卡 SPFA 见:「笔记」如何优雅地卡 Spfa - Luckyblock

但是我们可以优化……

但是优化也可以卡

SLF 优化

\(Small \ Label \ First\) 优化(小标签优先)。用双端队列 \(deque\) 实现,常用。

就是更新完之后比较其 \(dis\) 值与 \(dis[q.front()]\) 的大小,如果较小则放前面,反之放后面。

原理就是 \(dis\) 值小的更容易更新其他节点的 \(dis\) ,使队列后面的节点尽量不满足 \(dis[v]>dis[u]+w\),这样就避免了一部分的重复入队。

复杂度 \(\mathcal{O(\text{玄学})}\)。

LLL 优化

\(Large\ Label\ Last\) 优化(大标签最后)。

设队首元素为 \(temp\) ,每次松弛时进行判断,队列中所有 \(dis\) 值的和为 \(sum\),队列元素个数为 \(num\)。

若 \(dis[temp] \cdot num > sum\) ,则将 \(temp\) 取出插入到队尾,查找下一元素,直到找到某一个 \(temp\) 使得 \(dis[ temp ] \cdot sum \le x\) ,则将 \(temp\) 出队进行松弛操作。

和 SLF 优化原理差不多,因为比平均值小的 \(dis\) 更容易更新别的 \(dis\) 从而减少入队次数。

SLF + LLL 优化

因为这俩玩意互不影响,一个判出队,一个判入队,结合起来一样用。

就像 T-34-85 遇见了 SU-100,同志柏林见。

DFS优化

这玩意可以判环,因为依靠队列判环至少需要一个点重复进队 \(n\) 次,所以极易 GG。

DFS 优化可以凭借一个 \(vis\) 数组将判环的复杂度降到到 \(\mathcal{O(\text{E})}\)

蛋是,要是没环,见 LB 如何卡 SPFA 。

复杂度指数级。

标签:temp,队列,入队,SPFA,优化,dis
来源: https://www.cnblogs.com/BlackDan/p/16098485.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有