数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历

news/2024/6/29 11:50:09 标签: 算法, 数据结构, 宽度优先

文章目录

  • 图的基本操作
    • 总览
    • 找边
    • 列出与某顶点相连的边
    • 插入顶点
    • 删除顶点
    • 增加边
    • 顶点的第一个邻接点
    • 顶点的下一个邻接点
    • 设置或者获取某条边的权值
    • 总览
  • 图的广度优先遍历
    • 总览
    • 树的广度优先遍历
    • 图的广度优先遍历
    • 树vs图
    • 图广度优先遍历的代码实现
    • 广度优先遍历序列
    • 遍历序列的可变性
    • 算法存在问题
    • 改进后的 复杂度分析
    • 广度优先生成树
    • 广度优先生成森林
    • 练习:有向图的BFS
    • 小结
  • 图的深度优先遍历
    • 总览
    • 树的深度优先遍历
    • 图的深度优先遍历
    • 算法存在的问题
    • 复杂度分析
    • 深度优先遍历序列
    • 深度优先生成树
    • 深度优先生成森林
    • 图的遍历与图的连通性
    • 小结

图的基本操作

总览

在这里插入图片描述

找边

邻接矩阵直接找图中的某个元素是否为1即可
邻接表要遍历顶点的边链表
在这里插入图片描述
在这里插入图片描述

列出与某顶点相连的边

邻接矩阵找行或列
邻接表找顶点对应的边链表
对于有向图的邻接表的入边时候需要将其他顶点的边链表都遍历
在这里插入图片描述
在这里插入图片描述

插入顶点

此时插入的是与其他顶点都没有连接的顶点
在这里插入图片描述

删除顶点

邻接矩阵设置 顶点中的一个变量为布尔型变量用来标记该顶点是否有效,当删除该节点时,只需将该节点所在行和列设置为0即可
邻接表即遍历所有边链表,将有顶点的边都删除,并修改对于的边链表
在这里插入图片描述
在这里插入图片描述

增加边

在这里插入图片描述

顶点的第一个邻接点

就是遍历到的第一个
在这里插入图片描述
在这里插入图片描述

顶点的下一个邻接点

就是遍历到的第二个
在这里插入图片描述

设置或者获取某条边的权值

在这里插入图片描述

总览

在这里插入图片描述

图的广度优先遍历

总览

在这里插入图片描述

树的广度优先遍历

即找根节点的孩子节点先
在这里插入图片描述

图的广度优先遍历

即先访问节点的相邻节点
在这里插入图片描述

树vs图

图遍历可能访问到原先的节点,但树不会,因为它是一直访问孩子节点的
在这里插入图片描述

在这里插入图片描述

图广度优先遍历的代码实现

在这里插入图片描述
访问后入队,然后出队后再将其相邻且没有访问的节点访问,然后再入队,然后再出队再将其相邻且没有访问的节点访问,如此反复
在这里插入图片描述

广度优先遍历序列

在这里插入图片描述

遍历序列的可变性

不同邻接表对应的遍历序列可能不一样
在这里插入图片描述

算法存在问题

非连通图无法遍历完所有节点
解决方法就是每个节点都广度优先遍历
下面是改进

在这里插入图片描述

改进后的 复杂度分析

从结点树和边数考虑(从访问顶点和找各条边考虑)
在这里插入图片描述
在这里插入图片描述

广度优先生成树

广度优先遍历过程生成的
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

广度优先生成森林

即对各个连通分量广度优先遍历即可
在这里插入图片描述

练习:有向图的BFS

有些点BFS不能遍历完所有的结点
在这里插入图片描述

小结

在这里插入图片描述

图的深度优先遍历

总览

在这里插入图片描述

树的深度优先遍历

在这里插入图片描述

图的深度优先遍历

在这里插入图片描述

算法存在的问题

依然是所有顶点都深度优先遍历一次
在这里插入图片描述

复杂度分析

即可能同时调用V次代码(或者说来自递归工作栈)
在这里插入图片描述
即每个结点最终都会进入一次深度优先遍历函数,这样才可能最终深度优先遍历所有节点
只不过邻接矩阵中对应节点进入函数后时间复杂度为V
而邻接表为E
在这里插入图片描述

深度优先遍历序列

在这里插入图片描述
邻接表不一样,深度优先遍历序列可能不一样
在这里插入图片描述
在这里插入图片描述

深度优先生成树

同样,即将遍历序列的其他边去了即可
在这里插入图片描述

深度优先生成森林

在这里插入图片描述
在这里插入图片描述

图的遍历与图的连通性

在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述


http://www.niftyadmin.cn/n/5269428.html

相关文章

流量分析基础

定义: 流量分析(Traffic Analysis)是指对网络流量数据进行分析和解释,以获得有关网络中通信的信息和情报。这种技术可以用于网络安全、网络管理和网络优化等领域。 网络流量包含了许多有关网络通信的细节信息,如源IP地…

2023了,前端实现AI电子秤思路分析

前景小知识: 这几年ai这个话题非常火爆,笔者从事零售行业软件开发也接到了新需求,希望实现ai电子秤,老规矩,先看需求 举个栗子: 或许,你已经留意到,当你在某些大型超市超市或生鲜类…

Python学习笔记第七十七天(OpenCV绘画功能)

Python学习笔记第七十七天 OpenCV绘画功能画线画矩形画圆画椭圆画多边形向图像添加文本向图像添加对角线 后记 OpenCV绘画功能 画线 在OpenCV中,我们可以使用cv2.line()函数来绘制一条线。该函数接受以下参数: img:要在其上绘制线条的图像…

​dbm --- Unix “数据库“ 接口​

源代码: Lib/dbm/__init__.py dbm 是一种泛用接口,针对各种 DBM 数据库 --- 包括 dbm.gnu 或 dbm.ndbm。 如果未安装这些模块中的任何一种,则将使用 dbm.dumb 模块中慢速但简单的实现。 还有一个适用于 Oracle Berkeley DB 的 第三方接口。 exception d…

jmeter 如何循环使用接口返回的多值?

有同学在用jmeter做接口测试的时候,经常会遇到这样一种情况: 就是一个接口请求返回了多个值,然后下一个接口想循环使用前一个接口的返回值。 这种要怎么做呢? 有一定基础的人,可能第一反应就是先提取前一个接口返回…

【Hive_03】单行函数、聚合函数、窗口函数、自定义函数、炸裂函数

1、函数简介2、单行函数2.1 算术运算函数2.2 数值函数2.3 字符串函数(1)substring 截取字符串(2)replace 替换(3)regexp_replace 正则替换(4)regexp 正则匹配(5&#xff…

ffmpeg模拟信号到数字信号

从模拟信号到数字信号的过程: 采样频率、量化位数、声道数将会影响音频数字信号的质量 声道数就是声音通道数量,声道数是指在一次采样中所记录的声音波形个数,声道数增加,声音质量也会随之提升,同时音频文件的大小也会…

时序预测 | Python实现CNN电力需求预测

时序预测 | Python实现CNN电力需求预测 目录 时序预测 | Python实现CNN电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行业预测进行比较。使用该…