数据结构期末复习(5)图

在这里插入图片描述
在数据结构中,图(Graph)是由节点(Vertex)和边(Edge)组成的一种非线性数据结构。图可以用来表示不同事物之间的关系,比如社交网络中的用户和好友关系、城市之间的道路网络等。

图的基本组成部分包括:

  1. 节点(Vertex):也称为顶点或点,表示图中的一个元素或对象。每个节点可以有一个或多个属性,比如名称、值等。

  2. 边(Edge):表示两个节点之间的连接关系。边可以是有向的(指定连接的方向)或无向的(没有指定连接的方向),也可以带有权重(表示连接的权重或距离)。

  3. 路径(Path):由一系列节点和连接它们的边组成的序列。路径可以是有向的或无向的,可以是闭合的(起点和终点相同)或开放的。

  4. 无向图(Undirected Graph):所有边都是无向的,即没有指定连接的方向。

  5. 有向图(Directed Graph):边具有方向,从一个节点指向另一个节点。

  6. 加权图(Weighted Graph):边具有权重或距离,表示节点之间的某种度量。

  7. 连通图(Connected Graph):图中的任意两个节点之间都存在路径。

  8. 子图(Subgraph):图中的一部分节点和边的集合,仍然构成一个图。

图可以用多种方式实现,包括邻接矩阵、邻接表和关联矩阵等。常见的图算法有深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(如Dijkstra算法和Floyd-Warshall算法)、最小生成树算法(如Prim算法和Kruskal算法)等。

图在计算机科学中有广泛的应用,包括社交网络分析、路由算法、图像处理、电路设计等领域。

在这里插入图片描述
在这里插入图片描述
生成树边数等于顶点数-1 极小!!!

在这里插入图片描述
·

图的存储矩阵

(1)图的邻接矩阵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
n个顶点的无向连通图用邻接矩阵表示时,该矩阵至少有2n一2个非零元素

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

V顶点 E边

在这里插入图片描述

在这里插入图片描述

图的遍历

图的遍历是指按照一定的规则,依次访问图中的所有节点,确保每个节点都被访问且仅被访问一次的过程。常用的图遍历算法有深度优先搜索(DFS)和广度优先搜索(BFS)。

  1. 深度优先搜索(DFS):

    • 选择一个起始节点作为当前节点,并将其标记为已访问。
    • 从当前节点出发,依次访问与该节点相邻且未被访问过的节点。
    • 对于每个未被访问的相邻节点,重复上述步骤直到所有节点都被访问。
  2. 广度优先搜索(BFS):

    • 选择一个起始节点作为当前节点,并将其标记为已访问。
    • 将当前节点加入到一个队列中。
    • 从队列中取出一个节点作为当前节点,访问该节点的所有未被访问过的相邻节点,并将它们标记为已访问。
    • 将这些相邻节点加入队列中。
    • 重复上述步骤直到队列为空。

这两种遍历算法都能够访问图中的所有节点,只是访问顺序不同。DFS按照深度优先的原则,先访问一个节点的所有相邻节点,然后再递归地访问下一个节点的相邻节点。而BFS按照广度优先的原则,先访问一个节点的所有相邻节点,然后再逐层地访问下一个节点的相邻节点。

这些遍历算法在解决图相关的问题时非常有用,例如寻找路径、判断连通性、查找最短路径等。具体选择哪种遍历算法取决于具体的问题需求。

在这里插入图片描述

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

最小生成树

最小生成树(Minimum Spanning Tree,简称MST)是指在一个连通图中选择一棵树,使得这棵树包含图中的所有节点,并且总权值最小。

常用的求解最小生成树的算法有以下两种:

  1. Prim算法:

    • 选择一个起始节点,将其加入到最小生成树中。
    • 在剩余的节点中,找到与当前最小生成树连接的边的最小权值边所连接的节点,并将其加入到最小生成树中。
    • 重复上述步骤直到最小生成树包含图中的所有节点。
  2. Kruskal算法:

    • 将图中的所有边按照权值从小到大进行排序。
    • 依次选择权值最小的边,并判断是否会形成环路。如果不会形成环路,则将该边加入到最小生成树中。
    • 重复上述步骤直到最小生成树包含图中的所有节点。

这两种算法都可以求解最小生成树,但是它们的思想和实现方式略有不同。Prim算法从一个起始节点开始,逐步扩展最小生成树,直到包含所有节点。Kruskal算法则通过按照边权值排序的方式,依次选择边,并判断是否形成环路来构建最小生成树。

最小生成树在实际应用中非常重要,例如在网络设计、电力传输、通信网络等领域都有广泛的应用。求解最小生成树可以帮助我们找到一个具有最小成本或最小距离的连通子图,以满足特定的需求。
在这里插入图片描述

在这里插入图片描述

最短路径

在这里插入图片描述
最短路径是指在图中找到两个节点之间的最短路径,即路径上的边权重之和最小。

常用的求解最短路径的算法有以下三种:

  1. Dijkstra算法:

    • 选择一个起始节点,并将其到起始节点的距离初始化为0,其他节点的距离初始化为正无穷。
    • 从未标记的节点中选择距离起始节点最近的节点,将其标记为已访问。
    • 对于该节点的所有未标记的相邻节点,更新它们到起始节点的距离,如果经过当前节点到达相邻节点的路径比之前的路径更短。
    • 重复上述步骤直到所有节点都被标记为已访问或者没有可选的节点。
  2. Bellman-Ford算法:

    • 将所有节点的距离初始化为正无穷,起始节点的距离初始化为0。
    • 依次对图中的边进行松弛操作,即通过当前边缩短起始节点到相邻节点的距离。
    • 重复对所有边进行松弛操作,直到没有可更新的距离为止。
    • 如果还存在可以更新的距离,则说明图中存在负权回路。
  3. Floyd-Warshall算法:

    • 初始化一个二维数组,记录任意两个节点之间的距离。
    • 通过三层循环,分别遍历所有节点对,更新它们之间的最短路径。
    • 最后得到一个二维数组,其中记录了任意两个节点之间的最短路径。

这些算法可以用于求解不同情况下的最短路径问题。Dijkstra算法适用于单源最短路径问题,即从一个起始节点到其他所有节点的最短路径。Bellman-Ford算法适用于解决含有负权边的最短路径问题,而Floyd-Warshall算法适用于求解任意两个节点之间的最短路径。

最短路径算法在实际应用中有广泛的应用,例如路由选择、导航系统、货物配送等领域。通过求解最短路径,可以帮助我们找到在图中最快或最经济的路径,以满足特定的需求。

拓扑排序

在这里插入图片描述
拓扑排序是一种对有向无环图(DAG)进行排序的算法。它可以将图中的节点按照一定的顺序进行排序,使得所有的依赖关系都得到满足。

具体的拓扑排序算法如下:

  1. 统计每个节点的入度(即指向该节点的边的数量)。
  2. 初始化一个队列,并将所有入度为0的节点加入队列中。
  3. 从队列中取出一个节点,并将其加入结果集中。
  4. 对于该节点的所有邻接节点,将其入度减1。
  5. 如果某个节点的入度变为0,则将其加入队列中。
  6. 重复步骤3到步骤5,直到队列为空。

如果图中存在环路,则无法进行拓扑排序,因为环路中的节点互相依赖,无法确定它们之间的相对顺序。

拓扑排序可以用于解决许多实际问题,例如任务调度、编译顺序的确定、依赖关系分析等。通过拓扑排序,我们可以确定节点之间的执行顺序,确保依赖关系得到满足,从而有效地解决相关问题。

AOE网

AOE 网(Activity On Edge Network)是一种以有向边表示活动(Activity),以顶点表示活动之间的事件(Event)和控制关系的有向无环图(DAG)。

在 AOE 网中,每条有向边表示一个活动,而顶点则表示活动之间的事件或者控制关系。与 AOV 网不同,AOE 网在边上标注了活动的持续时间或者其他相关信息。

AOE 网通常用于表示工程项目的网络计划,其中活动之间存在着先后顺序、依赖关系以及活动的持续时间。通过对 AOE 网进行网络计划的分析,可以确定整个工程项目的最早开始时间、最晚开始时间、关键路径等关键信息。

在 AOE 网中,顶点表示事件,有向边表示活动,每个顶点都有两个时间属性:最早发生时间(EST,Earliest Start Time)和最迟发生时间(LST,Latest Start Time)。通过计算这些时间属性,可以确定活动的最早开始时间、最晚开始时间以及整个项目的关键路径。

AOE 网的关键路径是指项目中耗时最长的路径,它决定了整个项目的最短完成时间。通过计算关键路径,可以确定项目中哪些活动对整个项目的进度具有关键影响。

总结来说,AOE 网是一种用于表示工程项目网络计划的有向无环图,其中边表示活动,顶点表示事件或者控制关系。通过对 AOE 网进行分析,可以确定项目的最早开始时间、最晚开始时间、关键路径等关键信息。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

RLC如何通过改变频率实现输出稳压

当开关频率工作在容性区域时,容抗抵消完感抗还有剩余,所以容抗感抗可以近似为一个容抗Cr,但加上频率的改变,容抗又可以近似为一个可调电阻 那又改如何控制频率,保持输出稳压? 当输入与输出电压不变时,Rac变…

编写servlet

编写servlet 上述代码中的HTML页面将雇员ID发送给servlet。要创建servlet读取客户机发送的雇员ID并检索雇员的详细信息,需要执行以下步骤: 在“项目”选项卡中右击“Employee”节点,然后选择“新建”→Servlet。将显示“新建Servlet”对话框。在“类名”文本框中输入Employ…

苹果电脑(Mac)的node版本安装以及升降级

在开发过程中,对于不同的开发环境或者较老的项目可能需要切换不同的node版本,此过程会涉及到node版本的升级与降级,安装node版本管理模块n(sudo命令)。 全局安装n模块 sudo npm install n -g//输入后回车&#xff0c…

国产操作系统:VirtualBox安装openKylin-1.0.1虚拟机并配置网络

国产操作系统:VirtualBox安装openKylin-1.0.1虚拟机并配置网络 openKylin 操作系统目前适配支持X86、ARM、RISC-V三个架构的个人电脑、平板电脑及教育开发板,可以满足绝大多数个人用户及开发者的使用需求。适用于在VirtualBox平台上安装openKylin-1.0.1…

Python语法进阶——类

Python中的数据类型都属于类。int、str、list都是Python定义好的数据类型类。 print(type(list))#<class type> print(type(list()))#<class list> 一、自定义数据类型 一、语法 class 类名():pass #类名 要求首字母大写 #()可写可省略。 #pass在这里只是用来保证…

Unity学习-逐帧图集动画制作

首先在文件部分创建一个Sprite Library Asset 然后点击创建出来的文件 点下面的加号添加对应的图 添加完成之后点一下Apply 然后新建一个物体 添加这三个组件 其中SpriteLibrary里面 把你刚刚创建的图集文件拉过来 Sprite Resolver选择对应的动作和图片 然后开始制作动画 An…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《计及电-气-热综合能源系统的输配协同优化调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 这篇文章的标题表明文章将关注于综合能源系统&#xff0c;特别是涉及电力、气体和热能的输配协同优化调度。以下是对标题的一些关键词的解读&#xff1…

Matlab/simulink风储调频,多台飞轮储能调频,风电场调频,飞轮储能带有虚拟惯量和下垂控制,三机九节点系统一次调频,离散模型

上述为不同飞轮储能容量配比&#xff0c;风电场容量配比&#xff0c;以及有无附加频率控制的飞轮储能出力分析。 飞轮储能驱动电机为永磁同步机电机PMSG 有无飞轮储能容量较小&#xff0c;所以对频率的改善效果有限&#xff0c;不过可以继续增大容量&#xff0c;从而增大频率的…

【音视频】基于ffmpeg对视频的切割/合成/推流

背景 基于FFmpeg对视频进行切割、合成和推流的价值和意义在于它提供了一种高效、灵活且免费的方式来实现视频内容的定制、管理和分发。通过FFmpeg&#xff0c;用户可以轻松地剪辑视频片段&#xff0c;根据需要去除不必要的部分或提取特定时间段的内容&#xff0c;从而优化观看…

C#,入门教程(23)——数据类型转换的一点基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(22)——函数的基础知识https://blog.csdn.net/beijinghorn/article/details/124181689 先简单回顾一下&#xff0c;C#的数据类型大致有这样一些&#xff1a; &#xff08;1&#xff09;原始类型&#xff1a;byte, bool, int, doubl…

智慧文旅一机游:科技与文化的完美结合,引领智慧文旅新潮流,智慧旅游未来已来

一、科技与文化的完美结合&#xff1a;智慧文旅一机游的核心理念 智慧文旅一机游&#xff0c;是科技与文化相融合的产物&#xff0c;它不仅代表着旅游行业的创新与发展&#xff0c;更是一种文化与科技完美结合的生活方式。一机游的核心理念在于通过先进的科技手段&#xff0c;提…

IOT pwn

已经过了填坑的黄金时期 环境搭建 交叉编译工具链 很多开源项目需要交叉编译到特定架构上&#xff0c;因此需要安装对应的交叉编译工具链。 sudo apt install gcc-arm-linux-gnueabi g-arm-linux-gnueabi -y sudo apt install gcc-aarch64-linux-gnu g-aarch64-linux-gnu -…

两道日常练习题:洛谷P1165日志分析 + 洛谷P1553 数字反转(升级版)

两道题的代码我都会附着文字详解&#xff0c;并且会简洁说明一下思路&#xff1a; 先看第一套题目&#xff1a; 题干&#xff1a; 输入输出&#xff1a; 数据范围&#xff1a; 这很明显是一道栈的问题&#xff0c;我们只需要根据题意模拟即可&#xff0c;需要注意的是当输入的…

动手做个无人机—材料篇

基于浙江大学Fast-Lab(高飞&#xff0c;潘能)和深蓝学院合作课程&#xff1a;第二课&#xff1a;动力套焊接_哔哩哔哩_bilibili 无人机材料1&#xff1a; 1、NUC 猛虎峡谷 准系统 i5薄款&#xff1a; 一款机载电脑&#xff0c;使用i5-1135G7 &#xff0c;最大内存64G&#xff…

八股文学习日常第一期(20240121)

零、前言 1、目的 帮助掌握面试题&#xff0c;就八股文相关内容展开进行学习和整理&#xff0c;也方便之后的复习和巩固。 2、八股文内容来源 ①https://blog.csdn.net/w20001118/article/details/125724647 一、具体内容分析 1、类的完整书写方式 1.1、类 [Access Mod…

7.【CPP】String类

一.汉字的编码 我们知道计算机存储英文字母&#xff0c;标点&#xff0c;数字用的是ascall码&#xff0c;128种用一个字节表示绰绰有余。而汉字远远不止128种&#xff0c;因此汉字需要两个字节表示。 1.gbk编码中汉字占两个字节。 2.utf-8中&#xff0c;一个汉字占三个字节。…

【博士每天一篇论文-技术综述】Machine Learning With Echo State Networks 一篇系统讲解ESN知识的五星文章

阅读时间&#xff1a;2023-11-21 1 介绍 年份&#xff1a;2020 作者&#xff1a;徐元超&#xff0c;曼尼托巴大学 期刊&#xff1a; 无 引用量&#xff1a;无 这篇文章是一篇技术报告&#xff0c;从递归神经网络&#xff08;RNNs&#xff09;引入到回声状态网络&#xff08;…

Unity中实现捏脸系统

前言 目前市面上常见的捏脸一般是基于BlendShapes和控制骨骼点坐标两种方案实现的。后者能够控制的精细程度更高&#xff0c;同时使用BlendShapes来控制表情。 控制骨骼点坐标 比如找到控制鼻子的骨骼节点修改localScale缩放&#xff0c;调节鼻子大小。 BlendShapes控制表…

【数学笔记】集合及简要逻辑

集合 基础简要逻辑集合间的关系与运算 基础 集合定义&#xff1a;把一些能够确定的不同对象组成的整体叫做一个集合&#xff0c;每个对象叫做元素。集合记法&#xff1a;一般用大写字母 A , B , C . . . . . . A,B,C...... A,B,C......表示集合&#xff0c;小写字母 a , b ,…

分布式锁实现(mysql,以及redis)以及分布式的概念

道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物 我旁边的一位老哥跟我说&#xff0c;你知道分布式是是用来干什么的嘛&#xff1f;一句话给我干懵了&#xff0c;我能隐含知道&#xff0c;大概是用来做分压处理的&#xff0c;并增加系统稳定性的。但是具体如…