数据结构(七):图

简介: 定义图是由若干给定的顶点及连接两顶点的边所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系。顶点用于代表事物,连接两顶点的边则用于表示两个事物间具有这种关系。

定义

图是由若干给定的顶点及连接两顶点的边所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系。顶点用于代表事物,连接两顶点的边则用于表示两个事物间具有这种关系。

定义来自维基百科:图论

结构

图中只包含两种类型的元素:顶点(vertex)和边(edge),所以图可以由顶点集合和边集合进行表示,即:G=(V,E)。根据边是否具有方向,可以将图分为有向图和无向图两种。

无向图
graph
有向图
digraph

上面两张图 graphdigraph 具有相同的顶点集合 V,但是边集合 E 不同,所以属于不同的两个图。

权重

上述图定义中提到,边的作用是用来描述两个顶点之间的关系,图 graphdigraph 两个示例中的边仅能表示两个顶点之间是连通的,可达的,并不能代表别的意义。可以给边设置大小值,即权重,表示两个顶点之间连通的程度。例如当图中顶点表示城市的坐标时,则可以设置连接两个顶点的边的权重为距离,或某种交通方式消耗的时间。

graph

从一个顶点出发,到相邻顶点的边的个数称为该顶点的出度,以该顶点为终点的边的个数称为该顶点的入度。因为无向图的边不具有方向性,所以无向图中顶点的出度与入度相等。

路径与回路

从顶点集合 V 中选择 v_1 作为起点,v_2 作为终点,从起点出发到达终点的过程中,经过的边的集合称为路径,路径中边的个数称为路径长度。若路径中不重复经过一个顶点,则称为简单路径。若起点和终点是同一个顶点,则该路径也称之为回路。

连通图、连通分量与生成树

对于无向图,若图中任意两个顶点之间存在路径,则该无向图为连通图;对于有向图,若图中任意两个顶点之间存在路径,则该有向图为强连通图。

对于无向图,其极大连通子图称为该无向图的连通分量;对于有向图,其极大强连通子图称为该无向图的强连通分量。

根据连通分量定义可知,对于连通图,极大连通子图是其自身,所以图的连通分量就是其自身。对于非连通图,因为可以存在多个极大连通子图,所以可以具有多个连通分量。

连通图的极小连通子图也称之为生成树,即包含顶点集合 V,但是边的个数为 |V|-1。生成树可以有多个,经常提到的最小生成树,也就是带权连通图中权值之和最小的生成树。

图相关的概念较多,再次强调一点,就像在介绍二叉树时所说,概念只是起到辅助说明的角色,为了方便理解和传播事物而诞生的产物,不应该过分纠结概念而忽略了真正的目的。

github 链接:

相关文章
|
7月前
|
存储 算法 Go
Golang 数据结构:图
Golang 数据结构:图
94 0
|
6月前
|
存储 算法
数据结构===图
数据结构===图
|
5月前
|
算法 Python
逆袭之路!用 Python 玩转图的 DFS 与 BFS,让数据结构难题无处遁形
【7月更文挑战第12天】图的遍历利器:DFS 和 BFS。Python 中,图可表示为邻接表或矩阵。DFS 沿路径深入,回溯时遍历所有可达顶点,适合找路径和环。BFS 层次遍历,先近后远,解决最短路径问题。两者在迷宫、网络路由等场景各显神通。通过练习,掌握这些算法,图处理将游刃有余。
67 3
|
5月前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
52 1
|
6月前
|
存储
数据结构学习记录——如何建立图(邻接矩阵、邻接表-图节点的结构、创建并初始化、插入变、完整图的建立)
数据结构学习记录——如何建立图(邻接矩阵、邻接表-图节点的结构、创建并初始化、插入变、完整图的建立)
98 0
|
6月前
|
存储 算法
数据结构学习记录——图应用实例-六度空间(题目描述、算法思路、伪代码及解读、图解)
数据结构学习记录——图应用实例-六度空间(题目描述、算法思路、伪代码及解读、图解)
71 0
|
6月前
|
存储 算法 安全
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
47 0
|
6月前
|
存储 C语言
数据结构学习记录——图的遍历(深度优先搜索、广度优先搜索、为什么需要两种遍历、图不连通怎么办)
数据结构学习记录——图的遍历(深度优先搜索、广度优先搜索、为什么需要两种遍历、图不连通怎么办)
73 0
|
6月前
|
存储 机器学习/深度学习
数据结构学习记录——什么是图(抽象数据类型定义、常见术语、邻接矩阵表示法、邻接表表示法)
数据结构学习记录——什么是图(抽象数据类型定义、常见术语、邻接矩阵表示法、邻接表表示法)
78 0
|
7月前
|
算法
【高阶数据结构】图 -- 详解(下)
【高阶数据结构】图 -- 详解(下)