数据结构笔记-DAG有向无环图

一 图的基本概念

图(Graph):是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。
数据结构笔记-DAG有向无环图_第1张图片

无向边:若顶点Vi和Vj之间的边没有方向,称这条边为无向边(Edge),用(Vi,Vj)来表示。
有向边:若从顶点Vi到Vj的边有方向,称这条边为有向边,也称为弧(Arc),用来表示,其中Vi称为弧尾(Tail),Vj称为弧头(Head)。
无向图(Undirected graphs):图中任意两个顶点的边都是无向边。
有向图(Directed graphs):图中任意两个顶点的边都是有向边。
:与特定顶点相连接的边数;
出度、入度:有向图中的概念,出度表示以此顶点为起点的边的数目,入度表示以此顶点为终点的边的数目;
路径(path):依次遍历顶点序列之间的边所形成的轨迹。注意,依次就意味着有序,先1后2和先2后1不一样;
简单路径:没有重复顶点的路径称为简单路径。说白了,这一趟路里没有出现绕了一圈回到同一点的情况,也就是没有环;
:第一个顶点和最后一个顶点相同的路径;
简单环:除去第一个顶点和最后一个顶点后没有重复顶点的环;
连通的:无向图中每一对不同的顶点之间都有路径。如果这个条件在有向图里也成立,那么就是强连通的;
连通图:任意两个顶点都相互连通的图;
极大连通子图:包含竟可能多的顶点(必须是连通的),即找不到另外一个顶点,使得此顶点能够连接到此极大连通子图的任意一个顶点;
连通分量:极大连通子图的数量;
强连通图:此为有向图的概念,表示任意两个顶点a,b,使得a能够连接到b,b也能连接到a 的图;
最小生成树:此生成树的边的权重之和是所有生成树中最小的;
AOV网(Activity On Vertex Network ):在有向图中若以顶点表示活动,有向边表示活动之间的先后关系
AOE网(Activity On Edge Network):在带权有向图中若以顶点表示事件,有向边表示活动,边上的权值表示该活动持续的时间

二 图的存储结构

图的数据存储有两种方式,分别是邻接矩阵和领接表。

1、领接矩阵

图的邻接矩阵(Adjacency Matrix) 存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。邻接矩阵的优点是结构简单,操作方便,表示只管;缺点是稀疏矩阵会浪费存储空间
无向图的邻接矩阵
数据结构笔记-DAG有向无环图_第2张图片

(1)0表示无边,1表示有边
(2)无向图的邻接矩阵一定是一个对称矩阵,顶点的度为顶点所在行或列的和。
(3)获取与顶点邻接的点只需遍历顶点所在行
有向图的邻接矩阵
数据结构笔记-DAG有向无环图_第3张图片

(1)遍历顶点的邻接点只需遍历行内元素
(2)有向图的邻接矩阵不一定是堆成矩阵,行内数组和表示出度,列内数组和表示入度
带权有向图的邻接矩阵
数据结构笔记-DAG有向无环图_第4张图片

(1)数字表示权重值,「无穷」表示弧不存在

2、邻接表

图中顶点用一个一维数组存储,当然,顶点也可以用单链表来存储,不过数组可以较容易地读取顶点信息,更加方便。另外,对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的指针,以便于查找该顶点的边信息。图中每个顶点Vi的所有邻接点构一个线性表,由于邻接点的个数不定,所以用单链表存储,无向图称为顶点Vi的边表,有向图则称为顶点Vi作为弧尾的出表。
无向图的邻接表:
数据结构笔记-DAG有向无环图_第5张图片
有向图的邻接表:
数据结构笔记-DAG有向无环图_第6张图片
邻接表的数据存储包含边表和顶点表两部分,其中顶点表包含下标index、顶点数据vertex和边列表edge;编标包含当前边到达的顶点下标、下一条边,如果是带权的图,还需要加上权值weight。

除普通的邻接表外,有向图还有另外一种形式的邻接表–十字链表,十字链表在普通链表的基础上做了优化,是将邻接链表和逆邻接表相结合的存储方法,可以更加方便的计算入度和出度。
数据结构笔记-DAG有向无环图_第7张图片

三 图的相关算法

你可能感兴趣的:(数据结构,数据结构)