图论 数据结构_图的数据结构「建议收藏」

图论 数据结构_图的数据结构「建议收藏」本文一些概念引用他人博文如有侵权联系删除顶点的度、入度、出度无向图及性质无向完全图:连通图:极大连通子图:极小连通子图:生成树:最小生成树及算法:生成森林非连通图:连通图及特性有向图及性质极大强连通

本文一些概念引用他人博文 如有侵权 联系删除。 这么一整理,发现图的概念也太多了吧😂 蓝色字体均为可点击的链接,题目来源天勤数据结构

题目补充

目录

顶点的度、入度、出度

无向图及性质(题)

无向完全图(题):

连通图:(注意连通图属于无向图的概念、强连通图属于有向图概念)

极大连通子图:

极小连通子图:

生成树(题)

最小生成树及算法(Prime、Kruskal)

生成森林

非连通图:

连通图及特性(⭐)(题)

有向图及性质

有向图(判断回路)

强连通图(题目)(无法跳转)

极大强连通子图:

极小强连通子图:不存在这个概念

有向完全图

有根有向图

最小树形图(难点,考研忽略):

邻接矩阵(题)

邻接表

逆邻接表(题)

十字链表

邻接多重表(一般存储无向图)

特殊矩阵(串台了,非图知识)

图的遍历(题)

广度优先遍历BFS(Breadth,广度优先搜索生成树)

深度优先遍历DFS(Deep,深度优先搜索生成树)

最短路径(题)

Dijkstra迪杰斯特拉算法

Floyd弗洛伊德算法

(逆)拓扑排序(题)

AOV网

关键路径(题)

AOE网(路径长度、完成工程的最短时间、关键路径)

稠密图、稀疏图

简单路径、回路、简单回路


图G由顶点集V和边集E组成,记为G=(V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)的集合。

注意:线性表可以是空表,树可以是空树,图不可以是空图,图可以没有边,但是至少要有一个顶点

 

顶点的度、入度、出度

顶点的度(degree)是指依附于某顶点v的边数,通常记为TD(v)。在有向图中,顶点的度分为入度与出度。顶点v的入度是指以顶点v为头的弧的数目,记为ID(v);顶点v的出度是指以顶点v为尾的弧的数目,记为OD(v)。有TD(v) = ID(v) + OD(v)。n个顶点、e条边的图、顶点vi的TD与顶点的个数以及边的数目满足关系:e=\frac{1}{2} \sum_{i=1}^{n}TD(v_{i})

 

无向图及性质(题)

无向图:若E是无向边(简称边)的有限集合时,则G为无向图。边是顶点的无序对,记为 (v,w) 或(w,v) ,且有 (v,w) =(w,v) 。其中 v,w 是顶点。即每条边都没有方向。

定理: 设G=<V,E>是n阶m条边的无向图,则下面各命题是等价的:
(1)G是树.
(2)G中任意两个顶点之间存在唯一的路径.
(3)G中无回路且m=n-1.
(4)G是连通的且m=n-1.
(5)G是连通的且G中任何边均为桥.
(6)G中没有回路,但在任何两个不同的顶点之间加一条新边,在所得图中得到唯一的一个含新边的圈.

题:N个顶点和K条边的无向图是一个森林(N>K) ,则该森林必有几棵树?

解:N-K。设森林m棵树,每棵树的结点个数分别是n1,n2,…,nm,分支数n1-1, n2-1,…, nm-1,森林的各棵树的结点集合和边集合互不相交,则总顶点数N=n1+…+nm, 总边数K=(n1-1)+ (n2-1)+…+ (nm-1)=N-m,化简得m=N-K = N-N-m = m

 

无向完全图(题):

若无向图中有n个顶点,则最多有n(n-1)/2条边(任意两个顶点之间都有一条边),将具有n(n-1)/2条边的无向图称为无向完全图。

题:15条边 非连通无向图 至少几个顶点?

解:e≤n(n-1)/2 若e=15 则n≥6 连通需要6个 所以7个不连通

 

连通图:(注意连通图属于无向图的概念、强连通图属于有向图概念)

两个顶点之间有路径,则称这两个顶点连通。若图中任意两个顶点之间都连通,则称该图为连通图;否则,图中的极大连通子图称为连通分量

 

极大连通子图:

1.连通图只有一个极大连通子图,就是它本身。(是唯一的)
2.非连通图有多个极大连通子图。(非连通图的极大连通子图叫做连通分量,每个分量都是一个连通图)
3.称为极大是因为如果此时加入任何一个不在图的点集中的点都会导致它不再连通。

 

极小连通子图:

1.一个连通图的生成树是该连通图顶点集确定的极小连通子图。(同一个连通图可以有不同的生成树,所以生成树不是唯一的)
(极小连通子图只存在于连通图中)
2.用边把极小连通子图中所有节点给连起来,若有n个节点,则有n-1条边判断需要几个边or点才能构成连通图
3.之所以称为极小是因为此时如果删除一条边,就无法构成生成树,也就是说给极小连通子图的每个边都是不可少的。
4.如果在生成树上添加一条边,一定会构成一个环。
也就是说只要能连通  的所有顶点而又不产生回路的任何子图都是它的生成树。

具体详解参见该位博主:数据结构之图论概念大全   

以及画了关系图的博主:数据结构之图论概念大全

 

生成树(题)

一个连通图的生成树是指一个极小连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n-1条边。一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。

最小生成树及算法(Prime、Kruskal):

一个有N个点的图,边一定是大于等于N-1条的。图的最小生成树,就是在这些边中选择N-1条出来,连接所有的N个点。这N-1条边的边权之和是所有方案中最小的。

最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。

Kruskal:选择代价最小的边,若该边依附的顶点分别在T中不同的连通分量上,则将此边加入到T中;否则,舍去此边而选择下一条代价最小的边。依此类推,直至T中所有顶点构成一个连通分量

Prime:随机选择一个点为起始点,将该点附近的最短代价的边加入边集合中,再通过新加入的点比较得到最短代价的边,知道构成一个连通分量。(自己的语言)

题1:带权连通图中 权值最小的边一定包含在G的什么生成树中?

解1:最小生成树。


题2:A、图的一颗最下生成树的代价不一定比该图其他任何一颗生成树的代价小。B、带权连通图的最小生成树可能不唯一,但权值最小的边一定在解中C、若带权连通图中各边上的权值互不相同,则该图的最小生成树是唯一的D、一个带权连通图的最小生成树的权值之和不是唯一的。

解2:A、带权连通图中的所有生成树中权值之和最小的生成树为该图的最小生成树。B、当一个顶点存在指向自己的回边时,不论该回边权值大小如何,都不会纳入生成树的边集合。C、权值不同,最小生成树一定由权值最小的n-1条边构成,必然是唯一的。D、一个带权连通图中最小生成树的权值之和等于不构成环的n-1条边的权值总和,必然唯一


题3:A、最小生成树是指边数最少的生成树
B.从n个顶点的连通图中选取n-1条权值最小的边,即可构成最小生成树

C.只要带权无向图中没有权值相同的边,其最小生成树就是唯一的
D.只要带权无向图中有权值相同的边,其最小生成树就不可能是唯一的

解3:最小生成树是指在带权连通图中选取n-1条权值最小的边连通其n个顶点,要求这些边不能构成回路。所以最小生成树不是指边数最少的生成树,选项A错误。选项B缺少了一个要求,即选出的边不能构成回路。选项C正确,如果带权无向图中各边上的权值互不相同,则其最小生成树应是唯一的。选项D不对,一个典型的例子是:若具有相等权值的边因权值较大而不能进入选取的序列,则得到的生成树仍然可能是唯一的。

1.Kruskal算法(题)

图论 数据结构_图的数据结构「建议收藏」

题:Kruskal算法求最小生成树 采用__辅助结构,来判断一条边的两个端点是否在同一个连通分量上。 选权值最小的原则是该边不能在图中构成__, 适用于__图。

解:并查集回路稀疏图 时间复杂度为O(elog_{2}^{2})

2.Prim算法

图论 数据结构_图的数据结构「建议收藏」

时间复杂度:n*n

生成的最小生成树不唯一

 

生成森林

在非连通图中,由每个连通分量都可以得到一个极小连通子图,即一颗生成树。这些连通分量的生成树就组成了一个非连通图的生成森林。

非连通图:

图论 数据结构_图的数据结构「建议收藏」

题:G是一个非连通无向图,共有28条边,则该图至少有() 个顶点。

解:连通图最大边数n(n-1) /2,先满足最大边数(最少节点数),然后额外一个节点单独放。8个点,至少有8*7/2=28个点就可以完全连接在一起,但是由于非联通,所以需要大于8个点,所以9。

 

连通图及特性(⭐)(题)

不知道归哪里就放在这里

所有顶点的度之和为偶数。

无向图中,所有顶点的度数之和是边的条数的两倍。

题1:A、强连通分量是有向图中的极大强连通子图 B、对有向图G,如果从任意一个顶点出发进行一次深度优先遍历或广度优先搜索能访问到每一个顶点,则该图是完全图 C、连通图的广度优先搜索中采用队列暂存 D、深度优先搜索采用栈。

解1:B错。对于一个双向有向环,可以理解为一个双循环链表,从任意一个顶点出发都可以访问到其他任意一个顶点,但是该图不是完全图。强连通是有向图的概念,强连通分量是非强连通图中的极大强连通子图。


题2:A、连通分量是无向图中的极小连通子图 B、有向图的遍历不可采用广度优先搜索方法 C、连通图的生成树包含了图中所有顶点 D、对n个顶点的连通图G来说,如果其中的某个子图有n个顶点和n-1条边,则该子图一定是G的生成树

解2:连通图的生成树包含了图中所有的顶点和其中的n-1条边,因此选项C正确。生成树是图的极小连通子图,即以最少的边连通所有的顶点;连通分量是无向图的极大连通子图,即非连通图中存在的最大限度连通的那些子图。此外,有向图也可以采用广度优先搜索进行遍历。生成树具有连通图的全部n个顶点和连接它们的n-1条边。如果它的一个子图有n个结点,也有n-1条边,但它们没有连接所有顶点,有的地方还出现了回路,则此子图不是生成树。


题3:A.带权有向图的最短路径一定是简单路径
B.在有向图中,从一个顶点到另一个顶点的最短路径是唯一的

C.求单源最短路径的 Dijkstra算法不适用于有回路的带权有向图
图论 数据结构_图的数据结构「建议收藏」

解3:图论 数据结构_图的数据结构「建议收藏」


有向图及性质

有向图(判断回路)

若E是有向边(简称弧)的有限集合时,则G为有向图。弧是顶点的有序对,记为<v,w>,其中 v,w 是顶点,v 是弧尾,w 是弧头。称为从顶点v到顶点w的弧。

判断一个有向图是否存在回路,可用的方法如下:
1)利用拓扑排序算法可以判定图中是否存在回路,即在拓扑排序算法结束后,如果还有顶点没有输出,则说明剩下这些结点都还有前驱,它们构成一个有向回路。
2)设有向图具有n个顶点,若图的边数e≥n,则该图一定有一个闭合的环。
3)设图是具有n个顶点的有向图,若该图的每个顶点的出度至少为1,入度也至少为1,则图中一定有回路存在。
4)利用深度优先遍历算法可以判定一个有向图中是否存在有向回路。如果从有向图上的某个顶点v出发进行深度优先遍历,若在算法结束之前出现一条从顶点u到顶点v的回边,因u在生成树上是v的子孙,则有向图必定存在包含顶点v和顶点u的环。
 

强连通图(题目,无法跳转,点左边的目录)

vi->vj两个顶点有路径,则称从vi到yj是连通的。若任一顶点都是强连通的,称为强连通。否则,有向图中极大强连通子图为有向图的强连通分量。

题:n个顶点的强连通图,其有向边条数至少是:

解:画图法 两个顶点需要两条边才能强连通 所以至少n

 

极大强连通子图:

1.强连通图的极大强连通子图为其本身。(是唯一的)
2.非强连通图有多个极大强连通子图。(非强连通图的极大强连通子图叫做强连通分量)

 

极小强连通子图:不存在这个概念

 

有向完全图

有向完全图是指图中各边都有方向,且每两个顶点之间都有两条方向相反的边连接的图。

性质:用n表示图中顶点数目,用e表示边或弧的数目。若<vi,vj>∈VR,则vi≠vj,那么,对于有向图,e的取值范围是1到n(n-1),有n(n-1)条边的有向图称为有向完全图

 

有根有向图

如果G中顶点a到G中每个结点都有路径可以到达,则称结点a为G的跟。

 

最小树形图(难点,考研忽略):

最小树形图,就是给有向带权图一个特殊的点root,求一颗以root为根节点的树使得该树的的总权值最小。


邻接矩阵(题)

无向图的邻接矩阵一定是对称的,而有向图的邻接矩阵不一定对称。因此,用邻接矩阵来表示一个具有n个顶点的有向图时需要n^2个单元来存储邻接矩阵;对有n个顶点的无向图则只存入上(下)三角阵中剔除了左上右下对角线上的0元素后剩余的元素,故只需1+2+…+(n-1)=n(n-1)/2个单元。

无向图邻接矩阵的第i行(或第i列)非零元素的个数正好是第i个顶点的度。某行非零元素个数等于该点度

有向图邻接矩阵中第i行非零元素的个数为第i个顶点的出度,第i列非零元素的个数为第i个顶点的入度,第i个顶点的度为第i行与第i列非零元素个数之和。度为出度+入度

用邻接矩阵表示图,很容易确定图中任意两个顶点是否有边或弧相连,易于求各个顶点的度

题1:n个顶点 e条边 无向图 邻接矩阵表示 矩阵大小为?非零元素个数为?

解1:n个顶点,行记录n次 列记录n次 n^2次。 2e个非零元素表示e条边。邻接矩阵的对称性 相当于多备份了一次。


题2:图的邻接矩阵表示唯一,邻接表不唯一 (对/错)

解2:对。邻接表取决于各条边读入的先后次序以及链表头插尾插都会影响。


题3:图有n点e边 则邻接矩阵的遍历顶点所需时间为   邻接表遍历所需时间为

解3:存储结构为邻接矩阵的图遍历算法需要对所有顶点都访问一次,每次访问时为了确定下一次要访问哪个顶点,需遍历该顶点的行向量,寻找该顶点的所有邻居节点,所以遍历的时间复杂度为O(n*n),邻接表也要对所有顶点访问一次,每次访问确定下一个结点,需遍历该顶点的边链表 O(n+e)

 

邻接表

邻接表若输入的顶点信息为顶点的编号,则建立邻接表的复杂度为O(n+e)。否则,需要通过查找才能得到顶点在图中的位置,则时间复杂度为O(n*e)。容易找到任一顶点的第一个邻接点和下一个邻接点;但要判断任意两个顶点之间是否有边或弧相连,则需搜索第i个和下一个邻接点。缺点即邻接矩阵的优点。

性质(包含邻接矩阵):

邻接矩阵存储一个图所占用的存储空间大小与图中的顶点个数有关,与图的边数无关。非零个数边数有关。

邻接矩阵适用于稠密图,邻接表适用于稀疏图。(稠密稀疏 在最下面的名词解释)

同一个有向图,邻接表中的边节点数与逆邻接表边结点数一致

 

逆邻接表(题)

邻接表:反映的是顶点出度的情况。
逆邻接表:反映的是顶点的入度情况。

题:有向图 一个顶点度为k1  出度为k2 则对应逆邻接表中该顶点的入边表中的边结点数为:

解:k1-k2为该顶点的入度即边结点数。该顶点的入边表是所有进入该顶点的边组成的边链表,其中的边结点数等于该顶点的入度。

 

十字链表

十字链表。

 

邻接多重表(一般存储无向图)

邻接多重表。

 

特殊矩阵(串台了,非图知识)

数据结构特殊矩阵—-对称矩阵、零矩阵、上三角矩阵、对角矩阵。


图的遍历(题)

链接

广度优先遍历BFS(Breadth,广度优先搜索生成树

广度优先搜索让你能够找出两样东西之间的最短距离。

图的广度优先搜索遍历类似于树的层次遍历。它的基本思想是:首先访问起始节点v,然后依次访问与节点v相邻的节点,访问完相邻节点后再访问相邻节点的相邻节点。

深度优先遍历DFS(Deep,深度优先搜索生成树

DFS类似于二叉树的先序遍历。它的基本思想是:首先访问出发点v,并将其标记为已访问过;然后选取与v邻接的未被访问的任意一个顶点w,并访问它;再选取与w邻接的未被访问的任一顶点并访问,以此重复进行。当一个顶点所有的邻接顶点都被访问过时,则依次退回到最近被访问过的顶点,若该顶点还有其他邻接顶点未被访问,则从这些未被访问的顶点中取一 个并重复上述访问过程,直至图中所有顶点都被访问过为止。

把图的深度优先搜索遍历过程中所经历的边保留,其余的边删掉,就会形成一棵树,称为深度优先搜索生成树

对于DFS,BFS遍历来说,时间复杂度和存储结构有关:

1.若采用邻接矩阵存储,时间复杂度为O(n^2); 

2.若采用邻接链表存储,时间复杂度为O(n+e);

题:https://www.cnblogs.com/shuailinzhen/p/8046878.html

题1:BFS生成树和DFS生成树的高度比大小

解1:BFS遍历所得到阿生成树高度不超过以遍历起始节点为中心的图的层次数,而DFS遍历所得到的生成树的高度与能前伸的最远距离有关。因此BFS高度≤DFS高度


最短路径(题)

通常采用迪杰斯特拉算法求图中某一顶点到其余各顶点的最短路径。

Dijkstra迪杰斯特拉算法

Dijsktra按长度递增的顺序求出图的某顶点到其余顶点的最短路径。

博文1、博文2

时间复杂度:n*n(同Prim)

Floyd弗洛伊德算法

任意两点间的最短路径

博文3

题:求最短路径 要求所有边上的权值不能为负值的算法是  ,虽然允许边上的权值为负值,但不允许在有向回路中出现负值的算法是。

解:Dijkstra不能是负值,FLoyd在有向回路中出现负值。


(逆)拓扑排序(题)

AOV

把这种顶点表示活动、边表示活动间先后关系的有向图称做顶点活动网(Activity On Vertex network),简称AOV网。

拓扑排序

由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止。

(1) 选择一个入度为0的顶点并输出之;

(2) 从网中删除此顶点及所有出边。

循环结束后,若输出的顶点数小于网中的顶点数,则输出“有回路”信息,否则输出的顶点序列就是一种拓扑序列。

拓扑排序不唯一。

逆拓扑排序

若AOV网中考察各顶点的出度并以下列步骤进行排序,则将这种排序称为逆拓扑排序,输出的结果称为逆拓扑有序序列。

  1. 在网中选择一个没有后继的顶点(出度为0)输出;
  2. 在网中删除该顶点,并删除所有到达该顶点的边;
  3. 重复上述两步,直到AOV网中已无出度为0的顶点为止。

DFS算法也可生成逆拓扑有序序列。前提无环有向图。

题1:有向图中部分顶点不能通过拓扑排序排到一个拓扑排序有序序列里,则可断定该图是?

解1:如果全部顶点不能排序则是强连通图,构成了一个有向环。如果部分顶点不能排序则是强连通分量,有回路。(注意强连通图属于有向图概念)


题2:有向图 n点e边,用邻接矩阵存储结构 则拓扑排序的时间复杂度为:

解2:采用邻接矩阵作为有向图的存储结构进行拓扑排序,需要输出每一个顶点,其时间复杂度为O(n)。在输出顶点后,要针对该顶点检测矩阵中对应的行,根据行中信息寻找与该顶点相关联的边,以便对这些边的入度减1,其时间复杂度O(n)。因此,总的时间复杂度为n*n。


题3:设有向图具有n个顶点和e条边,如果用邻接表作为它的存储结构,则拓扑排序的时间复杂度为

解3:对于有n个顶点和e条边的有向图,建立各顶点的入度的时间复杂度为O(e),建立入度为O的栈的时间复杂度为O(n)。在拓扑排序过程中,最多每个顶点进一次栈,入度减1的操作最多总共执行e次,可知总的时间复杂度为O(n+e)。
 


关键路径(题)

AOE网(路径长度、完成工程的最短时间、关键路径

  AOE(Activity On Edge network) AOVActivity On Vertex network
相同点 有向无环图  
不同点 边表示活动、边有权值、边代表活动持续时间;顶点表示事件,事件是图中新活动开始或者旧活动结束的标志。 顶点表示活动,边无权值,边代表活动之间的先后关系。

 

路径长度:路径上各活动持续时间的总和(即路径上所有权之和)。
完成工程的最短时间:从工程开始点(源点)到完成点(汇点)的最长路径称为完成工程的最短时间。

关键路径:路径长度最长的路径称为关键路径。

性质

(1)只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始。

(2)只有在进入某点的各有向边所代表的活动都已结束,该顶点所代表的时事件才能发生。

关键路径(临界路径):在AOE网络中从源点到汇点(结束顶点)的最长路径。关键路径上的活动为关键活动。

任何一个关键路径提前完成,只会影响它所在的关键路径。只有所有的关键活动都提前活动,整个工程才可能提前完成。如果任意一个关键活动发生延误,则导致整个工程延误。注意:关键路径是会变的,当时间发生变化。


稠密图、稀疏图

若一个图接近完全图,称为稠密图;称边数或弧数很少的(如e<n*logn)图为稀疏图


简单路径、回路、简单回路

序列中顶点不重复出现的路径称为简单路径。若路径上第一个顶点和最后一个顶点重合,则称这样的路径为回路或者环(cycle)。除第一个顶点与最后一个顶点之外,其他顶点不重复出现的回路称为简单回路、或者简单环


感谢下列优质博主以及百度百科:

  1. www.baidu.com
  2. 最小生成树:https://www.cnblogs.com/SeanOcean/p/10975694.html
  3. Kruskal算法、Prim算法:数据结构之图论概念大全
  4. 最小树形图:数据结构之图论概念大全
  5. 图的基本概念:数据结构之图论概念大全
  6. 图的基本概念:数据结构之图论概念大全
  7. 有向图和无向图:数据结构之图论概念大全
  8. 图的遍历:数据结构之图论概念大全
  9. 图的遍历 有大量的图片流程:数据结构之图论概念大全
  10. 逆邻接表:数据结构之图论概念大全
  11. 拓扑排序:https://www.cnblogs.com/bigsai/p/11489260.html
  12. 逆拓扑排序 图解:https://www.cnblogs.com/guangzhou11/p/13633435.html
  13. 最短路径四大算法:数据结构之图论概念大全
  14. 最短路径:https://www.jianshu.com/p/92e46d990d17
  15. 最短路径:数据结构之图论概念大全
  16. 关键路径:数据结构之图论概念大全
  17. 图的遍历题目来源:https://www.cnblogs.com/shuailinzhen/p/8046878.html

版权声明:这些文章为其他博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

✨感谢在本文中出现的链接中各位优质博主的分享!✨

今天的文章图论 数据结构_图的数据结构「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/62927.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注