图的遍历(408)

BFS

算法概述:

创建一个空队列。从某个点开始,找到该点所指向的所有的点并且没有被标记过的,放入队列中,并且对当前的点做标记,表示被遍历过了。再从队列中取出新的点,重复前面的操作。直到队列为空。

由于图不一定是连通的,需要遍历1~n个点。

要点:

BFS类似于树的层次遍历,由于存储的边的顺序可能不同,遍历次序也不同。(邻接表是不同,邻接矩阵是相同的)

空间复杂度分析:

不管是邻接表还是邻接矩阵,都需要一个辅助队列来存储的放入的点,在最坏情况下,是O(V),即一次存下所有的点

时间复杂度分析:

对于邻接表:每个点都是要被搜索一遍,复杂度为O(n),对于每个点,都要遍历相连的边,由于是邻接表,可以用O(E)走了所有的边。总复杂度为O(E+V)

对于邻接矩阵:每个点仍需要搜索一遍,复杂度为O(n),对于每个点,搜索相连的边,都需要O(n)的复杂度,(相当于遍历了一个邻接矩阵)故复杂度为O(n^2)

应用:

1、可以用BFS算法来求解单源最短路问题,该图必须得是非带权图,根据BFS算法的特性,从一个点向外扩散,到某个点肯定是最近距离。

2、相应的BFS搜索可以生成广度优先生成树,根据遍历的顺序来确定。对于邻接矩阵的来说,一个给定的图的邻接矩阵唯一,生成树也唯一。对于邻接表来说,由于存储相连点的顺序不同,生成树不唯一。

如果该图不是连通的,生成的是森林。

 

DFS

算法概述:

类似于先序遍历,从某个点开始,一直递归相邻的点,每遍历到一个点,标记并直接输出,表示遍历过了。到底了再退回到上几步。

由于图不一定联通,同样需要遍历1~n。

要点:

类似于树的先序遍历,遍历的出的顺序,邻接表是不同,邻接矩阵是相同的。

时空复杂度分析:

在递归的时候需要一个栈来存储遍历的点,最坏情况下是O(n)

时间复杂度分析:

和BFS分析相同

应用:

遍历得到对应的生成树。相应的,如果是连通,是树,不然就是森林

posted @   dueyu  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示