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

6.2.2邻接表法-图的存储

知识总览:

为什么要用邻接表

因为邻接矩阵的空间复杂度高(O(n²)),且不适合边少的稀疏图,所以有了邻接表 

用代码表示顶点、图

声明顶点+图信息

声明顶点用一维数组存储各个顶点的信息,一维数组字段包括2个,每个顶点的数据域信息和指向该顶点的第一条边或弧的信息,声明图:一维数组+该图目前有多少顶点vexnum+改图目前有多少边arcnum

无向图邻接表:

如下图中的data字段上的0、1、2、3、4、5是一维数组的索引,每个data字段都有一个first指针,为指向该顶点的第一条边的指针,虽然指针就一个,但是指向的节点可能有多个,就看这个节点和其他节点有几条边,first指针指向该节点指向的下一个节点信息,节点信息包括该条边指向的节点,如A和B、A和C、A和D都相邻,都有边,都有路径,那first指针指向的节点信息中的是B、C、D,这些节点信息都在一维数组中,每个节点信息都有编号,于是first指针就指向了编号,如B的编号为1,C的编号是2,D的编号是3,所以指向第一条边那依次指向1、2、3(3,2,1的位置也可互换,即邻接表的表示方式不唯一 ,但是邻接矩阵的表示方式唯一),即有一条A指向B或者说指向1的边,A指向C或者说指向2的边,A指向D或者说指向3的边。如果是带权图,还可以在边指向的节点信息中加上权值信息InfoType type字段

因为是无向图,一条边就要在2个节点VNode的first指针存储2个边节点信息。A指向B就意味着B指向A,所以A节点中first指针B,B节点first指针要指向A节点,但是是同一个边,即1个边对应了2个节点,所以有边节点的数量是2|E|即边节点=2倍边的数量

无向图中空间复杂度=顶点的占用空间+2倍边的空间=O(|v|+2|E|)(应该是就存储顶点信息+first指针吧,first指针又存储了边节点,边节点又和边的数量有关系,所以实际是存储的边节点信息。。。)

无向图的度=该节点下first指针中边节点的个数(度是针对节点来说的)

有向图邻接表:

有向图中一条边只会在一个VNode节点信息上指向边节点,即A指向B这条边,只会在A节点的first指针上指向边节点B,不会在B节点的first指针指向A,即边的数量=指向边节点的数量

有向图空间复杂度=顶点的占用空间+边的空间=O(|v|+|E|)

有向图的度=入度+出度(度是针对节点来说的)

有向图的出度=每个节点的first指针指向的边节点的个数(因为first指针指向的是从该节点指向的其他节点)

有向图的入度=遍历所有的节点信息,看看哪个节点上的first指针下有该节点的和(如A节点的入度就是遍历所有的节点,看看哪个节点的first指针下有边节点A,有A的数量之和即为入度),因为求入度要遍历所有节点,所以时间开销大

知识回顾

未完待续。。。。。。。 

http://www.lryc.cn/news/2379311.html

相关文章:

  • C++23 放宽范围适配器以允许仅移动类型(P2494R2)
  • 【技海登峰】Kafka漫谈系列(十一)SpringBoot整合Kafka之消费者Consumer
  • Spring Boot三层架构设计模式
  • 在Java中调用Ant命令
  • WebRTC技术下的EasyRTC音视频实时通话SDK,助力车载通信打造安全高效的智能出行体验
  • 数据科学和机器学习的“看家兵器”——pandas模块 之二
  • 本地部署Firecrawl+Dify调用踩坑记录
  • MySQL--day2--基本的select语句
  • 什么是dom?作用是什么
  • Trae - 国人Cursor的免费平替产品
  • 自动化:批量文件重命名
  • Jsoup库和Apache HttpClient库有什么区别?
  • 学习!FastAPI
  • Linux 安装 Unreal Engine
  • 【第三十六周】LoRA 微调方法
  • 什么是 Boosting
  • Redis 数据类型与操作完全指南
  • Digi XBee XR 系列介绍
  • 【方法论】金字塔原理概述:写作逻辑的底层架构与实践法则
  • 深入探索 OpenCV:从实时视频流到图像处理的实战指南
  • BERT 核心技术全解析:Transformer 双向编码与掩码语言建模的底层逻辑
  • 【OpenCV基础 1】几何变换、形态学处理、阈值分割、区域提取和脱敏处理
  • CSS- 4.4 固定定位(fixed) 咖啡售卖官网实例
  • 得力标签打印机系统集成方案的技术应用与场景实践
  • 【通用智能体】Playwright:跨浏览器自动化工具
  • SmartETL函数式组件的设计与应用
  • 精准掌控张力动态,重构卷对卷工艺设计
  • LlamaIndex中应用自定义提示词提升回答质量
  • 永磁同步电机公式总结【一】——反电动势、磁链、转矩公式;三项、两项电压方程;坐标表换方程
  • STL - stack 和 queue 及容器适配器模式的介绍