L05-图论
图的由来——对现实世界的抽象
哥尼斯堡七桥问题
化学研究中的分子结构表示
如,丁烷(C4H10)的两种同分异构结构用图可以表示为:
高铁线路图
期末考试时间的排布
一个学校要对期末考试进行排布,如何避免时间上的冲突?
抽象为图的模型来解决,则顶点代表待排布的课程,连接两个顶点边表示有学生同时选择了这两门课程。
问题转化为用不同的颜色去给顶点上色(顶点着色问;四色问题),要求不同时间段的考试(顶点)用不同的颜色
,相同时间段的考试(顶点)用相同的颜色。
图的构成
什么构成了图:——顶点和边构成的网络结构
- 我们关心什么?
- 图中有多少个点
- 哪些点之间有线(边)连接
- 我们不关心什么?
- 边的长度
- 边是否弯曲
- 点的绝对位置
定义
文字定义:
一个图是一个序偶<V, E>,符号表示为: G = <V, E>
V = {v1, v2, …, vn}为有限非空集合,Vi称为顶点,或简称点,V称为顶点集,用**|V|表示顶点数**
E是有限集合,为一个图的所有边的集合,称为边集,且E中的每个元素都有V中的结点对与之对应,用|E|表示边数
常见名词解释
有限图:顶点数和边数都有限的图
空图:边集为空(无边)的图
平凡图:只有一个顶点的图
n 阶图:顶点数为n的图
(n, m) 图:顶点数为n,边数为m的图
环:端点重合为一点的边
重边:连接两个相同顶点的多条边(大于1条),边的条数称作边的重数
简单图:图中没有环且没有重边
复合图:图中有环或者有重边或者二者均有
图的表示
集合表示
对于一个图,将其记为G=<V,E>,并写出V和E的集合表示。
- 优点:可以精确描述图的组成信息
- 缺点:较为抽象,不易于直观理解
图形表示
(1)用小圆圈表示V中的结点
(2)有序的结点对<u, v>表示由结点u指向结点v的有向边e
(3)此时u称为e的始点,v称为e的终点,统称为e的端点
(4)无序的节点对(u, v)(或(v, u))表示结点u和结点v之间的无向边
(5)此时仅称u,v为边e的两个端点
- 优点:可以直观形象地表示图,易于理解
- 缺点:当图中结点以及边的数量比较大时,很难全部绘制出来
矩阵表示——邻接矩阵
我们经常需要计算机帮助我们去处理图的数据,然而对于计算机而言,集合的形式或者图形的形式都不太适合,而矩阵却是非常适合计算机计算的形式。
- 矩阵表示(邻接矩阵)需要准备什么?
- 矩阵的行与列有固定的次序,行列的位置不同,代表不同的矩阵
- 需将图中的结点按某种既定顺序排列
- 若并未给出具体排序,则顺序默认为书写结点集V时的结点顺序
- 邻接矩阵
设图G = <V, E>,其中V = {v1, v2, …, vn},并已确定了各结点的排列次序,则将n阶方阵AG = (aij)nxn称为G的邻接矩阵,其中:
图的邻接矩阵是唯一的吗?
- 一般而言,同一个图按照不同的顶点排列次序,写出的邻接矩阵形式上是不同的,但是相互之间可以通过调换某些行或列的位置而得到。
- 对邻接矩阵的行或列进行交换,对应的实际上是在对顶点的排序中调换顶点的位置
- 若不考虑顶点排序的不同产生的邻接矩阵的不同,则图与邻接矩阵之间是一一对应的
- 实际操作上,往往略去顶点排序不同导致的邻接矩阵的多样性,选择任意一种顶点次序得出的邻接矩阵作为该图的邻接矩阵
图的种类
按边有无方向
- 有向图
- 无向图
- 混合图
按有无平行边(重边)
多重图:有平行边的图
线图:无平行边的图
简单图:无环的线图
按边或顶点是否赋予权重
无权图
赋权图: G是一个三重组<V, E, g>或四重组<V, E, f, g>,其中V是结点集合,E是边的集合,f是从V到非负实数集合的函数,g是从E到非负实数集合的函数。
最短路径——Dijkstra算法
给出一个赋权图,若顶点代表了不同的城市,权重代表了不同城市间的距离,给定起点,如何求出其到任意一点的最短路径?
思路:
把顶点集合V分成两组
- S:已解决的顶点的集合(初始时只含有源点V0)
- U:尚未确定的顶点集合
将U中顶点按递增的次序加入到S中,保证:
- 从源点V0到S中其他各顶点的长度都不大于从V0到U中任何顶点的最短路径长度
- 每个顶点对应一个距离值
S中顶点:从V0到此顶点的长度
U中顶点:从V0到此顶点的只包括S中顶点作中间顶点的最短路径长度
Tips:不适用权重为负的情况
树
定义
不含圈的连通图
生成树
- 性质
- 包含连通图中所有的顶点的树
- 任意两个连通的顶点之间有且仅有一条边
- 顶点数-边数=1
最小生成树
性质
- 仅针对赋权图而言
- “最小”指的是树中所有边的权重之和最小
- 为“最小权重生成树”的简称
应用
- 不同城市间怎样修路使得各个城市都能连接上又令总里程最短
- 通信线路的铺设
Kruskal算法:
构造一个只含原图G中所有顶点,而不包含任何边的子图T
将图中的边按照权重大小进行从小到大的排序,形成集合E
从E中选取当前权值最小的边
若该边的两个顶点分属不同的树,则将其加入子图T
将该边从E中移除
重复步骤3~5,直至子图T为原图G的一个生成树
Prim算法
图与人工智能
社交网络的分析
电商平台相关商品的推荐
车辆路径规划
港口叉车调度