当前位置: 首页 > news >正文

数据结构--图(笔记)

文章目录

  • 1. 概念
  • 2. 分类
    • 无向图
    • 有向图
    • 循环图
    • 连通图
  • 3. 应用
  • 4. 操作(CRUD)
  • 5. 图常见的数据结构
    • 邻接表
    • 邻接矩阵
    • 关联矩阵
      • 关联矩阵与邻接矩阵
  • 6. 内容出处

1. 概念

① 图:在计算机科学中,图(英语:graph)是一种抽象数据类型,用于实现数学中图论的无向图和有向图的概念。-- wiki 图是一种表示关系的数据结构
(树:是一种表示层级的数据结构)

② 遍历一张图时需要同时考虑节点(V)和边(E),时间复杂度最坏的情况O(V+E),后续可以通过一些算法降低时间复杂度。
③ 关于图两个常见的遍历算法(最坏情况下时间复杂度都是O(V+E)):深度优先算法(dfs)、广度优先算法(bfs)。
③ 图中最短路径问题常用算法:Dijkstra算法(时间复杂度 O((V+E)logV))、bellman-ford算法(时间复杂度 O(VE))

2. 分类

补充说明:树是一种特殊的图(堆是一种特殊的树)

在这里插入图片描述
(上图来源:wiki)

无向图

在这里插入图片描述
无向图:两点之间仅仅是相互连接的关系,表示一种状态(例如:上述节点依次代表一个人abcde,表示a和b互相认识,b和c互相认识等等关系时就可以用无向图)

有向图

在这里插入图片描述
有向图:节点之间会有一种指向关系(例如:a喜欢b,b喜欢c,c和d互相喜欢)

循环图

要求:需要有三个及三个以上节点形成闭环
在这里插入图片描述
(上图节点之间的关系有向无向都行,即循环图是有向图无向图都行)
节点之间形成闭环的行为被称为:图的循环

连通图

在这里插入图片描述
判断图的连通性算法:并查集(也是一种树结构)、深度优先搜索(递归的方式)

3. 应用

  1. 航班信息(例如:此刻只有A到B的单程票、或者B到A的单程票、或者A到B和B到A的票都有)–有向图
    在这里插入图片描述>2. 社交关系模型(例如:A和B互相认识、B和C互相认识、C和D互相认识等关系描述) – 无向图
    在这里插入图片描述
  2. 交通网络模型 – 无向图
    在这里插入图片描述

4. 操作(CRUD)

操作重点:节点、方向(边或者弧)
实现方式:链表(邻接表)、二维数组(邻接矩阵)
在这里插入图片描述
(图片来源:wiki)

5. 图常见的数据结构

邻接表

        邻接表就是一种链表,用来存储每个节点的相邻节点信息(每个节点也都有一个与之对应的链表)。
在这里插入图片描述>在这里插入图片描述
                                                 (图片来源:wiki)
优点(链表的优势):① 节省空间:对于稀疏图,邻接表可以大大节省存储空间,因为它只存储实际存在的边。② 便于添加和删除边:在动态图的情况下,邻接表更容易进行边的添加和删除操作,时间复杂度相对较低。
应用场景:① 社交网络分析:社交网络通常是非常稀疏的图,每个人作为一个顶点,人与人之间的关系作为边。邻接表非常适合存储这种大规模稀疏图,可以高效地存储和处理社交网络中的人际关系。② 地理信息系统:在地理信息系统中,地图可以抽象为图,地点作为顶点,道路作为边。由于实际的地图中地点之间的连接相对较少,邻接表可以有效地存储地图信息,并且在进行路径规划等操作时,可以快速遍历相邻的地点。

邻接矩阵

在这里插入图片描述
在这里插入图片描述
                                                    (图片来源:wiki)
优点(数组的优势):① 直观:可以直接通过矩阵元素判断两个顶点之间是否有边相连,查询操作简单快速,时间复杂度为O(1) 。② 适合稠密图:当图比较稠密,即边的数量接近顶点数量的平方时,邻接矩阵不会浪费太多空间。
应用场景:① 网络流量分析:在计算机网络中,分析网络节点之间的流量关系时,如果节点之间的连接比较紧密,邻接矩阵可以方便地表示节点间的流量大小,快速查询任意两个节点之间的流量情况。② 有权图且边权变化少:如果图是带权图,且边的权重相对稳定,不经常变化,邻接矩阵可以方便地存储边的权重信息,便于快速查询和处理。

关联矩阵

关联矩阵:元素表示各个节点-边对是否相关在这里插入图片描述
                                              (图片来源:wiki)

关联矩阵与邻接矩阵

定义和元素含义:
① 关联矩阵:是一个n × m的矩阵,其中n是图的顶点数,m 是图的边数。矩阵中的元素表示顶点与边的关联关系。如果顶点 i 与边 j 相关联,则对应元素为特定值(通常为 1 或根据边的方向等有不同取值);若不相关联,则为 0。
② 邻接矩阵:是一个n × n的矩阵,其中n是图的顶点数。矩阵中的元素表示顶点之间的连接关系。如果顶点 i 与顶点 j 之间有边相连,则对应元素为特定值(如 1 或边的权重等);若没有边相连,则为 0。
存储信息:
① 关联矩阵:存储了每个顶点与每条边的关联情况,可以清晰地反映出图的结构细节,包括顶点与边的具体连接方式。对于有向图,可以区分边的起点和终点与顶点的关联关系。
② 邻接矩阵:主要存储顶点之间的直接连接关系,侧重于反映顶点之间的邻接状态。对于有向图,可以区分出边的方向。
适用场景:
① 关联矩阵:在电路分析中非常有用,能够清晰地表示电路中的节点和支路之间的关系,帮助分析电流、电压等;在研究图的生成树等问题时,可以通过关联矩阵的性质进行分析。
② 邻接矩阵:适用于需要快速判断两个顶点之间是否有直接连接的情况,查询操作时间复杂度为O(1)。在网络分析中,当关注网络中节点之间的直接交互关系时,邻接矩阵较为方便。

6. 内容出处

数据结构

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 滑块缺口研究实例(C#颜色滑块缺口计算)
  • 【STM32 Blue Pill编程】-读取数字引脚输入
  • 回顾前面刷过的算法(6)
  • web前端之vue+element+select实现多选、两个数组排序、保持源数据、查找索引、过滤、克隆、复制、findIndex、filter
  • ansible搭建+ansible常用模块
  • Python - sqlparse 解析库的基础使用
  • Spring Boot 集成 Elasticsearch 时,是使用 Java API 还是原生的 Elasticsearch API?
  • 2024 Testing Expo即将开幕,怿星科技展品大剧透!
  • .Net插件开发开源框架
  • Win 11用户全面中招,微软强制更新致性能下降45%
  • AtCoder Beginner Contest 367(ABCDEF题)视频讲解
  • 将iso格式的镜像文件转化成云平台能安装的镜像格式(raw/vhd/QCOW2/VMDK )亲测--图文详解
  • 优化Maven镜像配置:使用阿里云加速依赖下载
  • 【密码学】密钥管理:②密钥分配
  • 从零开始学习SLAM(五):极几何与极约束
  • [译] 怎样写一个基础的编译器
  • 10个确保微服务与容器安全的最佳实践
  • 2017 前端面试准备 - 收藏集 - 掘金
  • iOS 颜色设置看我就够了
  • JAVA_NIO系列——Channel和Buffer详解
  • java正则表式的使用
  • SOFAMosn配置模型
  • 程序员该如何有效的找工作?
  • 读懂package.json -- 依赖管理
  • 基于Android乐音识别(2)
  • 检测对象或数组
  • 如何使用 JavaScript 解析 URL
  • 微信公众号开发小记——5.python微信红包
  • 第二十章:异步和文件I/O.(二十三)
  • ​Python 3 新特性:类型注解
  • ​比特币大跌的 2 个原因
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • %check_box% in rails :coditions={:has_many , :through}
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (2)STM32单片机上位机
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (不用互三)AI绘画工具应该如何选择
  • (分类)KNN算法- 参数调优
  • (过滤器)Filter和(监听器)listener
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (三)elasticsearch 源码之启动流程分析
  • (四)事件系统
  • (转)重识new
  • (转载)虚函数剖析
  • ./configure、make、make install 命令
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 托管代码与非托管代码
  • .NET 指南:抽象化实现的基类
  • .net 中viewstate的原理和使用
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .Net多线程Threading相关详解
  • .Net多线程总结
  • .NET框架
  • .Net语言中的StringBuilder:入门到精通