K Shortest Paths算法之Eppstein algorithm

news2024/9/27 23:34:57

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,我这里两步并为一步了
在这里插入图片描述
3.假设图示的两个节点为u和v, 计算sidetrack边(u, v)所带来的权重变化:
delta(u,v)= w(u,v)-W(T(u))+W(T(v))= 6 - 10 + 8 = 4
在这里插入图片描述
所谓的权重变化,就是如果流量往sidetrack边(u, v)走的话,整条路径的权重变化
在这里插入图片描述
接着我们计算所有sidetrack边的权重变化值,将链路的weight改为权重变化值,如下图所示,注意,处在最小路径树上的边权重变化为0

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/637370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

路漫漫其修远兮

其实不仅是专业,AI冲击波才刚刚开启,包括博客、自媒体作用也在大幅度下降呢。 很多人看过如下这幅图: 提示工程师确实是在当前大型语言模型不够完善的情况下,通过微调输入的方式来提高模型的性能。随着模型的迭代,这些…

算法模板(8):网络流(1):最大流

算法模板(8):网络流(1):最大流 网络流基本概念 基本概念 流网络,不考虑反向边可行流,不考虑反向边 两个条件(根据《算法导论》,这两个条件可以看作可行流的充…

mapbox实现线要素的文字标注功能

效果图 操作步骤 首先查看mapbox自己的api里面有没有,好像里面并没有类似于line-text的属性 然后打开mapbox studio,发现里面确实是有这种样式的,他的图层名字叫 然后我们下载下来这个样式 打开style.json文件之后,找到这个图…

【数据可视化】Plotly Express绘图库使用

Plotly Express是一个基于Plotly库的高级Python可视化库。它旨在使绘图变得简单且直观,无需繁琐的设置和配置。通过使用Plotly Express,您可以使用少量的代码创建具有丰富交互性和专业外观的各种图表。以下是Plotly Express的一些主要特点和优势&#xf…

Maven教学--上

Maven教程–上 先看一个问题,引出Maven 需求说明/图解 编写一个类, 有一个方法sum,可以返回两个数的和编写测试类TestSum, 可以测试sum 是否正确. 使用传统方式完成 创建传统的java 项目java-hello 创建Hello.java public class Hello {public S…

【30天熟悉Go语言】5 Go 基本数据类型

文章目录 一、前言二、数据类型总览1、基本数据类型1)数值型-整数类型1> 有符号整数类型:2> 无符号整数类型:3> 其他整数类型:4> PS:Go的整数类型,默认声明为int类型:5> 变量占用的字节数 2…

PowerShell系列(六):PowerShell脚本执行策略梳理

目录 1、执行策略等级 2、执行策略范围 3、执行策略命令语法格式 4、执行策略常用命令 PowerShell 是一种用于操作 系统的命令行界面,支持跨平台,它提供了许多功能来自动化和优化各种任务。PowerShell 是由微软官方开发的,并作为 Windows Ser…

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

从横空出世到掀起高潮,当下,AIGC(人工智能生成内容)模式下的ChatGPT它正以惊人的速度席卷各个领域,在线教培行业也不例外。那么,正式进入落地期的ChatGPT,在在线教培行业有那些应用前景呢&#…

QT中信号和槽的概念

信号就是发生什么事件,槽就是触发什么函数,所以信号与槽就是发生什么事件(比如点击某个按钮)然后就会触发某个函数 connect(信号的发送者,发送的具体信号,信号的接受者,信号的处理) connect(myButton , &a…

Android 内存泄漏

名词解释 内存泄漏:即memory leak。是指内存空间使用完毕后无法被释放的现象,虽然Java有垃圾回收机制(GC),但是对于还保持着引用, 该内存不能再被分配使用,逻辑上却已经不会再用到的对象,垃圾回…

阿里P8整理的《亿级并发系统设计》实战教程,面面俱到,实在太全了

候,那系统架构一定不是那么简单的,用个 redis,用 mq 就能搞定?当然不是,真实的系统架构搭配上业务之后,会比这种简单的所谓“高并发架构”要复杂很多倍。 如果有面试官问你个问题说,如何设计一…

亚马逊、eBay新品期没有出单怎么办?自养买家号的重要性和技巧

一:新品期没有出单怎么办? 1.刚开始,低bid 调整,20元预算,让位置可以靠后点,因为前期跟前面比,比不赢,不如去后面比。 2.价格不是由卖家单一决定,而是由市场决定的。 3.切记自嗨型…

Kotlin Lambda表达式和匿名函数的组合简直太强了

Kotlin Lambda表达式和匿名函数的组合简直太强了 简介 首先,在 Kotlin 中,函数是“第一公民”(First Class Citizen)。因此,它们可以被分配为变量的值,作为其他函数的参数传递或者函数的返回值。同样&…

去中心化公链生态是否还有未来

2020年流动性挖矿带来的高收益让 DeFi Summer 点燃了2021年的大牛市。质押借贷、AMM作市、DEX、GameFi以及元宇宙等赛道的相继爆火,让整个行业看到了区块链的未来潜力,公链生态的繁荣也给项目带来了更多的可能性。而当市场进入熊市时,不少公链…

【netty基础】Java NIO三件套

文章目录 一. 缓冲区1.Buffer操作基本API2.Buffer的基本原理2.1. put操作2.2. get操作2.3. clear()回到初始化buffer的值 3.缓冲区的分配4.缓冲区分片5.只读缓冲区6. 直接(direct)缓冲区7. 内存映射 二. 选择器三. 通道…

直接插入排序--C语言(附详细代码)(附图详解)

目录 插入排序法的介绍 什么是插入排序法? 稳定性分析 插入排序基本思想 例子分析 实现代码 运行结果 插入排序法的介绍 什么是插入排序法? 插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。…

Django-3.2-LTS兼容哪些Python版本?支不支持Python3.9.10?

问:请问Python的3.9.10版本兼不兼容Django的3.2版? 答:Python 3.9.10 和 Django 3.2 之间是兼容的。Django 3.2 是一个长期支持(LTS)版本,它支持 Python 3.6、3.7、3.8 和 3.9。因此,Python 3.9…

母线差动保护(二)

3、大差和小差 接入大差元件的电流为I母、II母所有支路(母联除外)的电流,目的是为了判断故障是否为母线区内故障;接入小差元件的电流为接入该段母线的所有支路的电流,目的是为了判断故障具体发生在哪一条母线上。 以双…

ifconfig: RX packets 一直为 0

本博客的很多内容都是经验之谈,目的是给遇到类似问题的小伙伴提供一个解决问题的思路,如果试了不行,可以快速跳过,再寻找其他的解决方案。 如题目所言,今天遇到的问题是和网络连通性相关的,就是网络不通&a…

为什么企业推行OEE总是坚持不下去?

OEE很难推行吗? 企业追求高效率和减少浪费变得尤为重要,而在这个过程中,OEE(Overall Equipment Efficiency)成为了一个非常有用的工具,它可以为企业提供准确的数据,了解生产过程中存在的浪费程…