图的应用(最小生成树,最短路径,有向无环图)

news2025/1/21 2:57:28

目录

一.最小生成树

1.生成树

2.无向图的生成树

3.最小生成树算法

二.最短路径

1.单源最短路径---Dijkstra(迪杰斯特拉)算法

2.所有顶点间的最短路径---Floyd(弗洛伊德)算法

三.有向无环图的应用

1.AOV网(拓扑排序)

2.AOE网(关键路径)


一.最小生成树

1.生成树

所有顶点均有边连接在一起,但不存在回路的图

•一个图可以有许多棵不同的生成树

•所有生成树都具有以下共同特点

         •生成树的顶点个数与图的顶点个数相同

         •生成树是图的极小连通子图,去掉一条边则非连通

         •一个有n个顶点的连通图的生成树有(n-1)条边

         •在生成树中再加一条边必然形成回路

         •生成树中任意两个顶点间的路径是唯一

•含n个顶点n-1条边的图不一定是生成树

2.无向图的生成树

无向图的生成树可以与深度优先搜索遍历与广度优先搜索遍历的方法结合起来

不了解的可以看看这篇

深度优先搜索遍历与广度优先搜索遍历

深度优先生成树:V1->V2->V4->V8->V5->V3->V6->V7

广度优先生成树:V1->V2->V3->V4->V5->V6->V7->V8

 

3.最小生成树算法

给定一个无向网络,在该网所有的生成树中,使得各边权值之和最小的那棵生成树称为最小生成树,也叫最小代价生成树

生成最小生成树的方法

MST(Minimum Spanning Tree)

•已落在生成树上的顶点集:U

•尚未落在生成树的顶点集:V-U

        •选取权值最小的边,因为权值最小的边一定存在生成树是包含他的

(1)普里姆(Prim)算法

•设N=(V,E)是连通网,TE是N上最小生成树中边的集合
•初始令 U={u0},(u0\inV), TE={}

•在所有 u\inU, v \inV-U的边(u v)\inE中,找条代价最小的边(u0,v0)

•将(u0,v0)并入集合 TE,同时v0并入 U

(2)克鲁斯卡尔(Kruskal)算法

•设连通网 N=(V,E),令最小生成树初始状态为只有 n个顶点而无边的非连通图T=(V,{}),每个顶点自成一个连通分量。

•在E中选取代价最小的边,若该边依附的顶点落在T中不同的连通分量上(即:不能形成环),则将此边加入到 T中;否则,舍去此边,选取下一条代价最小的边。
•依此类推,直至T中所有顶点都在同一连通分量上为止。

(3)两种算法的区别

•普里姆算法是选择点,从U集合到V-U集合找一条权值最小的边,将这个边连接的点加入到U集合中,而克鲁斯卡尔算法则是在所有边中找权值最小的边,加入到生成树中,直到所有的点连通,边为n-1条。

•普里姆算法的时间复杂度为O(n^{2}),对于所有的点,都需要遍历其他顶点进行判断下一个加入生成树的点,克鲁斯卡尔算法则是选择边,和顶点数无关,只跟边数有关,对顶点的权值进行排序时,平均情况是(eloge)

•克鲁斯卡尔算法时间复杂度只跟边数有关,所以边数较少时,算法时间较少,所以克鲁斯卡尔算法适用于稀疏图,普里姆算法适用于稠密图。

二.最短路径

有向网中A点(源点)到达B点(终点)的多条路径中,寻找一条各边权值之和最小的路径,即最短路径

最短路径与最小生成树不同,路径上不一定包含n个顶点,也不一定包含n-1条边

•两点间的最短路径

下图最短路径值为14

•某源点到其他各点最短路径

1.单源最短路径---Dijkstra(迪杰斯特拉)算法

算法步骤

•初始时令S={v0},T={其余顶点}

•T中顶点对应的距离值用辅助数组D存放

        •D[i]初值:若<v0,v_{i}>存在,则为权值;否则为\bowtie

•从T中选取一个其距离值最小的顶点v_{j},加入S

•对T中顶点的距离值进行修改:若加进v_{j}作中间顶点,从v0到v_{i}的距离值比不加v_{j}的路径要短,则修改此距离值。

•重复上述步骤,直到S=V为止

以下图为例

Dijkstra(迪杰斯特拉)算法可以计算1个顶点到其他顶点的最短路径,时间复杂度为O(n^{2})

如果要计算所有顶点间的最短路径,即O(n^{2})*n=O(n^{3})

2.所有顶点间的最短路径---Floyd(弗洛伊德)算法

算法步骤

•逐个顶点试探

•从vi到vj的所有可能存在的路径中

•选出一条长度最短的路径

初始设置一个n阶方阵,令其对角线元素为0,若存在弧<vi,vj>,则对应元素为权值;否则为\bowtie

如图:A-->B的权值为4,B-->A的权值为6,以此类推,可得n阶方阵

加入A顶点,如图,本来C--->B没有路径(\bowtie),但是可以从C-->A--->B,路径长度为7

加入B,如图,原来A--->C为11,现在加入B,变为A--->B--->C,变得更小了,所以6替换11

加入C,如图,B--->A路径长度为6,B--->C--->A路径长度变短,所以5替换6

以上总结为:逐步试着在原直接路径中增加中间顶点,若加入中间顶点后路径变短,则修改之;否则,维持原值。所有顶点试探完毕,算法结束。

三.有向无环图的应用

1.AOV网(拓扑排序)

用一个有向图表示一个工程的各子工程及其相互制约的关系,其中以顶点表示活动,弧表示活动之间的优先制约关系,称这种有向图为顶点表示活动的网,简称 AOV网(Activity On Vertex network)

拓扑排序

拓扑排序的方法

•在有向图中选一个没有前驱的顶点且输出之

•从图中删除该顶点和所有以它为尾的弧

•重复上述两步,直至全部顶点均已输出或者当图中不存在无前驱的顶点为止

注:拓扑排序的结果是不唯一的

拓扑排序可以检测AOV网中是否存在环

对有向图构造其顶点的拓扑有序序列,若网中所有顶点都在它的拓扑有序序列中,则该AOV 网必定不存在环,若还剩余顶点没有在拓扑有序序列中,就存在环

2.AOE网(关键路径)

用一个有向图表示一个工程的各子工程及其相互制约的关系,以弧表示活动,以顶点表示活动的开始或结束事件,称这种有向图为边表示活动的网,简称为AOE网(Activity On Edge)。

关键路径

关于关键路径,可以看这篇文章

http://t.csdn.cn/uitVf

如果想要理解的再深入一些,可以看

http://t.csdn.cn/JfbLs

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

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

相关文章

国内CRM软件系统厂商排名

我们知道CRM软件成为了企业管理中不可或缺的一部分&#xff0c;目前国内CRM厂商排名是怎样的呢&#xff1f;经过评估名列前茅的分别是Zoho CRM、Salesforce CRM、Microsoft Dynamics 、SAP CRM、HubSpot CRM。 1.Zoho Zoho CRM凭借先进的技术和创新的解决方案&#xff0c;帮…

2023年母婴亲子产业研究报告

第一章 行业发展概况 母婴亲子领域是一个综合性的产业&#xff0c;主要聚焦于为孕产妇、婴幼儿及家庭提供全方位的服务和产品。该产业致力于为孕产妇和家庭在孕育、育儿及亲子时期提供必要的支持和便捷。其核心业务涉及婴幼儿商品、孕产妇健康、亲子教育、家庭旅行体验以及亲子…

递归算法学习——图像渲染,岛屿的数量,最大的岛屿

目录 ​编辑 一&#xff0c;图像渲染 1.题意 2.解释 3.题目接口 4.解题思路及代码 二&#xff0c;岛屿的数量 1.题意 2.解释 3.题目接口 4.解题思路及代码 三&#xff0c;最大的岛屿 1.题意 2.解释 3.题目接口 4.解题代码即思路 一&#xff0c;图像渲染 1.题意…

MySQL——笔试测试题

解析&#xff1a; 要查询各科目的最大分数&#xff0c;可以使用如下的SQL语句&#xff1a; SELECT coursename, MAX(score) FROM t_stuscore GROUP BY coursename; 这条SQL语句使用了MAX()聚合函数来获取每个科目的最大分数&#xff0c;并使用GROUP BY子句按照科目进行分组…

核货宝:收银系统后台一般是怎样的,有哪些功能

收银系统后台是一个重要的管理工具&#xff0c;它为企业提供了对收银机的全面控制和配置。收银系统后台是一个用于管理和配置收银机的软件界面。它通常由以下几个主要部分组成&#xff1a; 1. 登录和权限管理 收银系统后台需要一个安全的登录系统&#xff0c;以确保只有授权人…

Mojo 语言官网

Mojo面向 AI 开发者的新型编程语言&#xff0c;无缝支持CPU、GPU&#xff0c;兼容Python&#xff0c;跟Python类似的语法&#xff0c;但是比Python快68000倍。目前Mojo仅支持Ubuntu&#xff0c;暂不支持Windows和Mac&#xff0c;可以在Mojo Playground先体验一下。 Mojo 语言…

ostringstream 多线程下性能问题探究

文章目录 背景火焰图ostringstream 的结构引用 背景 在实习过程中&#xff0c;有一个业务场景需要用到 ostringstream&#xff0c;但经过导师提醒&#xff0c;ostringstream 在多线程关系下&#xff0c;竞态消耗较大&#xff0c;但对于当前业务场景&#xff0c;每次操作&#…

【美团3.18校招真题2】

大厂笔试真题网址&#xff1a;https://codefun2000.com/ 塔子哥刷题网站博客&#xff1a;https://blog.codefun2000.com/ 最多修改两个字符&#xff0c;生成字典序最小的回文串 提交网址&#xff1a;https://codefun2000.com/p/P1089 由于字符串经过修改一定为回文串&#x…

[Linux]动静态库

[Linux]动静态库 文章目录 [Linux]动静态库见一见库存在库的原因编写库模拟编写静态库模拟使用静态库模拟编写动态库模拟使用静态库 库的加载原理静态库的加载原理动态库的加载原理 库在可执行程序中的编址策略静态库在可执行程序中的编址策略动态库在可执行程序中的编址策略 见…

本地启动 Falcon-180B

本地启动 Falcon-180B 通过 Gradio 的 load 函数&#xff0c;我们可以在本地加载 HuggingFace 的 Spaces 上面的 demo。 那就运行 Falcon-180B 来试试吧。 创建 falcon_demo.py 文件&#xff0c; cat << EOF > falcon_demo.py import gradio as grdemo gr.load(&q…

小节3:数据类型

Python的数据类型包括&#xff1a;字符串&#xff08;str&#xff09;、整数&#xff08;int&#xff09;、浮点数&#xff08;float&#xff09;、布尔类型&#xff08;bool&#xff09;、空值类型&#xff08;NoneType&#xff09;、列表&#xff08;list&#xff09;、字典&…

Spring Cloud zuul与CloseableHttpClient连接池,TLS证书认证

前言 最近做项目&#xff0c;需要一个代理逻辑&#xff0c;实际上这种代理NGINX最好&#xff0c;但是有些额外功能的开发&#xff0c;NGINX就需要额外能力支持&#xff0c;比如lua脚本&#xff0c;常见的做法有kong&#xff0c;apisix等&#xff0c;据说apisix的性能较强&…

Python 03(循环语句)

Python03&#xff08;循环语句&#xff09; 文章目录 Python03&#xff08;循环语句&#xff09;一、while语句二、while实现猜数字三、while循环的嵌套while循环嵌套实例需求&#xff1a; 四、for循环1、什么 是for循环2、语法3、执行流程4、for循环的基本使用5、range()函数6…

光刻机的原理和技术路线概览

一、简介 集成电路产业被誉为现代“工业粮食”&#xff0c;引领未来科学技术产业革命的发展&#xff0c;带动世界前沿技术创新发展。 集成电路产业是社会发展的先导产业&#xff0c;主要包括半导体材料、装备、芯片制造、封装测试、电路设计等重要环节。 随着工业智能制造和电子…

OpenCV(三十):图像膨胀

1.图像膨胀原理 图像膨胀的原理是将一个结构元素&#xff08;也称为核或模板&#xff09;在图像上滑动&#xff0c;并将其与图像中对应位置的像素进行比较。如果结构元素的所有像素与图像中对应位置的像素都匹配&#xff0c;那么该位置的像素值保持不变。如果结构元素的任何一个…

Telnet

远程登录/管理 目录 1、什么是Telnet 2、Telnet工作原理 3、常见的Telnet使用场景 4、Telnet协议结构 5、Telnet工作流程 6、Telnet常见命令 6.1、[Huawei]user-interface ? 用户界面 6.2、[Huawei]user-interface vty ? 6.3、[Huawei-ui-vty0-4]? 6.4、[Huawei-…

软件测试技术题目大全【含答案】

请看下面 你的测试职业发展是什么?  测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&#x…

buuctf crypto 【[AFCTF2018]Morse】解题记录

1.打开文件 2.摩斯密码解密 3.这个结果验证之后发现不对&#xff0c;猜测是16进制转字符 4.验证发现是对的

直方图均衡化原理

import numpy as np import cv2 hist, bins np.histogram(img, bins256, range(0, 256))# 计算累积分布函数&#xff08;CDF&#xff09; cdf np.cumsum(hist)# 归一化CDF&#xff1a; 归一化CDF以确保其范围在0到255之间 cdf_norm 255 * (cdf - cdf.min()) / (cdf.max()…

提词软件有哪些?了解一下这几个

提词软件有哪些&#xff1f;提词软件可以广泛应用于各种场景。除了在学习和工作中提高效率外&#xff0c;在日常生活中也有很多用处。例如&#xff0c;在进行演讲的时候&#xff0c;如果担心会因为紧张而忘词的话&#xff0c;就可以使用一些提词软件&#xff0c;将演讲词编辑进…