【数据结构(邓俊辉)学习笔记】图07——最短路径

news2024/11/15 8:57:09

文章目录

  • 0. 概述
  • 1. 问题
  • 2. 最短路径
    • 2.1 最短路径树
      • 2.1.1 单调性
      • 2.1.2 歧义性
      • 2.1. 3 无环性
    • 2.2 Dijkstra 算法
      • 2.2.1 贪心迭代
      • 2.2.2 实现
      • 2.2.3 实例
      • 2.2.4 复杂度

0. 概述

学习下最短路径和Dijistra算法

1. 问题

在这里插入图片描述
给定带权网络G = (V, E),以及源点(source)s ∈ V,对于所有的其它顶点v,s到v的最短通路有多长?该通路由哪些边构成?

2. 最短路径

2.1 最短路径树

2.1.1 单调性

在这里插入图片描述
设顶点s到v的最短路径为 ρ \rho ρ。于是对于该路径上的任一顶点u,若其在 ρ \rho ρ上对应的前缀为 σ \sigma σ,则 σ \sigma σ也必
是s到u的最短路径(之一)。

2.1.2 歧义性

较之最小支撑树,最短路径的歧义性更难处理。首先,即便各边权重互异,从s到v的最短路径也未必唯一。另外,当存在非正权重的边,并导致某个环路的总权值非正时,最短路径甚至无从定义。因此以下不妨假定,带权网络G内各边权重均大于零。

2.1. 3 无环性

在这里插入图片描述考查从源点到其余顶点的最短路径(若有多条,任选其一)。于是由以上单调性,这些路径的并集必然不含任何(有向)回路。这就意味着,如图所示,构成所谓的最短路径树(shortest-path tree)。

2.2 Dijkstra 算法

2.2.1 贪心迭代

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上述思路可知,只要能够确定 u k + 1 u_{k+1} uk+1,便可反过来将 T k T_k Tk扩展为 T k + 1 T_{k+1} Tk+1。如此,便可按照到s距离的非降次序,逐一确定各个顶点{ u 1 u_1 u1, u 2 u_2 u2, …, u n u_n un},同时得到各棵最短路径子树,并得到最终的最短路径树T = T n T_n Tn。现在,问题的关键就在于:
                   ~~~~~~~~~~~~~~~~~~                   如何才能高效地找到 u k + 1 u_{k+1} uk+1
实际上,由最短路径子树序列的上述性质,每一个顶点 u k + 1 u_{k+1} uk+1都是在 T k T_k Tk之外,距离s最近者。若将此距离作为各顶点的优先级数,则与最小支撑树的Prim算法类似,每次将 u k + 1 u_{k+1} uk+1加入 T k T_k Tk并将其拓展至 T k + 1 T_{k+1} Tk+1后,需要且只需要更新那些仍在 T k + 1 T_{k+1} Tk+1之外,且与 T k + 1 T_{k+1} Tk+1关联的顶点的优先级数。

可见,该算法与Prim算法仅有一处差异:考虑的是 u k + 1 u_{k+1} uk+1到s的距离,而不再是其到 T k T_k Tk的距离。

2.2.2 实现

与Prim算法一样,Dijkstra算法也可纳入此前的优先级搜索算法框架。

在这里插入图片描述

为此,每次由 T k T_k Tk扩展至 T k + 1 T_{k+1} Tk+1时,可将 V k V_k Vk之外各顶点u到 V k V_k Vk的距离看作u的优先级数(若u与 V k V_k Vk内顶点均无联边,则优先级数设为+∞)。如此,每一最短跨越边 e k e_k ek所对应的顶点 u k u_k uk,都会因拥有最小的优先级数(或等价地,最高的优先级)而被选中。

在这里插入图片描述
唯一需要专门处理的是,在 u k u_k uk e k e_k ek加入 T k T_k Tk之后,应如何快速地更新 V k + 1 V_{k+1} Vk+1以外顶点的优先级数。实际上,只有与 u k u_k uk邻接的那些顶点,才有可能在此后降低优先级数。因此与Prim算法一样,也可遍历 u k u_k uk的每一个邻居v,只要边 u k v u_kv ukv的权重加上 u k u_k uk的优先级数,小于v当前的优先级数,即可将后者更新为前者。

2.2.3 实例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.4 复杂度

不难看出,以上顶点优先级更新器只需常数运行时间。同样根据对PFS搜索性能的分析结论,Dijkstra算法这一实现版本的时间复杂度为O( n 2 n^2 n2)。

作为PFS搜索的特例,Dijkstra算法的效率也可借助优先级队列进一步提高。

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

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

相关文章

【NoSQL数据库】Redis命令、持久化、主从复制

Redis命令、持久化、主从复制 redis配置 Redis命令、持久化、主从复制Redis数据类型redis数据库常用命令redis多数据库常用命令1、多数据库间切换2、多数据库间移动数据3、清除数据库内数据 key命令1、keys 命令2、判断键值是否存在exists3、删除当前数据库的指定key del4、获取…

基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度

基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度 一.曲线1.train_acc2.val_acc3.train_loss4.lr 二.代码 本文介绍了如何基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度 特别说明: 1.NoActive:没有任何激活函数 2.SparseActiva…

【LeetCode 第 401 场周赛】K秒后第 N 个元素的值

文章目录 1. K秒后第 N 个元素的值🆗 1. K秒后第 N 个元素的值🆗 题目链接🔗 🐧解题思路: 前缀和 小规律🍎 🍎 从上图观察可知,规律一目了然,arr[i] arr[i] 对上一…

超越出身与学府:揭秘成功者共有的七大特质

在当今多元化的世界里,个人成功的故事如同繁星点点,照亮了无数追梦者的前行之路。新东方创始人俞敏洪先生曾深刻地指出,真正的成功并不取决于家庭背景的显赫与否,也不在于就读大学的名气大小,而是深深植根于个人内在的…

知识图谱的应用---智慧农业

文章目录 智慧农业典型应用 智慧农业 智慧农业通过生产领域的智能化、经营领域的差异性以及服务领域的全方位信息服务,推动农业产业链改造升级;实现农业精细化、高效化与绿色化,保障农产品安全、农业竞争力提升和农业可持续发展。目前,我国的…

战略引领下的成功产品开发之路

在当今竞争激烈的市场环境中,成功的产品开发不仅仅依赖于创意和技术的卓越,更需要战略性的规划和执行。本文将探讨战略在成功产品开发中的重要性,并结合实际案例,分析如何在战略的指引下,将创意转化为商业化的产品或服…

nginx mirror流量镜像详细介绍以及实战示例

nginx mirror流量镜像详细介绍以及实战示例 1.nginx mirror作用2.nginx安装3.修改配置3.1.nginx.conf3.2.conf.d目录下添加default.conf配置文件3.3.nginx配置注意事项3.3.nginx重启 4.测试 1.nginx mirror作用 为了便于排查问题,可能希望线上的请求能够同步到测试…

TMS320F280049学习3:烧录

TMS320F280049学习3:烧录 文章目录 TMS320F280049学习3:烧录前言一、烧录RAM二、烧录FLASH总结 前言 DSP的烧录分为两种,一种是将程序烧录到RAM中,一种是烧录到FLASH中,烧录ARM中的程序,只要未掉电&#x…

Linux驱动应用编程(四)IIC(获取BMP180温度/气压数据)

本文目录 一、基础1. 查看开发板手册,获取可用IIC总线2. 挂载从机,查看从机地址。3. 查看BMP180手册,使用命令读/写某寄存器值。4. 查看BMP180手册通信流程。 二、IIC常用API1. iic数据包/报2. ioctl函数 三、数据包如何被处理四、代码编写流…

配网终端通讯管理板,稳控装置通讯管理卡,铁路信号通讯管理卡

配网终端通讯管理板 ● 配网终端通讯管理板 ● ARM Cortex™-A5 ,533MHz ● 256MB RAM,512MB FLASH 配网终端通讯管理板 ARM Cortex™-A5 ,533MHz 256MB RAM,512MB FLASH 2x10/100/1000Mbps LAN(RJ45) 6x…

FastAPI系列 4 -路由管理APIRouter

FastAPI系列 -路由管理APIRouter 文章目录 FastAPI系列 -路由管理APIRouter一、前言二、APIRouter使用示例1、功能拆分2、users、books模块开发3、FastAPI主体 三、运行结果 一、前言 未来的py开发者请上座,在使用python做为后端开发一个应用程序或 Web API&#x…

MySQL数据库---LIMIT、EXPLAIN详解

分页查询 语法 select _column,_column from _table [where Clause] [limit N][offset M]select * : 返回所有记录limit N : 返回 N 条记录offset M : 跳过 M 条记录, 默认 M0, 单独使用似乎不起作用 limit N,M : 相当于 limit M offset N , 从第 N 条记录开始, 返回 M 条记录…

贪心算法学习三

例题一 解法(贪⼼): 贪⼼策略: ⽤尽可能多的字符去构造回⽂串: a. 如果字符出现偶数个,那么全部都可以⽤来构造回⽂串; b. 如果字符出现奇数个,减去⼀个之后,剩下的…

对象存储OSS 客户端签名直传的安全风险和解决方法

1. 前言 阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面…

AXI Quad SPI IP核中命令的使用

1 双通道SPI和混合内存模式下支持的常用命令 对于配置中Mode设置为Dual且Slave Device设置为Mixed的情况,IP核支持表3-1中列出的命令。这些命令在Winbond、Micron和Spansion内存设备上具有相同的命令、地址和数据行为。 某些命令,如fast read、dual I/…

产品创新:驱动企业增长的核心动力

在当今快速变化的市场环境中,产品创新已成为企业生存和发展的关键。产品创新不仅涉及全新产品或服务的开发,也包括对现有产品或服务的持续改进和优化。本文将深入探讨产品创新的定义、重要性以及如何通过创新驱动企业增长,并结合实际案例进行…

每位比特币人都终将成为一个国际主义者

原创 | 刘教链 周末BTC(比特币)趁势向着30日均线回归,现于69k一线悬停。7万刀以下加仓的机会窗口,和那蹉跎一生的岁月一样,过一天少一天,在每个纠结和拧巴的日子里,在软弱和彷徨的等待中&#x…

Python 算法交易实验71 QTV200数据流设计

说明 结构作为工程的基础,应该在最初的时候进行合理设计。这一次版本迭代,我希望最终实现的效果,除了在财务方法可以达到预期,在工程方面应该可以支持长期的维护、演进。 内容 1 财务表现期待 假设初始为60万资金作为主动资金…

Java学习 - MyBatis - 初识MyBatis

前言 什么是持久化 持久化是将程序数据在持久状态和瞬时状态间转换的机制,将数据保存到可永久保存的存储设备中。最常见的就是将内存中的对象存储在数据库中,或者存在磁盘文件、XML 数据文件中等等。其中,文件 IO 属于持久化机制&#xff0…

Web后端开发(请求-数组集合、日期、JSON参数)(三)

数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数 RequestMapping("/arrayParam") public String arrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return "OK"; } …