典型数据结构-图,图的存储、基本操作和遍历

2023-09-16 19:24:15

引自:《数据结构教程》。

概念

图可以使得元素之间的关系是 多对多。图中任意两个数据元素之间都可能存在连接关系。图作为一种数据结构,可以表达数据元素之间广泛存在着的更为复杂的关系。在众多应用之中,如电子线路分析、工程计划分析、寻找最短路径等等,图是描述这类关系的一个十分自然的模型。有关图论的内容是离散数学的主要内容之一,这里仅仅介绍一些概念和存储方法。

  1. 有向图/无向图:若图中每一条边都是没有方向的,则为无向图。如图中每一条边都具有方向,则称为有向图。

    assets/10.jpg

  2. 通常需要将图中顶点按照一个顺序进行标号,如果某个顶点在一个序列中的位置为 i,那么该顶点为顶点 i。

  3. 权/网:与边有关的数据信息被称为权。在具体应用中权值可以有实际意义,比如线路的长度或等级、电路中两个端点之间的电阻电流或电压值等等。每条边上都带权的图称为网络,或 网。问题所属的领域不同,顶点和边的实际意义也就不同。

  4. 度:顶点的度是指连接在某顶点 v 的边数,记 TD(v)。对于有向图,某顶点 v 的入度是指以顶点 v 为终点的弧的数目,记 ID(v),某顶点 v 的出度是指以顶点 v 为起点的弧的数目,记 OD(v),有 TD(v) = ID(v) + OD(v)。如果用 n 表示图中顶点的数目,用 e 表示边或弧的数目,用 TD(vi) 表示顶点 vi 的度,则有以下关系:2e = 从 i = 1 到 i = n 累加 TD(vi)。从这个关系可知,具有 n 个顶点的无向图最多有 n(n - 1)/2,这样的图称为 完全图,具有 n 个顶点的有向图最多有 n(n - 1) 条边,这样的有向图称为 有向完全图。若一个图接近于完全图则称为稠密图,若边或弧的数目很少的图为稀疏图。

  5. 路径/环(回路)/有跟图:在无向图中两个顶点之间的顶点序列可以使得两顶点之间连通一条通路,即路径。这条路径上所包含边的数目被称为该路径的长度。对于有向图,则该路径也是有相的。对于 带权图 路径长度,是指路径上所有边的权值之和。若出发顶点和结束顶点为一个顶点,则该路径为回路或环。在一个有向图中,若存在一个顶点,使得从该顶点出发的路径可以到达图中其他所有顶点,则称该有向图为有根图,该顶点为该有向图的根。

  6. 子图:一个图的子集,包括图的一部分顶点和边。

  7. 图的连通:对于无向图,若从定点 vi 到顶点 vj(i ≠ j)有路径,则称 vi 到 vj 之间是连通的。如果无向图中任意两个顶点之间都是连通的,则称该无向图为连通图。无向图中的极大连通子图称为该图的连通分量,显然对于一个图其只有一个。若有向图中任意两个顶点之间都是连通的,则称该有向图是 强连通图,有向图 中的 极大 强连通子图 称为该 有向图 的 强连通分量。

  8. 生成树:一个 连通图 的 极小连通子图 称为该图的一个 生成树。生成树中不含有回路,在生成树中添加任意一条边必然会产生回路,若在生成树中减少任意一条边则一定会使它成为非连通的。

  9. 生成森林:若一个有向图恰好有一个顶点的入度为 0,其余顶点的入度均为 1,则是一棵有向树,一个有向图的生成森林由若干棵有向树组成。

图的基本操作

图的存储

  1. 邻接矩阵法(不适合稀疏图,因为空间性价比低)。

    12

  2. 邻接表法。

  1. 有向图的十字链表法。略。

图的遍历

从给定图中任意指定的顶点出发,按照某个原则系统的访问图中的其他顶点,每个顶点仅仅被访问一次,得到由该图中顶点组成的一个序列,这个过程称为图的遍历。

图的遍历 通常采用 深度优先搜索 与 广度优先搜索 方式进行。具体看本文下面的 “DFS & BFS(深度/广度优先搜索)”一节。

深度优先遍历(Depth First Search)的主要思想是首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点。当没有未访问过的顶点时,则回到上一个顶点,继续试探别的顶点,直至所有的顶点都被访问过。(引自 深度优先遍历与连通分量 | 菜鸟教程 (runoob.com)

广度优先搜索,其遍历原则是从图中指定顶点出发,访问该顶点后再依次访问该顶点的各个未被访问过的邻接点,然后从这些邻接点出发,按照同样的原则依次访问他们的未被访问过的邻接点,以此类推,直到图中所有访问过的顶点的临界点都被访问,若此时图中还存在未被访问过的顶点,则从另一个未被访问过的顶点出发,继续进行上述过程,直到图中所有顶点都被访问。广度优先搜索与深度优先搜索不同,首先访问指定的出发点,然后依次访问该顶点的所有未被访问过的邻接点,再接下来访问邻接点的未被访问过的邻接点,以此类推,实现这个过程需要设置一个队列结构。

图的存储方式、遍历的出发点、遍历的方式等的不同均会使遍历后的序列各不相同。

后续概念

最小生成树、最短路径、AOV网与拓扑结构排序、AOE网与关键路径等。

图论基础和表示 | 菜鸟教程 (runoob.com)

更多推荐

【Redis 多机服务的简单认识】

目录主从同步哨兵模式集群服务随着业务的不断发展,单机Redis的性能已经不能满⾜我们的需求了,此时我们需要将单机Redis扩展为多机服务,Redis多机服务主要包含以下3个内容:Redis主从同步Redis哨兵模式Redis集群服务(Redis3.0新增功能)主从同步主从同步(主从复制)是Redis⾼可⽤服务的基⽯,也

OpenCV(三十八):二维码检测

1.二维码识别原理功能图形:位置探测图形:通常,二维码中有三个位置探测图形,呈现L型或大角度十字架形状,分布在二维码的三个角上,用于帮助扫描设备定位二维码的位置和方向。位置探测图形分隔符:帮助扫描设备区分位置探测图形和二维码的数据区域。计算模式:通常是一个小的正方形图案,用于校准扫描设备以捕捉和解码二维码的图像。对齐标

jQuery 框架学习笔记(基础)

WhatjQuery是一种快速、简洁跨游览器的JavaScript函数库,其宗旨是“Writeless,Domore”,它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。注意:jQuery不是将所有的JS封装,只是有选择性的封装

观察者模式 & 发布-订阅模式(设计模式与开发实践 P8)

文章目录观察者模式运用实现观察者模式定义:他用来定义对象之间一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖他的对象都会得到通知运用如果我们使用过DOM上的事件函数,那就接触过观察者模式document.body.addEventListener("click",function(){console.log("

HTML 知识扫盲

写在前面HTML是一门超文本标记语言,不管你听没听说过HTML,但在网上冲浪的途中你无时不刻都在与它接触,他遍布在每个你看得到的互联网的角落。其实对于笔者而言,我已经断断续续地学习过这门语言,经过时间的磋磨,所剩知识也是寥寥无几,这次借此机会复盘并总结一下HTML,当然在这里我不会将HTML语言的细节全盘拖出,只是总结

Android Fragment动画实现

在Android中,你可以使用FragmentTransaction来实现Fragment的动画效果。这允许你在添加、替换或移除Fragment时应用动画,从而改善用户体验。下面是如何实现Fragment动画的基本步骤:1.创建两个Fragment:首先,创建两个Fragment,例如FragmentA和Fragmen

TS同时打包和监视所有ts文件或只指定ts文件

当我们项目中ts文件较多时,我们如何直接打包所有ts文件为js文件?而不是使用tsc文件名一个一个去打包文件一、配置tsconfig.json文件创建一个tsconfig.json文件,该文件中不需要配置任何信息二、控制台输入打包命令在控制台输入如下代码:tsc三、对所有ts文件进行监听但是我们并没有对文件进行监听,修

Linux各种命令-查询篇

目录查看文件内容查看存储空间查看python安装目录查Ubuntu版本查看所有文件(含隐藏文件)查IP查看内存使用情况查看GPU使用情况查看CPU使用情况​​​​​​​查看文件内容cat[选项][文件...]-n:显示行号。-b:显示非空行号。-s:合并空白行。-E:在每行结尾添加$符号。-T:将制表符显示为^I。-v

交换机端口镜像详解

交换机端口镜像是一种网络监控技术,它允许将一个或多个交换机端口的网络流量复制并重定向到另一个端口上,以便进行流量监测、分析和记录。通过端口镜像,管理员可以实时查看特定端口上的流量,以进行网络故障排查、安全审计和性能优化。以下是关于交换机端口镜像的详细介绍:工作原理:交换机端口镜像通过在交换机的配置中指定源端口和目标端口

pycharm 中package, directory, sources root, resources root的区别

【遇到的问题】导入yolov5中有utils文件,自己的代码中也有utils文件,使得yolov5中的这部分引用出错了。【解决方案】单独建立detection文件夹,把检测相关的都放在这里,yolov5是github上拉取的源码,发现yolov5中fromutilsimport...有下划线,且会认为是edgeserv

多输入多输出 | MATLAB实现PSO-LSSVM粒子群优化最小二乘支持向量机多输入多输出

多输入多输出|MATLAB实现PSO-LSSVM粒子群优化最小二乘支持向量机多输入多输出目录多输入多输出|MATLAB实现PSO-LSSVM粒子群优化最小二乘支持向量机多输入多输出预测效果基本介绍程序设计往期精彩参考资料预测效果基本介绍MATLAB实现PSO-LSSVM粒子群优化最小二乘支持向量机多输入多输出1.dat

热文推荐