图论入门及基础概念(图篇)
目录
图篇
这是第一次写博客,为了下载积分而来。
随便写些,各位大佬们多多指。
本次内容是关于图论的引入的,内容如下:
- 矩阵引入
- 什么是图?其如何表示?
- 图论起源之七桥问题
- 图论引入
- 图论相关基本概念
- 图论的表示引入
- 图的表示法
- 矩阵引入
线性代数学的好的可以直接跳过,
当然,看不懂的也可以直接跳过,这部分引入只是计为了后面计算上方便,
矩阵可以用在生活的方方面面,出现在各个学科中,
例如,我们如何用矩阵(向量)来描述化学反应方程式:
首先,用向量描述一个物体必须先划分维度
。
由于原子守恒原理我们知道
氧原子
和氢原子
相互独立
,互不相关
。
所以我们假设两个维度空间
为氧空间
和氢空间
并且这两个空间相互垂直(即线性无关)
基于空间运算的封闭性,我们得出该方程式存在的完备空间S为:
由于向量空间运算的封闭性
,我们有:
我们分别将氧气
和氢气
表示为该空间下的向量点
:
于是化学方程式配平便变成了向量之间的运算:
由于氧气和氢气是该完备空间的基,即单质。
容易运算出答案:
图及其表示
-
什么是
图
要说什么是图,这个有点不太好说,概念的东西太抽象,我还是直接说图的表示吧,知道图的表示形式,自然也就知道什么是图了。
·图的表示一般是分为两块的:
(1)
某类具体事物
(2)这些事物之间的联系
·而在图论中,只存在两种形态:
①
节点
②边
这两种形态通常这样对应:
由于这种对应关系,我们通常把这种关系转化为矩阵描述,在前言中我们提到了一个例子:
在这里,具体事物
即:
抽象事物
(事物间的联系)即其中的数量关系
。
于是我们将化学方程改为如下矩阵式:
我们可以看到,矩阵分为两块:
PS: 所以说,用矩阵描述问题能使描述过程更加清晰化,建议采用。
图论起源之七桥问题
七桥问题很经典,我们都知道大数学家欧拉将其转为一笔画的问题,并顺利解决,由此开创了图论的先河。
用下图举个例子:
若将其看做画线问题:
对于任意非起始点,我们要一笔通过他只有如下两种可能:
(1)两条路线:
有进必有出,必然是能够一笔完成的
(2)四条路线:
由于通过外界一圈以后又回来所以对于这种偶数条线路,
可以等效为如下形式:
即将该节点视为另外一个圈起始点,其中的闭圈必然能够由一笔画完成,由于该圈可以独立出去,我们将该圈等效为不存在,便将偶数边节点等效为如下一进一出的两条边节点
:
三条路线:
三条线路相对复杂,但它的进出也只有如下两种可能形式:
同样,我们运用等效原理
将其等效为如下形式:
我们将其中的闭圈化简去掉,即等效为:
所以,该节点必然是一笔画的起点
(右图形式)或者终点
(左图形式)
所以,我们得出了如下的基本结论:
①
拥有偶数边的节点
可以等效为只有一进一出两条边的点。
即该点等效为过程点。
②拥有奇数边的节点
可以等效为要么进,要么出的单边的节点。
即该点等效为起始点。
唧唧歪歪了这么多,我们还是回到七桥问题吧:
那么问题来了:
问:该图能否由一笔画完成,并说明理由。
首先我给出答案不能
,理由是:
A、C、D、B节点均为奇数边
故等效为4个起始点,而一个一笔画的图最多只能有两个起始点
。PS:若要求一笔画的终点和起点重合,则图节点中必然
全为偶数边
,这就是十分显然的了。
图论引入
图论,顾名思义,必然是关于图的理论咯
由于图的表示分为两块:
①
节点
②边
我们不妨假设对于图 :
①节点集 记为:
,
② 边集 记为:
那么问题来了:
我们该如何去表示其中的某个节点或边呢?
PS:马克思说:“人的本质不是单个人所固有的抽象物,在其现实性上,它是一切社会关系的总和。”(《马克思恩格斯选集》第2版第1卷第60页)
附即兴打油词一首:
《如果说》—妖米
如果说人类是一个集合,那么某个人便由他的社会关系总和来定义。
如果说节点集是一个集合,那么某个节点便由他的边的总和来定义。
如果说边集是一个集合,那么某条边便由他连接的点的总和来定义。
2018-9-4 —— 23:12
图的表示:
对于任意某条边,以边e1为例:
由于任意边节点只有两个,我们不妨记为
对于任意某个节点,分别以v3,v4为例:
对于v3,我们记为:
对于v4,我们记为:
但是,这么记虽然没错,但是我们想能不能用一种统一的格式去表示,将其任意点化为统一的标准格式
于是,我们灵光一闪想了一个办法 :
还记得前面提到的原子守恒那边的完备空间吧
事实上,由于我们约定俗成,比如说第一行就表示v1,第二行就表示v2,所以我们完全可以将如上形式化为如下:
即以逻辑值来代表是否存在连接。
事实上,由于标准化的约定,我们可以将如上形式整理成表格:
节点 \ 边-> | e1 | e2 | e3 | e4 | e5 | e6 | e7 |
---|---|---|---|---|---|---|---|
V1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
V2 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
V3 | 0 | 1 | 1 | 1 | 1 | 1 | 0 |
V4 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
边的表示和读取:
点的表示和读取:
由于如上表格中,既有包含所有点的表示,由包含所有边的表示,所以那个表格便是一个图。
通常我们不写表格,主要原因麻烦,我们通常直接写为矩阵:
图论的基本概念
-
1、有向图
顾名思义,就是有方向的图呗。
-
2、无向图
就是没有有方向的图呗,也可以叫双向图。像前面的例子,七桥问题都是无向图。
-
3、有限图
就是节点和边都有限的图呗。
-
4、简单图
就是没有环和多重边的图,
因为环独立且封闭,可产生*变量,导致问题变复杂。多重边可分解为 边+环。
反例: -
5、完全图
就是任意两个点都有一条边相连的图。
P s:有一种结构叫拓扑 -
6、二分图
可以把顶点集分成两组,并且同组顶点不相邻的图。如:
-
7、子图与母图
如果原图叫母图,那么从其中抠一份下来,那就叫它的子图。
-
8、顶点v的度:
就是顶点的边数(环算两条边)。
由于每条边都连接两个顶点,所以一个图的顶点度之和必然是边的两倍。
即:
任意图必然可由N个1笔画完成,而每一笔在图中产生的奇顶点数要么2个,要么0个,所以任意图的奇顶点数必然是偶数个,这是很显然的。
9、 途径
两个顶点之间的通路我们称为途径
。
若是途径中没有重复的顶点,我们称为
路
。
如果没有重复的边,我们称为迹
。
10、边与弧
为了区分边是否有方向,通常
有方向的叫弧
,没方向的叫边
。
图的表示引入
前面我们以七桥问题(无向图)
讲了图的表示:
\ | e1 | e2 | e3 | e4 | e5 | e6 | e7 |
---|---|---|---|---|---|---|---|
V1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
V2 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
V3 | 0 | 1 | 1 | 1 | 1 | 1 | 0 |
V4 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
那么问题来了,用这种方式表示有向图该怎么表示?
对于一个图,有两个要素:
1、
具体要素
2、具体要素间的联系
由于具体要素(顶点集)肯定没法变:
①
节点集
记为:
②弧集
记为:
我们尝试另外一种表示:
我们不再用连接的边来定义节点,而用邻接节点来定义节点。如:
以下图为例:
(可达的通路)的记为1。额。。。。 V3 = 。。。
我们还是以下图为例吧:
刚才你们什么都没看见:
其中(可达的通路)的记为1。
于是我们整理成矩阵表格:
\ |
V1 | V2 | V3 | V4 |
---|---|---|---|---|
V1 | 0 | 1 | 1 | 0 |
V2 | 0 | 0 | 1 | 0 |
V3 | 0 | 0 | 0 | 1 |
V4 | 1 | 0 | 0 | 0 |
我们做如下约定:
于是,该矩阵定义了顶点之间的联系。
即表示出了弧集
。
我们发现,这种矩阵定义的方式,既可以表示有向图,又可以表示无向图
,而且貌似还比原来的表示方法更节省空间。
但是这种方法的
缺点很明显
就是,当出现多重边时无法表示
,反正你们刚才什么都没看到就对了。
图的表示法
-
这种用邻接节点定义其他节点的方法:
我们不妨叫做
邻接矩阵法
: -
而那种用边将两个顶点关联起来的方法,
我们不妨叫
关联矩阵法
:
事实上,我们用关联矩阵也可以表示有向图
,只要约定入节点为-1,出节点为1即可。 当然,还有其他方法可以表示图,在计算机中,只要方便于运算的表示方法都可以。
如,直接用弧集来表示图:
即用二维数组的方法表示。
这种用弧集表来表示图的方法,
我们不妨叫弧表表示法
当然,还可以整理成有序的:
对了,忘了讲一件事,通常我们增加一行,用来放弧的权重。对于邻接矩阵和关联矩阵,直接把例中的1改成相应权重即可。
- 还有一种方法,就是用程序把图画出来。
熟悉C语言的童鞋可能知道
指针和结构体
。
如果接触过数据结构可能知道链表
。
如:
struct point
{
point * P;
int Data;
};
然后将数据挂在链表上。
这种方法提一下,懂的自然懂。
不懂也没关系,反正我也不多讲了。
结语
- 本次介绍了图论相关基本概念以及相关表
- 感谢您的耐心阅读
- 原创作品,如转载,请注明出处
- 版权声明:https://blog.csdn.net/qq_43133135/article/details/82390300
上一篇: 物联网萤石云获取登录的accessToken工具类
下一篇: 图的遍历 - 邻接矩阵 - 深搜与广搜