目录
图的定义和基本术语
概述:一种复杂的非线性结构,结点之间的关系可以是任意的,图中任意两个元素之间都可能相关。
图由两个集合V、E组成,定义为G=(V, E),其中V是顶点的有限非空集合,E是由V中顶点偶对表示的边的集合。
顶点集 V(G),边集 E(G)。E(G)可以为空集,只有顶点没有边。
有向图
- 概述:每条边都是有方向的图
- 一条有向边是由两个顶点组成的有序对,用尖括号表示<>
- <v(i),v(j)>表示一条有向边,此边称为顶点v(i)的一条出边,顶点v(j)的一条入边
- 有向边称为弧
- 边的起点称为弧尾
- 边的终点称为弧头
无向图
- 概述:每条边都是没有方向的图
- 边都是顶点的无序对,用圆括号表示( )
图示:
有向图G1的顶点集和边集 | |
无向图G2的顶点集和边集 |
- n表示图中顶点数,e表示图中边或弧的数目
- 具有1/2*(n)*(n-1)条边的无向图称为无向完全图
- 具有(n)*(n-1)条边或弧的有向图称为有向完全图
入度:以该顶点为终点的入边数目。
出度:以该顶点为起点的出边数目。
该顶点的度 = 入度 + 出度
如果顶点v(i)的度为D(v(i)),不管是有向图或无向图,顶点数n,边数e和度数之间有如下关系:
例如,上图G1的边数e = ( D(v(1)) + D(v(2)) + D(v(3)) ) / 2 = (3 + 2 + 3) / 2 = 4
路径长度:一条路径上经过的边的数目。
简单路径:一条路径上除了起点和终点可以为同一个顶点外,其余顶点均不相同的路径。
回路 (环):一条简单路径上的起点和终点为同一个顶点。
在一个无向图中,顶点v(i)到顶点v(j)有路径,称v(i)和v(j)是连通的。
连通图:在一个无向图中,任意两个顶点v(i)和v(j)都连通。否则为非连通图。
连通分量:无向图的极大连通子图。
任何连通图的连通分量只有一个,其自身。而非连通图的无向图有多个连通分量。
图示:
强连通图:在一个有向图中,任意两个顶点v(i)和v(j)都连通。
有向图中的极大连通子图称作有向图的强连通分量。
在一个图的每条边上标上某种数值,该数值称为该边的权。
边上带权的图称为带权图。
带权的连通图称为网络。
图示:
图的存储结构
邻接矩阵表示法
概述:是表示图形中顶点之间相邻关系的矩阵。
转换规则:0代表顶点之间不连通,1代表顶点之间是连通的。
带权图的转换:把1换为相应边上的权值,0的位置可以不动或将其换为无穷大表示。
图示:
图6.7是转换图6.6之后的邻接矩阵,图6.8是转换的上图6.5中的带权图。
无向图的邻接矩阵是按主对角线对称的。
邻接表表示法
概述:图的一种链式存储结构。类似树的孩子链表表示法。
图示:基于上述图进行的转换
时间复杂度
图的深度优先和广度优先时间复杂度主要是根据图的表示方式来决定的。
- 采用邻接矩阵表示,时间复杂度为:O(n^2)
- 采用邻接表表示,时间复杂度为:O(n+e)
图的遍历
深度优先搜索遍历
基本思想:
- 从图中选任意一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点
- 当没有未访问过的顶点时,则回到上一个顶点,继续试探别的顶点,直到所有的顶点都被访问过
图示:
深度优先遍历图G(8)的顶点访问序列:v(0),v(1),v(2),v(5),v(4),v(6),v(3),v(7),v(8)
广度优先搜索遍历
基本思想:首先访问出发点v(i),接着依次访问v(i)的所有未被访问过的邻接点v(i1),v(i2),...,v(it)并都标记为已访问,然后再按照v(i1),v(i2),...,v(it)的次序,访问每一个顶点的所有未曾访问过的顶点并都标记为以访问过,依次类推,直到图中所有和初始出发点v(i)有路径想通的顶点都已访问过为止。
图示:
广度优先搜索遍历序列:v(0),v(1),v(3),v(4),v(2),v(6),v(8),v(5),v(7)
图的生成树
在图论中,常常将树定义为一个无回路的连通图。
一个连通图G的一个子图如果是一棵包含G的所有顶点的树,则该子图称为G的生成树。
生成树是连通图的包含图中所有顶点的一个极小连通子图 (边最少)。一个图的极小连通子图恰为一个无回路的连通图。
一棵具有n个顶点的生成树有仅有n-1条边,有n-1条边的图不一定是生成树。同一个图可以有不同的生成树。
图示:
由深度优先搜索所得的生成树称之为深度优先生成树,简称DFS生成树。
由广度优先搜索所得的生成树称之为广度优先生成树,简称BFS生成树。
图示:基于上图G(8)的转换
对于连通的带权图,生成树也是带权的,生成树各边的权值总和称为该树的权,权值最小的生成树称为图的最小生成树 (MST)。
拓扑排序
概述:对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前。简单点说就是,该顶点的所有指向它的顶点排过序后才能排该顶点。
特点:
- 有向无环图才存在拓扑序列
- 可能存在多个拓扑序列
图示:
拓扑序列1:C1、C4、C2、C7、C3、C8、C9、C6、C5
拓扑序列2:C2、C9、C6、C1、C7、C4、C3、C5、C8
......