数据结构--图(笔记)

news2024/11/24 17:56:48

文章目录

  • 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. 内容出处

数据结构

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

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

相关文章

36. 有效的数独【 力扣(LeetCode) 】

一、题目描述 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图…

2-72 基于matlab的平稳小波变换进行多聚焦图像融合

基于matlab的平稳小波变换进行多聚焦图像融合,获得一副清晰的图像,带有一副示例图像,实验效果好。SWT级平稳小波变换,是一种多尺度、多方向、时频局部的图像稀疏表示方法,广泛运行图像处理领域,具有平移不变…

msxml*.dll 错误 ‘80072f7d‘ 安全频道支持出错 解决方案

诡异的 msxml6.dll错误 80072f7d安全频道支持出错,用 SSLTools.exe 修复的方法无效!!! ’--------------------------------------------------------------- 有如下简要 ASP 代码,用于获取网页链接返回内容&#xf…

《图解设计模式》笔记(四)分开考虑

九、Bridge模式:将类的功能层次结构与实现层次结构分离 类的两个层次结构和作用 类的功能层次结构:希望增加新功能时 父类有基本功能,在子类中增加新功能 Something父类 …├─SomethingGood子类 想要再增加新功能 Something父类 …├─So…

计算机的错误计算(六十九)

摘要 计算机的错误计算(六十三)与(六十八)分别探讨了大数与 附近数 的余切函数值的错误计算。本节讨论第三种类型数值: 附近数 的余切函数的计算精度问题。 例1. 已知 计算 不妨先用 Python的 torch库计算&…

RocketMQKafka重试队列

为实现服务间的解耦和部分逻辑的异步处理,我们的系统采纳了消息驱动的方法。通过消息队列的使用,各个服务能够基于事件进行通信,从而降低了直接的依赖关系,优化了系统的响应性能和可靠性。 为什么需要考虑消费重试? …

人格凭证(PHC):一种鉴别AI防伪保护隐私的真实身份验证技术

人格凭证(PHC):一种鉴别AI防伪保护隐私的真实身份验证技术 引言 随着人工智能(AI)技术的飞速发展,网络空间中的身份验证问题日益凸显。AI不仅能模仿人类行为,还能创建虚假账户、发布误导性信息…

秒懂Linux之缓冲区

目录 一.何为缓冲区 二. 缓冲区在哪 三. 模拟编码 一.何为缓冲区 缓冲区说白了就是一块内存区域,目的是为了提高使用者的效率以及减少C语言接口的使用频率~ 下面我们用一则小故事来类比出缓冲区的功能~ 张三为了给朋友李四庆祝生日快乐准备了份生日礼物~张三难道…

开源原型设计工具Penpot

Penpot是一个现代化、开源的协同设计平台,专为跨职能团队打造,提供了强大的在线设计和原型制作功能。 以下是对Penpot的详细介绍: 一、平台特点 开源与免费:Penpot是一个完全免费且开放源代码的项目,允许社区贡献和定…

Redis补充

Redis事务 Redis事务的概念 Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。 …

JAVA多线程等待唤醒机制

为什么要处理线程间通信: 当我们需要多个线程来共同完成一件任务,并且我们希望他们有规律的执行,那么多线程之间需要一些通信机制,可以协调它们的工作,以此实现多线程共同操作一份数据。 比如:线程A用来生…

Java | Leetcode Java题解之第357题统计各位数字都不同的数字个数

题目&#xff1a; 题解&#xff1a; class Solution {public int countNumbersWithUniqueDigits(int n) {if (n 0) {return 1;}if (n 1) {return 10;}int res 10, cur 9;for (int i 0; i < n - 1; i) {cur * 9 - i;res cur;}return res;} }

4-1-5 步进电机原理2(电机专项教程)

4-1-5 步进电机原理2&#xff08;电机专项教程&#xff09; 4-1-5 步进电机原理2永磁式步进电机反应式步进电机混合式步进电机混合式步进电机基本原理 4-1-5 步进电机原理2 新的步进电机分类 永磁式步进电机 目前学习的转子都是永磁铁 反应式步进电机 软磁材料易受到周围磁场…

阿里云魏子珺:阿里云Elasticsearch AI 搜索实践

作者&#xff1a;阿里云魏子珺 【AI搜索 TechDay】是 Elastic 和阿里云联合主办的 AI 技术 Meetup 系列&#xff0c;聚焦企业级 AI 搜索应用和开发者动手实践&#xff0c;旨在帮助开发者在大模型浪潮下升级 AI 搜索&#xff0c;助力业务增长。 阿里云 Elasticsearch 的 AI 搜索…

Nginx笔记(高级)

扩容 通过扩容提升整体吞吐量 单机垂直扩容&#xff1a;硬件资源增加 云服务资源增加 整机&#xff1a;IBM、浪潮、DELL、HP等CPU/主板&#xff1a;更新到主流网卡&#xff1a;10G/40G网卡磁盘&#xff1a;SAS(SCSI) HDD&#xff08;机械&#xff09;、HHD&#xff08;混合&…

OpenCV几何图像变换(5)旋转和缩放计算函数getRotationMatrix2D()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算二维旋转的仿射矩阵。 该函数计算以下矩阵&#xff1a; [ α β ( 1 − α ) ⋅ center.x − β ⋅ center.y − β α β ⋅ center.x ( …

Linux 中断处理与内核线程化——以触摸屏中断为例

文章目录 1 什么是中断&#xff1f;2 传统的中断处理模型3 内核线程与用户进程4 中断线程化的理念5 devm_request_threaded_irq 与 request_irq 的比较6 触摸屏驱动中的中断线程化参考链接封面 本文探讨了 Linux 中断处理的传统模型与中断线程化的理念&#xff0c;以及在触摸屏…

【Python】计算直角三角形的 ∠MBC

有一个直角三角形 ABC&#xff0c;其中角 B 是直角&#xff08;90&#xff09;。点 M 是斜边 AC 的中点。我们需要根据边 AB 和 BC 的长度来计算角 ∠MBC。 在直角三角形中&#xff0c;如果一个角是直角&#xff0c;那么另外两个角的和是90。由于 M 是斜边的中点&#xff0c;根…

turtle画图知识

Turtle库是Python编程语言中的一个库&#xff0c;用于创建各种类型的图形&#xff0c;包括简单圆形、线条、路径和图片。它支持多种图形类型&#xff0c;并且可以绘制出各种复杂的形状。 以下是一些基本的使用方法&#xff1a; 1. 创建一个新的Turtle对象&#xff1a; pytho…

hyperf 协程作用和相关的方法

什么是协程 协程是一种轻量级的线程&#xff0c;由用户代码来调度和管理&#xff0c;而不是由操作系统内核来进行调度&#xff0c;也就是在用户态进行 判断当前是否处于协程环境内 在一些情况下我们希望判断一些当前是否运行于协程环境内&#xff0c; 对于一些兼容协程环境与…