国家集训队2009论文集spfa算法的优化及应用
29页1、SPFA算法的优化与应用,广东中山纪念中学 姜碧野,常见问题:,1、在负权图上判断是否存在负环,2、解决有环的动态规划转移方程,这些问题该如何解决?,引入,SPFA,内容概要,第一部分 简要介绍SPFA的基本实现,第二部分 提出SPFA一种新的实现方式,第三部分 介绍如何灵活使用SPFA解题,在本文中将看到:,SPFA 全称 Shortest Path Faster Algorithm 基本应用为快速求解单源最短路,灵活多变,相比其他同类算法有什么优点呢?,让我们来一起领略!,简洁优美,适用面广,Relax(u,v) If F(v)F(u)+W_Cost(u,v) then F(v)=F(u)+W_Cost (u,v); ,SPFA的核心正是松弛操作:,但松弛操作直接得出的Bellman-Ford算法效率低下 For Time=1 to N For (u,v)E Relax(u,v),上图数据中,总运算量高达N2 而边(S, A1)虽然被调用N次。 但实际有用的只有一次,SPFA则使用队列进行了优化!,思想: 只保存被更新但未扩展的节点。 减少了大量无用的计算,效率大大提高!,在上图的
2、例子中,每个节点只进队一次,只需N次运算。 相比Bellman-Ford优势明显。,但有负环时依然退化为O(NM),在1000000个点,2000000条边的随机数据中 SPFA甚至比使用堆优化的Dijkstra还要快。,能够改进吗?,长期以来基于队列的SPFA并未取得突破,传统的队列实现:,缺点:NewNode需要之前的元素全部出队后才能扩展 中断了迭代的连续性,猜想: 能否把NewNode放在Head后面进行下一次扩展?,Tail,New Node,尝试新的实现方法!,猜想,程序,图论中的基本算法 :深度优先搜索 基本数据结构:栈,SPFA_Dfs(Node) For (Node,v) E If disv disNode+w(Node,v) then disv=disNode+w(Node,v); SPFA_Dfs (v); ,核心思想: 每次从刚刚被更新的节点 开始递归进行下一次迭代!,后进先出!,判断存在负环的条件: 重新经过某个在 当前搜索栈中的节点,相比队列,深度优先有着先天优势: 在环上走一圈,回到已遍历过 的点即有负环。 绝大多数情况下时间为O(M)级别。,实战:Wor
3、dRings (ACM-ICPC Centrual European2005) 676个点,100000条边,查找负环。 DFS只需219ms!,一个简洁的数据结构和算法 在一定程度上解决了大问题。,优美的SPFA!,最坏情况下需要KM次运算,优化:随机调整边的顺序 则期望k+mLogk,优化无止境!,还有不足吗?,让我们结合一道题目来进行探讨,最短路问题其实只是SPFA迭代思想在图论 中的一个特例,在其他各类动态规划,迭代法解 方程,不等式等问题中往往也能发挥奇效!,苹果争夺战 两个人A,B在一个5*6的矩阵里抢夺苹果。矩阵包含空地,4棵苹果树和障碍物,每个苹果树上有3个苹果。A先行动,然后两人轮流操作,每一回合每人可以向四周移动一格或停留在一棵苹果树下,如果苹果树非空可以摘下一个苹果。 两人不能移动到矩阵外,障碍物上或是对方的位置,且两人绝顶聪明。 问A最多可以抢到多少个苹果。,A,B,此时B不能再向左移动 而A可以逐步摘下3棵树的所有苹果,A,B,开始时A无法移动,之后B一直不动, A无法得到任何苹果,问题分析: 经典的博弈模型,数据规模比较小,考虑动态规划,FX,Y,K表示轮到
《国家集训队2009论文集spfa算法的优化及应用》由会员腾****分享,可在线阅读,更多相关《国家集训队2009论文集spfa算法的优化及应用》请在金锄头文库上搜索。
2024-02-02 19页
2023-04-10 17页
2023-04-10 17页
2023-04-10 17页
2023-04-06 20页
2022-08-15 67页
2022-08-10 22页
2022-08-10 15页
2022-08-10 40页
2022-07-31 42页