算法导论复习——CHP25 多源最短路

问题描述        

        给定一个带权重的有向图G=(V,E),其权重函数为ω:E→R。 在图中,对所有的结点对 u,v∈V,找出从结点u到结点v的最短路径。 该问题的解以表格(二维数组)的形式给出:第u行第v列给出从结点u到结点v的最短路径权重。

约定

        1)结点编号:不失一般性,结点编号为1,2,…,|V|。

        2)成本邻接矩阵:图G用一个n╳n的邻接矩阵W=(wij)表示, 其中,

        3)允许存在权重为负值的边,但不能包含权重为负值的环路,否则无解。
        4)最短路径矩阵:算法的输出为一个n╳n的最短路径矩阵 D=(dij),其中dij表示从结点i到结点j的一条 最短路径的权重。算法结束时有dij=δ(i,j)。

        5)前驱结点矩阵: 前驱结点矩阵记为:П=(πij),其中

        利用前驱结点矩阵П可以计算出每对结点间的最短路径。 前驱结点矩阵П的第i行所诱导的子图是一棵根结点为i的最短路径树。 对于每个结点i∈V,定义图G对于结点i的前驱子图为 Gπ,i=(Vπ,i,Eπ,i),其中

        (见CHP24) 

        打印最短路的过程

动态规划做法

最短路径的最优子结构性质

        每条路径都是最短路径:考虑从结点i到结点j的一条最短路径p。假定p至多包含m条边(假定没有权重为负值的环路),且m为有限值。

         如果i=j,则p中不包含任何边,所以p的权重等于0;

        如果i ≠ j,则将路径p分解为 ,其中  p ’至多包含 m-1 条边,则p ’是从i到k的一条最短路径, 且δ(i,j)=δ(i,k)+Wkj。

递归解

        设l_{ij}^{(m)}是从结点i到结点j的至多包含m条边的任意路径中的最小权重。

        则

自底向上解 

(伪代码在给定W和L(m-1)的情况下计算L(m))

时间复杂度O(n^4)

发现这个计算过程实际上很类似于矩阵乘法(几乎完全一样),可以用矩阵快速幂优化到O(n^3lgn)

另一种DP——Floyd-Warshall算法

         算法允许图中存在负权重的边,但不能存在权重为负值的环路。

思路

        假定图G的结点集为V={1,2,…,n}。考虑其中的一个子集 {1,2,…,k},这里k是小于n的某个整数,并是其中的最大编号。 对于任意一对结点i,j∈V,定义p是从i到j、且所有中间结点均取自于集合{1,2,…,k}的最短路径。

        p是简单路径,且p的中间结点都不大于k。

        p从i 到 j,仅经过集合{1,2,…,k}中的结点,但,

  •                 不一定经过其中的每一个结点;
  •                 也可能不存在这样的路径,此时p的权重等于∞。

在从 i 到 j 之间中间结点均取自集合{1,2,…,k-1}的基础上,试图回答这样一个问题:结点k是否是路径p上的一个中间结点?

        1)如果结点k不是路径p上的中间结点,则p上的所有中间结点都属于集合{1,2,…,k-1}。  此时,从结点i到结点j的中间结点取自集合{1,2,…,k-1}的一条最短路径也是从结点i到结点j的中间结点取自集合 {1,2,…,k}的一条最短路径。

        2)如果结点k是路径p上的中间结点,则k将路径p分解为两段(如下图),最优子结构性,p1是从结点i到结点k的一条最短路径,且中间结点全部取自集合{1,2,…,k-1} 。 因为结点k不是路径p1上的中间结点,所以路径p1上的所有结点都 属于集合{1,2,…,k-1} 。 同理,p2是从结点k到结点j的一条最短路径,且中间结点全部取自集合{1,2,…,k-1}

故有状态转移方程:

         

伪代码

 时间复杂度O(n^3)

加入最短路径构建

        \pi _{ij}^{(k)}为从结点i到结点j的一条所有中间结点都取自集合 {1,2, …, k}的最短路径上j的前驱结点。

         

应用——计算传递闭包 

        定有向图G=(V,E),定义图G的传递闭包G*=(V,E*),其中 E*={(i,j):如果图G中包含一条从结点i到结点j的路径}。

        求有向图的传递闭包: 方法一:给E中每条边赋权重1,然后运行FLOYD-WARSHALL算法, 可以在Θ(n3)求出权重路径矩阵D。在D中若dij<n,则表示存在一条从结点i到结点j的路径;否则dij=∞。

        方法二:定义矩阵T ={tij},若存在一条从结点i到结点j的路径,tij=1,否则tij=0。
                        计算T:
                                对FLOYD-WARSHALL算法进行改造:用逻辑或操作(V)和
                        逻辑与操作(Λ)替换算术操作min和+,得以下计算公式:

用于稀疏图的Johnson算法

        Johnson算法:在稀疏图中求每对结点之间的最短路径权重。

        对稀疏图,Johnson算法优于Floyd-Warshall算法,时间复杂度可达O(V2lgV+VE)。

        Johnson算法使用Dijkstra算法和Bellman-Ford算法作为自己的子程序,可处理带有负权重的图。

        如果图中包含所有结点对的最短路径,Johnson算法输出一个包含所有结点对的最短路径权重矩阵;否则报告图中包含权重为负值的环路。

        重赋权重:Johnson算法使用重新赋予权重的技术求解。

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

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

相关文章

在Linux中以后台静默运行Java应用程序

在Linux系统上运行Java应用程序时&#xff0c;有时我们希望将其设置为后台运行&#xff0c;而关闭终端窗口时不会影响进程的执行。在本文中&#xff0c;我们将介绍几种实现这一目标的方法。 1. 使用nohup命令 nohup是一个用于在后台运行进程的命令&#xff0c;而且关闭终端窗…

C语言实例_math.h库函数功能及其用法详解

一、前言 数学在计算机编程中扮演着至关重要的角色&#xff0c;C语言的math.h头文件提供了一系列的函数和工具&#xff0c;用于数学计算和常用数学函数的实现。这些函数包括数值运算、三角函数、指数对数函数等&#xff0c;为开发人员提供了强大的数学处理能力。本文将对math.…

SAM-Track online / offline配置

segment anything model&#xff08;SAM&#xff09;是Meta于2023年4月5日发布的分割基础模型。SAM 允许分割任何对象而无需微调。 可以在这里尝试SAM模型的效果。 分割效果这么好&#xff0c;都忍不住想用SAM来做场景的语义分割&#xff0c;realtime与否先放在一边&#xff0c…

SpringBoot—支付—支付宝

一、流程 二、沙箱操作 1.用支付宝账号登录【开放控制平台】创建应用获取 appid 2.选择沙箱模拟环境 3.沙箱应用-》获取appid(一个appid绑定一个收款支付宝账户) 4.利用开发助手工具生成RSA2密钥 公钥&#xff1a;传给支付宝平台 私钥&#xff1a;配置代码中&#xff0c;…

项目引入Jar包的几种方式

目录 背景 方式一 前提 创建一个jar包 使用 方式二 背景 通常情况下&#xff0c;使用SpringBoot框架开发项目的过程中&#xff0c;需要引入一系列依赖&#xff0c;首选的就是在项目的 pom.xml 文件里面通过Maven坐标进行引入&#xff08;可以通过Maven的坐标引入jar包的前…

process.cwd() 与 __dirname 的区别

Node.js 中的 __dirname 和 process.cwd() 都是用于获取文件系统路径的全局变量和方法&#xff0c;但它们有不同的含义和用途。 一、process.cwd() process.cwd() 是一个方法&#xff0c;用于获取 Node.js 进程的当前工作目录。它返回的是 Node.js 进程启动时所在的工作目录的…

Java安装详细教程

文章目录 一、JDK 下载 和 安装1.1 选择 Java版本1.2 下载 JDK 二、 配置环境变量2.1 配置环境变量的原因2.2 配置环境变量2.3 验证配置是否成功 参考资料 一、JDK 下载 和 安装 1.1 选择 Java版本 访问 Oracle 官方网站的 Java 下载页面Java Archive | Oracle。 在 “Java …

用PHP搭建一个绘画API

【腾讯云AI绘画】用PHP搭建一个绘画API 大家好&#xff01;今天我要给大家推荐的是如何用PHP搭建一个绘画API&#xff0c;让你的网站或应用瞬间拥有强大的绘画能力&#xff01;无论你是想要让用户在网页上绘制自己的创意&#xff0c;还是想要实现自动绘画生成特效&#xff0c;这…

可以写作文的AI写作,看看这五款

随着人工智能技术的不断发展&#xff0c;AI写作软件逐渐走进了我们的生活&#xff0c;这些软件可以帮助我们快速生成高质量的作文&#xff0c;节省了大量的时间和精力。在市场上有许多种类的AI写作软件&#xff0c;下面我将介绍五款比较受欢迎的。 首先&#xff0c;我们来看看“…

进程的基础认识

一、进程的概念 进程是指 可执行程序 内核数据结构&#xff08;内核为了管理进程而创建的数据结构&#xff09;。 二、进程的管理 进程是靠PCB(process control block [进程控制块])管理起来的&#xff0c;在linux下PCB叫 task_struct 当一个可执行程序从磁盘加载进内存&…

HTTP 错误 401.3 - Unauthorized 由于Web服务器上此资源的访问控制列表(ACL)配置或加密设置。

用IIS 发布网站&#xff0c;不能访问且出现错误&#xff1a; HTTP 错误 401.3 - Unauthorized 由于Web服务器上此资源的访问控制列表(ACL)配置或加密设置。您无权查看此目录或页面 解决办法&#xff1a; 1.打开IIS界面&#xff0c;选中发布的网站&#xff0c;右键—>编辑…

【Java 基础】-- 实例化

1、定义 创建对象的过程就叫实例化。这个过程中会在堆中开辟内存&#xff0c;将一些非静态的方法&#xff0c;变量存放在里面。在程序执行的过程中&#xff0c;可以创建多个对象&#xff0c;既多次实例化。每次实例化都会开辟一块新的内存。 2、实例化的几种方法 new 关键字创…

bootstrap5实现的在线商城网站Parlo

一、需求分析 在线商城网站是指基于互联网技术搭建的电子商务平台&#xff0c;通过网站提供商品和服务的展示、销售和交易功能。它的主要作用包括以下几个方面&#xff1a; 商品展示和销售&#xff1a;在线商城网站是商家展示商品的平台&#xff0c;可以通过图片、文字、视频等…

水经微图IOS版APP正式上线!

水经微图APP&#xff08;简称“微图APP”&#xff09;IOS版已正式上线&#xff01; 微图IOS版APP下载安装 节后上班第一天&#xff0c;同事说微图APP通过了苹果应用商店审核&#xff0c;已经上线了。 于是迫不及待地打开 App Store 搜索“水经微图”&#xff0c;但并没有搜索…

uniapp中组件库的Radio 单选框丰富的使用方法

目录 #平台差异说明 #基本使用 #自定义形状 #禁用radio #是否禁止点击提示语选中复选框 #自定义颜色 #横向排列形式 #横向两端排列形式 API #Radio Props #radioGroup Props #radio Event #radioGroup Event 单选框用于有一个选择&#xff0c;用户只能选择其中一个…

C++ DAY6 作业

1.用模板类写顺序表 #include <iostream>using namespace std;#define MAXSIZE 10 template <typename T> class Arr {T *data NULL;int len 0; public://构造函数Arr():data(new T){}Arr(T a,int len):data(new T(a)),len(len){}//析构函数~Arr(){delete data;}…

【elfboard linux开发板】4. 文件点灯与创建多进程

ps&#xff1a;提升效率的小tips&#xff1a; 灵活运用vim操作命令&#xff0c;gg快速跳转到文件开头&#xff0c;G跳转到结尾 多行操作 ctrl V shift i 插入修改内容 esc退出编辑 sudo vi /etc/vim/vimrc 在文件中添加如下内容省略重复工作&#xff1a; autocmd BufNewFile …

霹雳吧啦Wz《pytorch图像分类》-p3VGG网络

《pytorch图像分类》p3VGG网络详解及感受野的计算 一、零碎知识点1.nn.Sequential2.**kwargs 二、VGG网络模型详解1.感受野2.模型手算 三、代码1.module.py2.train.py3.predict.py 一、零碎知识点 论文连接&#xff1a;VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAG…

结算时间和可组合性助力Sui上DeFi蓬勃发展

结算时间是基于Sui交易处理模型的度量标准&#xff0c;确保DeFi用户几乎立即看到交易结果。可组合性则是深深融入Sui的编程环境&#xff0c;扩展了其对对象和智能合约的影响。Sui深度的可组合性赋予DeFi构建者引入创新产品的能力&#xff0c;使其在其他区块链上的DeFi应用中独树…

[C#]使用onnxruntime部署Detic检测2万1千种类别的物体

【源码地址】 github地址&#xff1a;https://github.com/facebookresearch/Detic/tree/main 【算法介绍】 Detic论文&#xff1a;https://arxiv.org/abs/2201.02605v3 项目源码&#xff1a;https://github.com/facebookresearch/Detic 在Detic论文中&#xff0c;Detic提到…