数据结构 图(概念篇)

图的基本概念

图(Graph)是由顶点(Vertex)边(Edge)组成的非线性数据结构,用于表示实体(顶点)及其关系(边)。数学上表示为 ( G = (V, E) ),其中 ( V ) 是顶点集合,( E ) 是边集合。

图的分类

  1. 无向图

    边没有方向,表示为 ( (u, v) ),表示顶点 ( u ) 和 ( v ) 双向连通。例如社交网络中的好友关系。循序颠倒不影响表达。

  2. 有向图

    边有方向,表示为 ( < u, v > ),表示从顶点 ( u ) 指向 ( v ) 的单向关系。例如网页超链接。​​​这样的表示方式具有方向性,不能颠倒方向,颠倒方向意思相反。

  3. 加权图

    边附带权值,表示关系的强度或成本。例如地图中城市间的距离。就是在指向路径多了距离的数值量。

  4. 稀疏图与稠密图

    稀疏图边数远少于最大可能边数,稠密图边数接近最大可能边数。

在无向图中,节点的度(Degree)是指与该节点相连的边的数量。例如,若节点A与节点B、C、D相连,则节点A的度为3。自环(节点连接到自身的边)通常会被计算两次(即贡献2度)。

在有向图中,节点的度分为入度(In-degree)和出度(Out-degree)。入度是指指向该节点的边的数量,而出度是指从该节点出发的边的数量。例如,若节点A有两条边指向其他节点,一条边指向自身,则其出度为2(自环通常不计入出度),入度为1(自环通常计入入度)。

度的计算方法

对于无向图,可以通过邻接矩阵或邻接表计算节点的度。邻接矩阵中,节点i的度为第i行或第i列非零元素的个数(对于无自环图)。邻接表中,节点i的度是其邻接链表中的元素数量。

对于有向图,入度是邻接矩阵中第i列非零元素的个数,而出度是第i行非零元素的个数。邻接表中,出度是节点i邻接链表的长度,入度需要遍历所有邻接链表统计指向节点i的次数。

度的性质

  • 无向图中,所有节点度的和等于边数的两倍(握手定理)。
  • 有向图中,所有节点的入度和等于出度和,且等于边数。
  • 任何图中,奇数度节点的数量为偶数(无向图)。

图的遍历方式

深度遍历:

深度遍历原则就是优先遍历,如果遇到死胡同或者遇到已经走过的位置就停止遍历,退回到最后遇到的岔路

以A为头节点

输出结果:ABECFD

以B为头节点

输出结果:BECADF

以C为头节点:

输出结果:CABEFD

广度遍历:

广度遍历原则遇到岔路优先遍历各个岔路口,让后在从最开始遍历的位置开始遍历,遇到岔路口就继续刚刚操作。

以A为头节点

输出结果:ABCDEF

以B为头节点

输出结果:BEACDF

以C为头节点:

输出结果:CAEBDF

图的表示方法

邻接矩阵

矩阵类似二维的数组表达方式,而对于邻接矩阵来说就是把对应的节点放入对应的位置,横轴和纵轴的方向都一一对应的放入节点。类似下面。在非加权图中,一般通过1和0表示边的存在,因为不存在A到A,B到B......所以对应的位置都为0,而在加权图中,就会用权的数值和无限来表示边的存在。(无线取对应的类型的最大整数,char 128,short 32768)

矩阵图

矩阵示例图及图的表示图

邻接表

我们会发现在邻接矩阵如果在稀疏图的时候,邻接矩阵会存现很多的空缺的位置导致空间浪费。所以就出现邻接表来减少空间浪费。

邻接表的原理是通过每一个节点打印出对应存储的边。

感谢观看!

悠仁さん

相关推荐
宵时待雨9 小时前
优选算法专题9:哈希表
数据结构·算法·散列表
txzrxz9 小时前
最短路问题——Dijkstra 算法
数据结构·c++·算法·最短路·优先队列
noipp9 小时前
推荐题目:洛谷 P6231 [JSOI2013] 公交系统
c语言·数据结构·c++·算法·游戏·洛谷·luogu
青山木15 小时前
Hot 100 ---腐烂的橘子
java·数据结构·后端·算法·leetcode·广度优先
未来之窗软件服务15 小时前
计算机考试-快速排序—东方仙盟
数据结构·算法·排序算法·仙盟创梦ide·东方仙盟
小龙报16 小时前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
wWYy.16 小时前
数据结构:跳表
数据结构
变量未定义~17 小时前
虚拟节点-星石传送阵(4星)、强连通分量
数据结构·算法
电子云与长程纠缠18 小时前
UE中使用TGuardValue与TInlineComponentArray数据结构
开发语言·数据结构·学习·ue5·游戏引擎
自由随风飘19 小时前
JAVA中的面向对象-2
java·开发语言·数据结构