K Shortest Paths算法之Yen algorithm

news2025/1/31 8:22:15

Yen’s算法是一种在图论中用于计算单源K最短无环路径的算法,该算法由Jin Y. Yen在1971年提出。这个算法的时间复杂度和空间复杂度都取决于用于计算偏离路径的最短路径算法。如果使用Dijkstra算法,那么时间复杂度为O(KN3),采用Fibonacci堆计算可以优化到O(KN(M+NlogN))。

Yen algorithm的关键步骤

1.确定第一条最短路径:使用任何有效的最短路径算法(例如Dijkstra算法)从源点到汇点计算最短路径,将其作为第一条最短路径。

2.确定所有其他K最短路径:假设已经找到了从源点到汇点的所有路径,然后进行迭代,每次迭代都会找到所有的偏离路径,并选择一条最小长度的路径成为下一条最短路径。在这个迭代过程中,需要进行以下操作:

  • 选择根路径:找到在前一条最短路径中的子路径,该子路径跟随前i个节点,其中i从1到k-1。
  • 找到偏离路径:计算从偏离节点(即根路径的最后一个节点)到汇点的最短路径,这就是偏离路径。
  • 将根路径和偏离路径加入到候选路径集合中:将根路径和偏离路径相加,形成一条完整的路径,然后将这条路径加入到候选路径集合中。

3.选择下一条最短路径:从候选路径集合中找到成本最低的路径,将其从候选路径集合中移除,并将其加入到最短路径集合中,然后继续下一次迭代。

4.重复步骤2和3,直到找到K条最短路径。

Yen algorithm图例

1.使用Dijkstra算法等,确定第一条最短路径A1=13,放入容器A,路径A1上的节点分别记为1,2,3,4
在这里插入图片描述
2.确定所有其他K最短路径
偏离节点为1时,选择节点1和2之间的链路weight变为无穷,R为根路径,S为偏离路径,计算出绿色的路径A2=14,先放入候选容器B
在这里插入图片描述
偏离节点为2时,选择节点2和3之间的链路weight变为无穷,计算出红色的路径A2=17,放入候选容器B
在这里插入图片描述
偏离节点为3时,选择节点3和4之间的链路weight变为无穷,计算出紫色的路径A2=16,放入候选容器B
在这里插入图片描述
所有当K=2时,计算出的A1和A2路径就如下,如果K>2时,那还要A2再单独拿出来,重复上面几步的运算
在这里插入图片描述

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

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

相关文章

Elasticsearch:Explain API - 如何计算分数

你想了解你的文档为何获得该分数吗? 文档 让我们通过一组示例文档来了解 Explain API。 就我而言,我将使用一小部分电影名言。 POST _bulk { "index" : { "_index" : "movie_quotes" } } { "title" : "T…

从malloc到跑路

当我还是一个懵懂无知的少年时,内心也曾升起这样的疑问这内存咋来的捏❓ 有个帅气的小哥哥给我甩了一篇博客:对,就是这篇,看完后总感觉意犹未尽,似乎少了点什么的样子。。。 还是从malloc开始 如果申请的内存小于64B…

“配置DHCP服务器和DHCP中继的网络自动配置实验“

"配置DHCP服务器和DHCP中继的网络自动配置实验" 【实验目的】 部署DHCP服务器。熟悉DHCP中继的配置方法。验证拓扑。 【实验拓扑】 实验拓扑如图所示。 设备参数如下表所示。 设备 接口 IP地址 子网掩码 默认网关 DHCPSERVE S0/3/0 192.168.10.1 255.255.…

丰富上下文的超高分辨率分割:一种新的基准

文章目录 Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark摘要数据集Dataset SummaryData Collection and Pre-processing 数据标注数据统计 WSDNet实验结果 Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark …

SSM整合快速入门案例(一)

文章目录 前言一、设计数据库表二、创建工程三、SSM技术整合四、功能模块开发五、接口测试总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者…

不认识docker,怎么好意思说自己是干IT的

1.Docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环…

用户行为数据分析

文章目录 用户行为数据分析1 项目描述2 项目需求3 数据准备1、创建user_data数据表用于导入user_data.csv中的数据2、加载user_data.csv中的数据到user_data表3、接下来进行数据清洗,包括:删除重复值,时间戳格式化,删除异常值。 4…

OpenGL光照之基础光照

文章目录 环境光照漫反射光照计算漫反射光照镜面光照代码 现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。因此OpenGL的光照使用的是简化的模型,对现实的情况进行近似,这样处理起来会…

MyBatis-Plus(2.0)

ActiveRecord ActiveRecord(简称AR)一直广受动态语言(PHP、Ruby等)的喜爱,而java作为准静态语言,对于ActiveRecord往往只能感叹器优雅 什么是ActiveRecord? ActiveRecord也属于ORM(对象关系映射)层,由Rail…

视频|人人能看懂的苹果visionOS空间设计课程

本周的重磅消息无疑是苹果Vision Pro以及对应的visionOS,考虑到苹果头显硬件上当前以第一方App为主,因此本届WWDC的一个重点就是释放visionOS和相关能力给开发者,让开发者尽快打造出更多、更优质的第三方App阵容。 与此同时,苹果也…

【vue3】10-vue组件化额外知识补充(下)-动态组件-组件缓存-v-model在组件上的应用

组件化-额外知识补充(下) 动态组件的使用(了解)keep-alive(理解)认识keep-alivekeep-alive的使用 异步组件的使用webpack分包处理(了解)Vue中实现异步组件 组件的v-model组件的混入Mixin(了解&a…

阿里云弹性公网EIP收费价格表(按量/包年包月/配置费)

阿里云弹性公网EIP怎么收费?EIP地域不同价格不同,EIP计费模式分为包年包月和按量付费,弹性公网IP可以按带宽收费也可以按使用流量收费,阿里云百科分享阿里云弹性公网IP不同地域、不同计费模式、按带宽和按使用流量详细收费价格表&…

基于springboot+vue技术的在线考试系统源码数据库

源码看这里 https://download.csdn.net/download/2301_76965813/87881785 前台 学生登录: 如果没有账号,首先需要以学生的身份进行注册,即输入姓名、性别、密码以及班级,注册成功之后输入账户名和密码进行登录,进入…

conda虚拟环境配置和系统相关配置

一、conda虚拟环境 首先,尽量别在base中直接安装自己的包。原因有以下两个: 1.base环境是conda运行的基础,没法一键清除,如果损坏base环境要么滚回要么卸载重装,比较麻烦 2.base中很多包并不是项目需要的包&#xff0c…

Spring5

Spring5 文章目录 Spring5一.框架概述二.入门案例三.IOC容器1.IOC概念2.IOC底层原理3.IOC接口 四.IOC操做Bean管理1.Bean管理2.基于xml配置文件方式实现(1).创建对象(2).注入属性第一种注入:set方法第二种注入:有参数的构造p名称空间注入(了解)注入空值和特殊符号外部Bean内部B…

itop-3568开发板驱动学习笔记(27)设备树(六)pinctrl

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录 pinctrl 子系统简介pinctrl 设备树语法pinctrl 客户端pinctrl 服务端瑞星微平台全志平台三星平台iMX 平台 pinctrl 子系统简介 Linux pinctrl 子系统用来管理 GPIO 引脚,它主要完成了以下三种功…

MySQL数据库,从入门到精通:第三篇——MySQL 数据库规范和基础查询语句

MySQL数据库,从入门到精通:第三篇——MySQL 数据库规范和基础查询语句 第三篇_MySQL 数据库规范和基础查询语句1. SQL概述1.1 SQL背景知识1.2 SQL语言排行榜1.3 SQL 分类 2. SQL语言的规则与规范2.2 SQL大小写规范 (建议遵守)2.3 …

设计模式-03.02-创建型-工厂建造者原型

工厂模式【常用】 工厂模式很重要,后面的很多架构设计,都是工厂模式联合着其它设计模式使用。 一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。不过,在 GoF 的《设计模式》一书中&#xff…

docker资源控制cgroup

一、CPU控制 cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups (Control groups) 实现了对资源的配额和度量。 cgroups有四大功能: 资源限制:可以…

SpringAOP详解

目录 前言: 相关概念 切点表达式规则 代码演示 SpringAOP实现原理 织入(代理的生成时机) JDK和CGLIB区别 小结: 前言: AOP(Aspect Oriented Programming)是思想(面向切面编程…