前言
这是一个开始,希望可以延续下去。想着每天把学到的东西总结一下放在这里。可能有时候去玩耍之类的就鸽了,也有可能觉得内容不适合放在这里就鸽了,也有可能是三分钟热度的褪去。但是,只要我还在这瞎bb,就会好好写,把知识感受写下来。要是有幸有某位看官大人看到,能为您提供帮助是最好的,希望指正批评。 今天学习了数据结构中的图,还停留在基本概念上,就写写我关于这些概念的感悟吧。一、图与数据结构
这里的图指的是什么?答:这个是图论中的概念。举个例子,应该有很多人都玩过一个叫一笔画的游戏,如下图所示,能否在不走回头路的情况下走完?至于能不能走完不是本文讨论的重点(我试了一下,是可以滴~),重点是想说明这个东东就叫图。
但你要是告诉计算机这东西叫图,那计算器可听不懂了,得翻译翻译,得告诉计算机这个图里面有什么东西。一看,这里面有顶点(Vertex) ,有边(Edge),那这幅图(Graph)就可以表示为:
G
=
{
V
,
E
}
G=\{V,E\}
G={V,E},
V
V
V为顶点集,
E
E
E为边集。所以,下图可以表达为
G
=
{
{
A
,
B
,
C
,
D
,
E
}
,
{
(
A
,
B
)
,
(
A
,
C
)
,
(
B
,
C
)
,
(
B
,
D
)
,
(
B
,
E
)
,
(
C
,
D
)
,
(
C
,
E
)
,
(
D
,
E
)
}
}
G = \{\{A,B,C,D,E\},\{(A,B),(A,C),(B,C),(B,D),(B,E),(C,D),(C,E),(D,E)\}\}
G={{A,B,C,D,E},{(A,B),(A,C),(B,C),(B,D),(B,E),(C,D),(C,E),(D,E)}}
那具体应该怎么跟计算机说呢?哈希表可以帮我们完成这个工作,每一个顶点对应于一个键,其对应的值是一个列表,里面存放可以到达的顶点(以python为例):
graph = {'A': ['B', 'C'],
'B': ['A', 'C', 'D', 'E'],
'C': ['A', 'B', 'D', 'E'],
'D': ['B', 'C', 'E'],
'E': ['B', 'C', 'D']}
二、图的种类
1.无向图、有向图
上一节所举例的图就是无向图,对于每一个顶点,只要有路,想怎么走就怎么走,都是双向大马路。要是这些大马路有朝一日全都在维修中,变成了单行道,那就成了有向图,如下图所示:
参照无向图,我们可以这样告诉计算机这个有向图:
graph = {'A': ['B'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['E'],
'E': ['B','C']}
2.完全图
延续第一小节马路概念,我们把这个图每个顶点代表一座城市,如果每个城市两两之间能直接互通,即每个顶点之间都有边,那这种图就称为完全图,很明显之前举的例子不是完全图,因为 A 和 D 之间,A 和 E 之间都不能直接互通。把这两条路建起来(下图绿线),就是完全图了。
三、一些基本术语
-
度: 有时候我们想知道一个顶点有多少根线连着,线的数目就是该顶点的度。在有向图中,指向外的数目称为出度,指向自身的数目称为入度;
-
邻接: 如果两个顶点之间有一条边连着,那就称这两个顶点邻接,如果两条边之间隔着一个顶点,则称这两条边邻接;
-
关联:顶点和边连着,则称这条边和这个顶点关联;
-
路径:从一个顶点走到某个顶点所有走过的路;如果中间没有经过同样的顶点,则称为简单路径。如果起点和终点是同一个点,则称为回路,如果除了起点和终点外没有重复的点,则称为简单回路;
-
权:有时候我们可以给这些边赋予一些意义,例如这条路有多长,或者说这条路有多重要(兵家必争之路总要多点照顾)。那么我们可以给它一个数字,这便是权;带权的图称为网;
-
路径长度:从一个点走到另一个点所经路径的权的总和即为路径长度,无标注的话,权默认为1。
-
子图:有时候我们想聚焦某些点,那我们可以单独把这些顶点及相应的边拿出来形成一幅新的图,那这幅新的图即为原图的子图;
-
连通:一个顶点有路径到达另一个顶点,则称这两个顶点连通;
-
连通图:无向图中的每个顶点都与其他顶点连通,则称为连通图;若是有向图则称为强连通图;
-
连通子图:若某图的子图是连通图,则可称为连通子图。若这一连通子图再加上图中剩下的点都不是连通图,则称该子图为极大连通子图(也叫连通分量)。同理,若去除子图中的任意一顶点都不是连通图,则称该子图为极小连通子图。若是有向图,则名字都改为强连通子图,强连通分量,极小强连通子图。引用网友的一句话“有方向就是强”
-
生成树:把一个图的强连通分量中每个点到另一个点的路径都只保留一条,其他都去掉(奸商行为,为了减少成本少造路),最后得到的图就成为生成树。这是因为这个图可以转化为数据结构中的树。
示意图嘛……暂时懒得画了哈哈,到时候有空再补上。好啦,今天就写到这了。