1. 图的概述
在线性表中,每个元素之间只有⼀个直接前驱和⼀个直接后继。在树形结构中,数据元素之间是层次关系,并且每⼀层上的数据元素可能和下⼀层中多个元素相关,但只能和上⼀层中⼀个元素相 关。 但这仅仅都只是⼀对⼀,⼀对多的简单模型,如果要描述多对多的复杂关系就需要图数据结构了!
1.1 图的表示
- 图G是由两个集合V和E组成,记为G = (V, E),其中V是顶点的有限⾮空集合,E是V中顶点偶对的有限集,这些顶点偶对称之为边(弧)。
- V是⼀个有限的的⾮空集合,我们也称之为顶点集合,其元素称之为顶点或者点。V = {v1,v2,v3,v4,v5}。我们⽤|V|来表示顶点的数⽬。
- E是由V中的点组成的⽆序对构成的集合的边集,其元素称之为边,且同⼀点对在E中可以重复出 现 多次(如果⽐标上边的重数的话,每⼀点对只要出现⼀次就⾏了)。⽤|E|表示边数。
- 图可以⽤图形表示,顶点集V中元素⽤平⾯上的⼀个⿊点表示,边集E中元素⽤⼀条连接V中相应点对的任意形状的线表示。现实中,点集合代表事物或对象的全体,边集代表点之间的联系或者相互作⽤。即图是描述事物之间联系或相互作⽤状态的⼀个概念。
1.2 图的基本术语
1.2.1 简单图
在图结构中,若不存在顶点到其⾃身的边,且同⼀条边不重复出现,则称这样的图为简单图。
1.2.2 ⽆向图
在图G中,如果代表边的顶点偶对是⽆序的,则称G为⽆向图。
若关系< V i,V j>⽆⽅向性,则称此时的图为⽆向图,关系⽤(Vi ,V j),称之为⼀条表(edge)。
1.2.3 有向图
设 Vi 、V j为图中的两个顶点,若关系< Vi ,V j>存在⽅向性,则称相应的图为有向图。 Vi 为弧尾,Vj 为弧头。
有向图的边是有明确⽅向的,例如下图的就表示⼀个有向图,每⼀条边都是有明确⽅向的
有向⽆环图(Directed Acyclic Graph,简称DAG)
如果有⼀个有向图,从任⼀顶点出发⽆法经过若⼲条边回到该顶点,那么它就是⼀个有向⽆环图。
在图G中,如果表示边的顶点偶对是有序的,则称G为有向图。⼀个图要么为⽆向图,要么为有向图。不存在部分有向或者部分⽆向的情况。
混合图(Mixed Graph)表示的是边可能有向,可能⽆向。
1.2.4 完全图
如果图中的每两个顶点之间,都存在⼀条边,我们就称这个图为完全图。
完全有向图:有n(n-1)条边
完全⽆向图:有n(n-1)/2条边
1.2.5 端点、邻接点
在⼀个⽆向图中,若存在⼀条边(i,j),则称顶点i和顶点j为该边的两个端点。并称它们互为邻接 点。
在⼀个有向图中,若存在⼀条边<i,j>,则称顶点i和顶点j为该边的两个端点。它们互为邻接点。 此时,顶点i为起点。顶点j为终点。
1.2.6 顶点的度、⼊度和出度
顶点的度:在⽆向图中,顶点所具有的边的数⽬。
⼊度和出度:出度、⼊度使⽤于有向图。
- 出度(Out-degree)
- ⼀个顶点的出度为x,是指有x条边以该顶点为起点(以当前节点,出发的边的数量,就表 示出度值)
- ⼊度(In-degree)
- ⼀个顶点的⼊度为x,是指有x条边以该顶点为终点(以当前节点为重点的边,就表示⼊ 度)
- ⼀个顶点的⼊度和出度的和称为该顶点的度。在⼀个具有e条边的图中:度之和为2e。
1.2.7 ⼦图
设有两个图G=(V,E)和G'=(V', E'),若V'是V的⼦集。则称G'是G的⼦图。
1.2.8 路径(顶点序列)和路径⻓度(边的数⽬)
在⼀个图G=(V, E)中,从顶点i到顶点j的⼀条路径是⼀个顶点序列(i, i1, i2, ..., im, j),若此图G是⽆向图,则边(i, i1), (i1, i2), ...(im, j) 属于E(G);若此图是有向图,则, , ... 属于E(G)。
路径⻓度是指⼀条路径上经过的边的数⽬。若⼀条路径上除开始点和结束点可以相同外,其余顶点 均不相同,则称此路径为简单路径。
1.2.9 回路或环
如果⼀条路径上的开始点与结束点为同⼀个顶点,则称此路为回路或者为环。开始点和结束点相同 的简单路径被称为简单回路或者简单环。
如果经过图中各边⼀次且恰好⼀次的环路,称之为欧拉环路,也就是其⻓度恰好等于图中边的总 数, { C, A, B, A, D, C, D, B, C}就是⼀条欧拉环路
如果是经过图中的各顶点⼀次且恰好⼀次的环路,称作哈密尔顿环路,其⻓度等于构成环路的边 数。 {C, A, D, B, C}就是⼀条哈密尔顿环路。
1.2.10 连通、连通图和连通分量
如果顶点x和y之间存在可相互抵达的路径(直接或间接的路径),则称x和y是连通的。
如果图G中任意两个顶点都连通,则称G为连通图,否则称为⾮连通图。
- ⽆向图G中的极⼤连通⼦图称为G的连通分量。
- 对于连通图只有⼀个极⼤连通⼦图,就是它本身(是唯⼀的)。
- ⾮连通图有多个极⼤连通⼦图。(⾮连通图的极⼤连通⼦图叫做连通分量,每个分量都是⼀个连通图)。之所以称为极⼤是因为如果此时加⼊⼀个不在图的点集中的点都会导致它不再连通。
- 极⼩连通⼦图,只有连通图才有极⼩连通⼦图这个概念。就像⼀个四边形,四个节点四条 边,其实三条边就能连通了,所以四个节点三条边,就OK了,就是在能连通的前提下,把多余的边去掉。
1.2.11 强连通图和强连通分量
在有向图G中,若从顶点i到顶点j有路径,则称从顶点i到顶点j是连通的。
若图G中的任意两个顶点i和顶点j都连通,即从顶点i到顶点j和从顶点j到顶点i都存在路径,则称图G 是强连通图。
有向图G中的极⼤强连通⼦图称为G的强连通分量。显然,强连通图只有⼀个强连通分量,即⾃身, ⾮强连通图有多个强连通分量。
1.2.12 稠密图、稀疏图
当⼀个图接近完全图的时候,称之为稠密图;相反,当⼀个图含有较少的边数,则称之为稀疏图。 ⼀般对于这个边的个数,说法⽐较多,通常认为边⼩于nlogn(n是顶点的个数)的图称之为稀疏 图,反之称为稠密图。
1.2.13 权和⽹
图中的每⼀条边都可以附有⼀个对应的数,这种与边相关的数称为权。权可以表示从⼀个顶点到另 ⼀个顶点的距离或者花费的代价。边上带有权的图称为带权图,也称之为⽹。
也叫有权图(Weighted Graph)
权值不仅仅可以是整数,还可以是⼩数,负数。根据情况⽽定,甚⾄还可以是⾃定义对象。
1.2.14 连通图的⽣成树
所谓连通图的⽣成树是⼀个极⼩的连通⼦图,它含有图中全部的n个结点,但是只有构成树的n-1条 边。