数据结构——6.3 图的遍历

news2024/11/24 14:28:01

6.3 图的遍历

一、概念

  1. 图的广度优先遍历

    1. 在这里插入图片描述

    2. 树的广度优先遍历(层序遍历):不存在“回路”,搜索相邻的结点时,不可能搜到已经访问过的结点:

      1. 若树非空,则根节点入队

      2. 若队列非空,队头元素出队并访问,同时将该元素的孩子依次入队

      3. 重复②直到队列为空

    3. 图的广度优先遍历(Breadth-First-Search,BFS):搜索相邻的顶点时,有可能搜到已经访问过的顶点

      1. 找到与一个顶点相邻的所有顶点

      2. 标记哪些顶点被访问过

      3. 需要一个辅助队列

    4. 上述图的广度优先遍历的缺陷:只能遍历连通图,非连通图无法遍历

    5. 改进的BFS算法:

      1. 遍历visited数组,如果该顶点未被访问,则调用BFS

      2. BFS执行完成,回到①,直到所有顶点都被访问过

      3. 结论:对于无向图,调用BFS函数的次数=连通分量数

      4. 空间复杂度:最坏情况,辅助队列大小为 o(V)

    6. 广度优先遍历时间复杂度来源:找点、找边

    7. 邻接矩阵存储的图:

      1. 访问 V个顶点需要O(V)的时间

      2. 查找每个顶点的邻接点都需要O(V)的时间,而总共有V个顶点

      3. 时间复杂度=O(V²)

    8. 邻接表存储的图:

      1. 访问V个顶点需要O(V)的时间

      2. 查找各个顶点的邻接点共需要O(E)的时间

      3. 时间复杂度= O(V+E)

    9. 广度优先生成树

      1. 广度优先生成树由广度优先遍历过程确定。由于邻接表的表示方式不唯一,因此基于邻接表的广度优先生成树也不唯一。
    10. 广度优先生成森林

      1. 对非连通图的广度优先遍历,可得到广度优先生成森林
    11. 在这里插入图片描述

  2. 图的深度优先遍历DFS

    1. 在这里插入图片描述

    2. 树的深度优先遍历——其一:树的先根遍历:不存在重复访问问题

    3. 图的深度优先遍历:存在重复访问问题——设置标记数组:栈

    4. 在这里插入图片描述

    5. 上述DFS存在的问题:无法遍历非连通图

    6. 改进:与BFS改进相似

    7. 复杂度分析

      1. 空间复杂度:来自函数调用栈,最坏情况,递归深度为O(V)

      2. 时间复杂度=访问各结点所需时间+探索各条边所需时间

    8. 邻接矩阵存:时间复杂度:O(V²)

    9. 邻接表存:时间复杂度O(V+E)

    10. 在这里插入图片描述

    11. 深度优先遍历序列唯一性与生成树个数

      1. 同一个图的邻接矩阵表示方式唯一,因此深度优先遍历序列唯一,深度优先生成树也唯一

      2. 同一个图邻接表表示方式不唯一,因此深度优先遍历序列不唯一,深度优先生成树也不唯一

  3. 图的遍历与图的连通性

    1. 对无向图进行BFS/DFS遍历

      1. 调用BFS/DFS函数的次数=连通分量数

      2. 对于连通图,只需调用1次 BFS/DFS

    2. 对有向图进行BFS/DFS遍历

      1. 调用BFS/DFS函数的次数要具体问题具体分析

      2. 若起始顶点到其他各顶点都有路径,则只需调用1次BFS/DFS 函数

      3. 对于强连通图,从任一结点出发都只需调用1次 BFS/DFS

    3. 在这里插入图片描述

二、理解

  1. 当各边的权值相等时,广度优先算法可以解决单源最短路径问题

  2. 图的广度优先遍历相当于树的层次遍历

  3. 广度优先遍历需要用到队列

  4. 深度优先遍历需要用到栈

  5. 图的深度优先遍历相当于树的先根遍历,广度优先相当于树的层次遍历

  6. 深度优先遍历可以判断图中是否存在环

  7. 使用DFS递归遍历无环有向图,在退出时递归输出相应的顶点,得到逆拓扑有序顶点序列

三、技巧

  1. n个顶点,e条边的图采用邻接表存储,

    1. BFS遍历时

      1. 时间复杂度:O(n+e):顶点表每个点和边表每个边都要遍历一次

      2. 空间复杂度:O(n):每个点都入一次队

    2. DFS遍历时

      1. 时间复杂度:O(n+e):顶点表每个点和边表每个边都要遍历一次

      2. 空间复杂度:O(n):每个点都入一次队

  2. 画图的深度优先生成树、广度优先生成树:

    1. 先根据题目信息把图画出来

    2. 根据深度优先路径或广度优先路径,把不在路径上的边删去,即为生成树

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1445532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何写出别人写不出的内容(译)

(译者序:这篇文章不只是写作,对信息获取、阅读也都有启发。随着社交媒体和 AI 的发展,人们越来越被动的接收海量信息,如何主动查找与整理对自己有用的内容,将是一个不可或缺的能力。) 原文&…

雨云裸金属服务器

雨云服务器与裸金属服务器:云端与实体的完美交融 随着信息技术的迅猛发展,云服务已经成为企业和个人数据处理与存储的重要选择。其中,雨云服务器和裸金属服务器作为两种截然不同的服务形式,各自拥有独特的优势和应用场景。本文将深…

图灵日记--MapSet字符串常量池反射枚举Lambda表达式泛型

目录 搜索树概念实现性能分析和 java 类集的关系 搜索概念及场景模型 Map的使用Map常用方法 Set的说明常见方法说明 哈希表冲突-避免-负载因子调节冲突-解决-闭散列冲突-解决-开散列/哈希桶冲突严重时的解决办法 实现和 java 类集的关系 字符串常量池String对象创建intern方法 …

IT行业含金量高的证书-软考

软考全称计算机技术与软件专业技术资格(水平)考试,软考既是职业资格考试,又是职称资格考试。2021年12月2号发布新版的国家职业资格目录,软考是在计算机技术领域中的唯一的国家职业资格。 一、好处 软考是一个神奇又特…

分享86个时间日期JS特效,总有一款适合您

分享86个时间日期JS特效,总有一款适合您 86个时间日期JS特效下载链接:https://pan.baidu.com/s/1gHc6mzBwgZrZW3ARsRBcYw?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,…

Python 中的异步编程:提升程序性能的利器

随着互联网应用的迅猛发展,越来越多的应用程序需要处理大量的并发请求。传统的同步编程模型在处理大量并发请求时往往效率低下,造成程序响应速度变慢。为了解决这个问题,Python 提供了异步编程这一强大的工具,可以在单线程环境下实…

DS18B20 与 单总线

学习链接:学习B站 up 主金善愚的DS18B20课程 一、单总线概述 单总线芯片,在其内部的 ROM 中都编制好了唯一的序列号(64位)。 单总线芯片在应用时对时序的要求非常高。 二、单总线的基本操作 三、DS18B20的主要性能 电源电压范围&…

MogaNet实战:使用MogaNet实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 论文:https://arxiv.org/pdf/2211.03295.pdf 作者多阶博弈论交互这一全新视角探索了现代卷积神经网络的表示能力。这种交互反映了不同尺度上下文中变量间的相互作用效…

操作系统(14)----文件系统的结构

目录 一.文件系统的层次结构 1.用户接口: 2.文件目录系统: 3.存取控制模块: 4.逻辑文件系统与文件信息缓冲区: 5.物理文件系统: 二.文件系统的全局结构 1.文件系统在外存中的结构 (1)物…

游泳可以戴的耳机有哪些,游泳耳机哪个牌子好性价比高

在游泳训练中,尤其是在进行长距离游泳、控制节奏和进行长时间游泳燃脂时,很容易感到单调乏味。为了帮助自己完成每一个来回,许多游泳运动员除了依赖能量棒和功能饮料外,还会选择通过音乐提高注意力和兴奋度。研究表明,…

《21天精通IPv4 to IPv6》第14天:第二周综合回顾——如何落地IPv6?

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

fatal error: rtiostream_utils.h: No such file or directory, rtiostream.h

fatal error: rtiostream_utils.h: No such file or directory 我的设置:

Linux中pipe管道操作

管道的读写操作: 读操作: ​​​有数据:read正常读,返回读出的字节数无数据:1 写段全部关闭:read解除阻塞,返回0,相当于文件读到了尾部 2 写段没有全部关闭&#xf…

【学网攻】 第(25)节 -- 帧中继(多对一)

系列文章目录 目录 系列文章目录 文章目录 前言 一、帧中继是什么? 二、实验 1.引入 实验目标理解帧中继在广域网中的原理及功能; 实验背景 技术原理 实验步骤 实验设备 实验拓扑图​编辑 实验配置 实验验证 文章目录 【学网攻】 第(1)节…

手把手教你开发Python桌面应用-PyQt6图书管理系统-图书信息修改实现

锋哥原创的PyQt6图书管理系统视频教程: PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频&…

C++ //练习 5.19 编写一段程序,使用do while循环重复地执行下述任务:首先提示用户输入两个string对象,然后挑出较短的那个并输出它。

C Primer(第5版) 练习 5.19 练习 5.19 编写一段程序,使用do while循环重复地执行下述任务:首先提示用户输入两个string对象,然后挑出较短的那个并输出它。 环境:Linux Ubuntu(云服务器&#x…

CTFSHOW web 89-100

这边建议去我的gitbook或者github看观感更好(图片更完整) github:https://github.com/kakaandhanhan/cybersecurity_knowledge_book-gitbook.22kaka.fun gitbook:http://22kaka.fun 🏈 CTFSHOW PHP特性 (1)WEB 89 ①代码解释 <?php/* # -*- coding: utf-8 -*- # @…

第8讲个人中心页面搭建实现

个人中心页面搭建实现 <template><view class"user_center"><!-- 用户信息开始 --><view class"user_info_wrap"><!--获取头像--><button class"user_image"></button> <view class"user_n…

Java多线程:常见的锁策略

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、乐观锁 vs 悲观锁1、乐观锁2、悲观锁 二、重量级锁 vs 轻量级锁1、重量级锁2、轻量级锁3、理解用户态 vs 内核态 三、自旋锁…

LibreOffice Calc 取消首字母自动大写 (Capitalize first letter of every sentence)

LibreOffice Calc 取消首字母自动大写 [Capitalize first letter of every sentence] 1. Tools -> AutoCorrect Options2. AutoCorrect -> Options -> Capitalize first letter of every sentenceReferences 1. Tools -> AutoCorrect Options 2. AutoCorrect ->…