首页 > 其他分享 >图的遍历(408)

图的遍历(408)

时间:2023-05-07 14:13:13浏览次数:36  
标签:遍历 复杂度 邻接矩阵 生成 BFS 邻接 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分析相同

应用:

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

标签:遍历,复杂度,邻接矩阵,生成,BFS,邻接,408
From: https://www.cnblogs.com/yxdsTutorial/p/17379245.html

相关文章

  • 二叉树的先序、中序、后序的遍历
    二叉树遍历的思想:1.先序遍历 先序遍历二叉树的过程是: (1)访问根节点; (2)先序遍历左子树; (3)先序遍历右子树。 2.中序遍历 中序遍历二叉树的过程是: (1)中序遍历左子树; (2)访问根节点; (3)中序遍历右子树。 3.后序遍历 后序遍历二叉树的过程是: (1)先序遍历左子树;......
  • Python实现遍历读取文件或文件夹
    参考:https://www.jb51.net/article/258341.htmos.walk本身已经是遍历读取,包含所有的子文件(夹)path=u'.'#文件路径defnewWalkFile2(file):#main_dir当前路径,sub_dir_list当前路径下的子文件夹是个数组,sub_file_list当前路径下具体文件formain_dir,sub_dir_l......
  • 1159 Structure of a Binary Tree + 根据前序和中序构建二叉树+ 层序遍历模板复习
    题目链接:https://pintia.cn/problem-sets/994805342720868352/exam/problems/1478635126488367104唉,今天的bug出在了下面这条语句。if(tree[root_key].left*tree[root_key].right<0)full_tree=false;我写成了full_tree=!(tree[root_key].left*tree[root_key].rig......
  • AcWing 4086 分糖果
    关于这道题我当时大意了https://www.acwing.com/problem/content/description/4089/关于我的某个变量没有初始化这件事,唯一想法,敲死得了,谁懂?其实就是一道简简单单的数学分析题,和大佬们不一样,萌新只会简简单单的小学数学(本人初二!)分析走起! 一道典型的数学问题() 虽然我WA了,......
  • 考研408操作系统-5.3磁盘
    23王道书第4题第7题第11题第20题第21题第22题......
  • 考研408操作系统-5.2设备独立性软件
    23王道书第7题第9题选D第13题选D没有多道程序设计实现的操作系统并发性,那么其他技术无从谈起,因为其他技术都是以并发性为前提的。第16题选A内存中的用户进程将打印结果首先送到了磁盘第17题采用SPOOLing技术,不需要物理上的外围机第19题考点对应第16题,选B第22......
  • json字符串的解析和遍历
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-equiv="X-UA-Compati......
  • c语言实现链表的基本操作——初始化,求长度,添加节点,遍历输出
    #include<stdio.h>#include<stdlib.h>//创建结构体并命名typedefstructNode //typedef用于对struct的重命名{ inti; structNode*next;}LNode,*LinkList; //定义一个结构体指针//链表初始化boolInistList(LinkListL){ L=(LNode*)malloc(sizeof(LNo......
  • 考研408操作系统-5.1IO管理概述
    23版王道书第5题第6题第9题通道技术指的是一种硬件机制。第12题第19题第21题第22题第24题......
  • Java层序遍历打印二叉树(有Null值)
    publicclassSolution{publicstaticvoidmain(String[]args){Integer[]arr={3,9,20,null,null,15};//根据数组构造出二叉树TreeNodetreeNode=creatTreeNode(arr,0);//层序有Null值的打印二叉树printBin......