K Shortest Paths算法之Eppstein algorithm

这篇具有很好参考价值的文章主要介绍了K Shortest Paths算法之Eppstein algorithm。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Eppstein的算法是David Eppstein于1998年提出的一种高效且易于实现的k条最短路径寻找方法。它的时间复杂度为O(m + n log n + k),其中m是边的数量,n是节点的数量,k是要寻找的路径数。相较于其他方法,它具有较好的性能和实用性。

Eppstein algorithm的关键步骤

1.对于给定的图G(V, E),构造所有节点到目标节点D的最短路径树。

2.初始化一个优先级队列Q,将源节点S到目标节点D的最短路径P1放入队列Q。

3.对于每一条边(u, v),计算其对应的sidetrack边(u, v)。这里,sidetrack边(u, v)表示使用边(u, v)替换从u到目标节点D的路径上的某个边所带来的权重变化。delta(u, v) = w(u, v) - w(T(u)) + w(T(v)),其中w(u, v)表示边(u, v)的权重,w(T(u))表示从u到目标节点D在最短路径P1中的路径的权重,w(T(v))表示从v到目标节点D在最短路径P1中的路径的权重。

4.重复以下步骤K-1次,以找到K条最短路径:

  • 从优先级队列Q中取出权重最小的路径P。
  • 将路径P加入到最短路径列表中。
  • 对于路径P上的每个顶点v,找到sidetrack边(u, v)并计算新路径。将从源节点S到顶点u的路径P(u)与边(u,v)以及从顶点v到目标节点D的路径P’(v)连接起来,形成一条新路径P’。将新路径P’加入到优先级队列Q中。

5.返回找到的K条最短路径。

Eppstein algorithm图例

1和2.构造所有节点到目标节点D的最短路径树,并将源节点S到目标节点D的最短路径P1放入队列Q,我这里两步并为一步了
K Shortest Paths算法之Eppstein algorithm
3.假设图示的两个节点为u和v, 计算sidetrack边(u, v)所带来的权重变化:
delta(u,v)= w(u,v)-W(T(u))+W(T(v))= 6 - 10 + 8 = 4
K Shortest Paths算法之Eppstein algorithm
所谓的权重变化,就是如果流量往sidetrack边(u, v)走的话,整条路径的权重变化
K Shortest Paths算法之Eppstein algorithm
接着我们计算所有sidetrack边的权重变化值,将链路的weight改为权重变化值,如下图所示,注意,处在最小路径树上的边权重变化为0

K Shortest Paths算法之Eppstein algorithm

这样就计算出来第二段的路径A1=13+1=14,如下图,如果K=2的话那结果就是P1和A1
如果K>2的话,将A1加入到Q队列后,A1也成为最短路径树的一部分,此时的sidetrack边(u, v)变成除了P1和A1以外的边,再次重新计算所有sidetrack边(u, v)所带来的权重变化(可能会变化),并通过计算得到A2等
K Shortest Paths算法之Eppstein algorithm
总体体验下来,Eppstein的算法确实较于Yen的算法改进了不少,尤其是时间复杂度方面,而且算法本身也更加灵活

参考网站

Eppstein, David. “Finding the k shortest paths.” SIAM Journal on computing 28.2 (1998): 652-673.

https://epubs.siam.org/doi/pdf/10.1137/S0097539795290477?casa_token=O8yItNx7k4wAAAAA:wetCzycvyFhloRiOQU1M_W2S6cKzAb9kLWF06Lbx-OmqIb-MY9elNWN6H8E3whjK7Str-oDsdzQj文章来源地址https://www.toymoban.com/news/detail-485548.html

到了这里,关于K Shortest Paths算法之Eppstein algorithm的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法介绍 | 泛洪算法(Flood fill Algorithm)

    漫水填充算法、种子填充算法(Seed Fill) 用于确定连接到多维数组中给定节点的区域,可以用来标记或者分离图像的一部分,实现如Ps中自动选区功能。 顾名思义就像洪水漫过一样,把一块连通的区域填满。 当然水要能漫过需要满足一定的条件,可以理解为满足条件的地方

    2024年02月14日
    浏览(38)
  • Algorithm_01--C#递归算法

    ///递归算法本质: ///1、方法的自我调用 ///2、有明确的终止条件 ///3、每次调用时,问题规模在不断减少。通过递减,最终到达终止条件     问题:程序在输入1000后(即1到1000的和),程序会出现异常。 解答:百度后得出结论,栈溢出异常。 1、递归方法在每次调用自身时,

    2024年02月06日
    浏览(35)
  • 遗传算法 (Genetic Algorithm, GA)

    遗传算法(Genetic Algorithm,简称GA)起源于对生物系统所进行的计算机模拟研究,是一种随机全局搜索优化方法,它模拟了自然选择和遗传中发生的复制、交叉(crossover)和变异(mutation)等现象,从任一初始种群(Population)出发,通过随机选择、交叉和变异操作,产生一群更适合

    2024年02月05日
    浏览(36)
  • 遗传算法(Genetic Algorithm,GA)

    这是一篇关于遗传算法的总结博客,包括算法思想,算法步骤,python实现的两个简单例子,算法进阶(持续更新ing)。 遗传算法的应用很多,诸如寻路问题,8数码问题,囚犯困境,动作控制,找圆心问题(在一个不规则的多边形中,寻找一个包含在该多边形内的最大圆圈的

    2023年04月17日
    浏览(39)
  • 算法笔记:KM算法(Kuhn-Munkres Algorithm)

    带权二分图的最优匹配 问题 算法笔记:匈牙利算法_UQI-LIUWJ的博客-CSDN博客  匈牙利算法的一个问题是,找到的匹配不一定是最优匹配 因为算法将每个匹配对象的地位视为相同的,在这个前提下求解最大匹配 而很多时候,二部图连边是带权重的,在这个基础上的匹配才更贴近

    2023年04月09日
    浏览(35)
  • 【algorithm】算法基础课---二分查找算法(附笔记 | 建议收藏)

    🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝 📣系列专栏:AcWing算法学习笔记 💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊 ✉️ 如果无聊的话,就来逛逛我的博客栈吧 stack-frame.cn 关于我

    2024年01月18日
    浏览(38)
  • 关于Secure Hash Algorithm加密算法

    一、概述 SHA(Secure Hash Algorithm)加密算法是一种广泛应用的密码散列函数,由美国国家安全局(NSA)设计,用于保障数据的安全性和完整性。SHA算法经历了多个版本的更新,目前主要应用于各种网络安全和数据加密领域。 SHA在线加密 | 一个覆盖广泛主题工具的高效在线平台

    2024年02月04日
    浏览(42)
  • Algorithm_01--C#递归算法01

    ///递归算法本质: ///1、方法的自我调用 ///2、有明确的终止条件 ///3、每次调用时,问题规模在不断减少。通过递减,最终到达终止条件     问题:程序在输入1000后(即1到1000的和),程序会出现异常。 解答:百度后得出结论,栈溢出异常。 1、递归方法在每次调用自身时,

    2024年02月06日
    浏览(47)
  • 【智能优化算法】狼群算法 (Wolf Pack Algorithm, WPA),2013

    狼群算法((Wolf pack algorithm ,WPA)采用了基于人工狼主体的自下而上的设计方法和基于职责分工的协作式搜索路径结构。 吴虎胜等在 2013 年提出 模拟狼群捕食行为及其猎物分配方式 截止到 2023 年,算法引用趋势 狼是分布最广的群居群猎动物。有明确的社会分工,它们团结协

    2024年02月09日
    浏览(39)
  • 十大排序算法(Top 10 Sorting Algorithms)

    十种常见排序算法可以分为两大类: 比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 :不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因

    2024年02月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包