数据结构与算法-生成树与最小生成树

生成树与最小生成树

  • 🎈1.生成树与最小生成树
    • 🔭1.1生成树与最小生成树的概念
    • 🔭1.2最小生成树的生成准则
    • 🔭1.3两种最小生成树算法
      • 🏆1.3.1Kruskal算法
      • 🏆1.3.2Prim算法
  • 🎈2.有向无环图及其应用
    • 🔭2.1AOV网与拓扑排序
      • 🏆2.1.1拓扑排序方法
      • 🏆2.1.2拓扑排序的算法流程
    • 🔭2.2AOV网与关键路径
      • 🏆2.2.1事件的最早发生时间(ve)
      • 🏆2.2.2事件的最迟发生时间(vl)
      • 🏆2.2.3例题

🎈1.生成树与最小生成树

🔭1.1生成树与最小生成树的概念

G=(V,E)是一个连通图,G的一个生成子图若本身是一棵树,称它为G的一棵生成树。任何连通图都有生成树。
在这里插入图片描述
不难看出,有n个顶点的连通图的生成树必定有n-1条边,生成树是连通图的极小子图,在生成树中任意增加一条边,必定产生回路。
✅设G=(V,E)是一个带权连通图,其生成树上任一条边e的权值称为该边的代价W(e),G的一棵生成树T的代价W(T)就是生成树中各边的代价之和。在G的所有生成树中,代价最小的生成树称为最小代价生成树,简称最小生成树。

🔭1.2最小生成树的生成准则

✅最小生成树的生成准则

  • 只能选用该图中的边来构造最小生成树。
  • 必须使用且仅能使用n-1条边来连接连通图中的n个顶点。
  • 选用的n-1条边不能产生回路。
  • 尽量选取权值小的边。

🔭1.3两种最小生成树算法

  • Kruskal算法:通常适用于稀疏图
  • Prim算法:通常适用于稠密图

🏆1.3.1Kruskal算法

Kruskal算法是一种按照权值的递增次序选择合适的边来构造最小生成树的方法。

🔎设G=(V,E)是一个具有n个顶点的带权连通无向图,T=(V,TE)G的最小生成树,则构造最小生成树的步骤如下:

  1. 构造一个由n个顶点组成,不含任何边的图T=(V,∅),即TE为空集(其中每个顶点构成一个连通分量)。
  2. 不断从E中取出代价最小的一条边,若该边未使T形成回路(即该边的两个顶点来自T中不同的连通分量),则将此边加入到TE中,否则舍去此边选择下一条代价最小的边。以此类推,知道TE中包含n-1条边。

🎠Kruskal算法示例:
在这里插入图片描述

🏆1.3.2Prim算法

🔎设G=(V,E)是一个具有n个顶点的带权连通无向图,T=(V,TE)G的最小生成树,则构成最小生成树的步骤如下:

  1. 设置一个集合U,在图G上任选一个点u0加入U,算法从U={u0},TE=∅开始,重复执行下列操作。
  2. 在所有u属于U,v属于V-U的边(u,v)中找一条代价最小的边(u0,v0)并入集合TE,同时v0并入U,直至U=V为止。此时TE中必有n-1条边,T=(V,TE)G的最小生成树。
    🎠Prim算法示例:
    在这里插入图片描述

🎈2.有向无环图及其应用

有向无环图是一个无环的有向图,简称DAG图。AOV网和AOE网是DAG图的两个典型应用。

🔭2.1AOV网与拓扑排序

在现代管理系统中,人们常用有向图来描述和分析一项工程的计划和实施过程,一个工程常被分为多个子工程,这些子工程被称为活动。在有向图中若以顶点表示活动,有向边表示活动之间的优先关系的图称为AOV网

(Vi,Vj)是图中的有向边,则ViVj的直接前驱;VjVi的直接后继。若存在一条从ViVj的路径,则称ViVj的前驱,VjVi的后继。AOV网中不允许有回路,若存在回路,则意味着某项活动以自己为先决条件。

AOV网络中各顶点 按照它们互相之间的优先关系排列成的一个线性序列称为一个拓扑有序序列。若ViVj的前驱,则Vi一定排在Vj之前,对于没有优先关系的点,顺序任意。
AOV网中构造一个拓扑有序序列的过程称为拓扑排序。

🏆2.1.1拓扑排序方法

🔎拓扑排序的方法:

  1. 从有向图中选一个没有前驱的顶点并输出之。
  2. 从图中删除该顶点和所有以它为尾的弧。
  3. 重复上述两个步骤,直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止(此时说明图中有环)。
    在这里插入图片描述
    📝对于上图,拓扑排序的序列为:V1 V5 V4 V3 V2 V6
    注:拓扑排序的结果不一定唯一!

🏆2.1.2拓扑排序的算法流程

✅拓扑排序算法流程如下:
(1).把邻接表中入度为0的顶点依次进栈。
(2).若栈不空,则栈顶元素Vj退栈并输出,在邻接表中查找Vj的直接后继Vk,把Vk的入度减1;若Vk的入度为0,则进栈,继续该过程。
(3).若顶点个数不为nn为有向图的顶点数),则有向图有环;否则,拓扑排序完毕。

int ALGraph::TopSort()
{LinkStack s;int i, j, k;ArcNode* p;int indegree[MaxVex];findindegree(indegree);for (i = 0; i < ag, vexnum; i++){if (indegree[i] == 0){s.Push(i);}}int count = 0;while (!s.EmptyStack()){s.Pop(j);cout << ag.vertices[j].data;count++;for (p = ag.vertices[j].firstarc; p != NULL; p = p->nextarc){k = p->adjvex;indegree[k]--;if (indegree[k] == 0)s.Push(k);}}if (count < ag.vexnum){cout << "图中存在回路,不存在拓扑排序" << endl;return 0;}else{cout << "是一个拓扑排序" << endl;return 1;}
}

🔭2.2AOV网与关键路径

带权的有向无环图,称为AOE网,其中顶点表示事件,弧(有向边)表示活动,权表示活动持续时间。在工程上常用工程进度计划。通常每个工程只有一个开始事件和一个结束事件,在表示工程的AOE网中,表示整个工程的开始点(入度为0的顶点)称为源点。表示整个工程的结束点(出度为0的顶点)称为汇点。在AOE网上,从源点到汇点的路径长度最长的一条路径,或者全部由关键活动(即不按期完成就会影响整个工程完成的活动)构成的路径称为关键路径

🏆2.2.1事件的最早发生时间(ve)

AOE网有n个顶点,用1表示源点,n表示汇点,j表示AOE网中的第j个顶点。事件j的最早发生时间ve(j),从源点1j结点的最长的路径,意味着事件j最早能够发生的时间,这个时间决定了所有以j为头的弧所表示的活动的最早开始时间。源点的最早发生时间为0,即ve(1)=0,从ve(1)=0开始向汇点递推,设事件j是事件i的直接后继,则ve(j)=max{ve(i)+dut(i,j)|(i,j)属于T,2<=j<=n},其中T是所有以i顶点为尾,j顶点为头的弧的集合。
在这里插入图片描述
若顶点旁边的值代表顶点的最早发生时间,则ve(j)=16.

🏆2.2.2事件的最迟发生时间(vl)

事件j的最迟发生时间vl(j):不影响工程的如期完成,事件j必须发生的时间。汇点的最迟发生时间vl(n)=ve(n),即汇点的最早发生时间等于最迟发生时间,从vl(n)开始向源点递推。设事件j是事件i的直接前驱,则vl(j)=min{vl(i)-dut(j,i)|(j,i)属于S,1<=j<=n-1}其中,S是所有以i为顶点,j顶点为尾的弧的集合。
在这里插入图片描述
图中若顶点旁边的值代表该顶点的最迟发生时间,则vl(j)=7.
在这里插入图片描述

🏆2.2.3例题

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

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

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

相关文章

终结痛点!超级素材中转站,轻松实现素材跨设备使用

华为升级HarmonyOS 3系统后&#xff0c;更新了“中转站”功能。该功能允许各种类型的文件在华为设备间无缝流动&#xff0c;包括但不限于图片、视频和文档等。借助"中转站"&#xff0c;你可以毫不费力地将文件从一个华为设备传送到另一个华为设备&#xff0c;避免了电…

密码加密解密之路

1.背景 做数据采集&#xff0c;客户需要把他们那边的数据库连接信息存到我们系统里&#xff0c;那我们系统就要尽可能的保证这部分数据安全&#xff0c;不被盗。 2.我的思路 1.需要加密的地方有两处&#xff0c;一个是新增的时候前端传给后端的时候&#xff0c;一个是存到数…

在Vue3中使用Element-Plus分页(Pagination )组件

开发过程中数据展示会经常使用到&#xff0c;同时分页功能也会添加到页面中。 记&#xff1a;在Vue3中使用Element-Plus分页组件与表格数据实现分页交互。 开始实现 引入表格和分页组件的H5标签。 <strong>Element-Plus分页组件使用</strong> <div><el-t…

OSCP系列靶场-Esay-DC-1

目录 总结 准备工作 信息收集-端口扫描 目标开放端口收集 目标端口对应服务探测 信息收集-端口测试 22-SSH端口的信息收集 22-SSH端口版本信息与MSF利用(pass) 22-SSH手动登录尝试(失败) 22-SSH弱口令爆破(爆破着玩) 80-HTTP端口的信息收集 信息收集-网站指纹 漏洞…

目标检测 Faster RCNN全面解读复现

Faster RCNN 解读 经过R-CNN和Fast RCNN的积淀&#xff0c;Ross B. Girshick在2016年提出了新的Faster RCNN&#xff0c;在结构上&#xff0c;Faster RCNN已经将特征抽取(feature extraction)&#xff0c;proposal提取&#xff0c;bounding box regression(rect refine)&…

DataBinding原理

1、MainActivity首先使用DataBindingUtil.setContentView设置布局文件activity_main.xml。 2、随后&#xff0c;经过一系列函数调用&#xff0c;ActivityMainBindingImpl对象最终会实例化&#xff0c;并与activity_main.xml进行绑定。 3、实例化后的ActivityMainBindingImpl对象…

动画师如何选择全身动捕设备制作动画?

随着行业的不断发展&#xff0c;全身动捕设备在动画制作行业的应用已十分普遍。全身动捕设备分为光学动捕设备和惯性动捕设备&#xff0c;动画师该如何选择全身动捕设备制作动画&#xff1f; 与光学动捕设备相比&#xff0c;惯性动捕设备对场地和空间的限制更小&#xff0c;不…

重视日常消防巡检有必要,智能巡检系统来帮忙

近日,山西吕梁市永聚煤矿一办公楼发生火灾&#xff0c;造成重大人员伤亡&#xff0c;事故造成26人死亡、38人受伤。 是的&#xff0c;你没看错&#xff0c;煤矿公司、办公楼火灾、重大伤亡。第一反应&#xff0c;煤矿即使出事故也多为作业事故&#xff0c;居然还能在日常消防安…

【dc-dc】世微 电动车摩托车灯 5-80V 1.2A 一切二降压恒流驱动器AP2915

产品描述 AP2915 是一款可以一路灯串切换两路灯串的降压恒流驱动器,高效率、外围简单、内置功率管&#xff0c;适用于5-80V 输入的高精度降压 LED 恒流驱动芯片。内置功率管输出最大功率可达 12W&#xff0c;最大电流 1.2A。AP2915 一路灯亮切换两路灯亮&#xff0c;其中一路灯…

《洛谷深入浅出基础篇》 图的基本应用

什么是图&#xff1f; 我们在生活中学习中能看见很多图&#xff0c;地图&#xff0c;路线图&#xff0c;思维导图等等&#xff0c;它们都有一个特点&#xff0c; 你从中任找一个点&#xff0c;你可以找到&#xff0c;从这个点出发&#xff0c;能够到达什么地方&#xff0c;也…