如何看待 SPFA 算法已死这种说法?

论坛 期权论坛 爱问     
nqluc   2022-5-24 12:36   2262   0
属实。
在非负边权的图中,随手卡 SPFA 已是业界常识。在负边权的图中,不把 SPFA 卡到最慢就设定时限是非常不负责任的行为,而卡到最慢就意味着 SPFA 和传统 Bellman Ford 算法的时间效率类似,而后者的实现难度远低于前者。
SPFA 的受到怀疑和最终消亡,是 OI 界水平普遍提高、命题规范完善和出题人的使命感和责任心增强的最好见证。

Update:
为了激励并推广卡 SPFA 这一行为,我提供一种最简单的卡 SPFA 的方法(同时适用于有向图和无向图):
Step 1 生成一棵以起点为根的树,树高尽量高(比如 1 为起点时,可以令每个点 i 的父亲在 max(i-5,1) 到 i-1 随机),边权随机,作为最短路径树,同时直接递推求出每个点的带权深度 d(i)
Step 2 对于剩下的边,端点 (a, b) 随机,边权在 |d(b)-d(a)| 到 |d(b)-d(a)|+5 随机(如果是有向图则去掉绝对值符号,5 可以换成其他较小的正数)
这样生成的图中,次短路的条数非常的多,而 SPFA 一旦错误地进入了次短路的分支,就会使得一整棵子树被赋错误的距离,从而在后期不得不重新更新。而由于边权接近,剪枝的效果会受到很大影响。
这个生成方法代码简单易写,只需要大量的随机,不需要构造网格等特殊结构,生成器中甚至不需要建图 ,适合所有有责任心的出题人使用。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP