首页 > 其他分享 >图的存储-邻接表

图的存储-邻接表

时间:2024-04-04 19:35:34浏览次数:20  
标签:存储 复杂度 结点 链表 邻接 顶点

1. 邻接表

所谓邻接表,就是把从同一个顶点发出的边链接在同一个称为边链表的单链表中。边链表的每个结点代表一条边,称为边结点。每个边结点有 2 个域:该边终点的序号,以及指向下一个边结点的指针。在邻接表中,还需要一个用于存储顶点信息的顶点数组。 

例如,如下所示的有向图对应的邻接表如图(b)所示。在顶点数组中,每个元素有两个成员:一个成员用来存储顶点信息;另一个成员为该顶点的边链表的表头指针,指向该顶点的边链表。如果没有从某个顶点发出的边,则该顶点没有边链表,因此表头指针为空,如图(b)中的顶点 G。在该图中,如果指针为空,则用符号“∧”表示。 

在邻接表每个顶点的边链表中,各边结点所表示的边都是从该顶点发出的边,因此这种邻接表也称为出边表。采用邻接表存储图时,求顶点的出度很方便,只需要统计每个顶点的边链表中边结点的个数即可,但在求顶点的入度时就比较麻烦。

如果需要统计各顶点的入度,可以采用逆邻接表存储表示图。所谓逆邻接表,也称为入边表,就是把进入同一个顶点的边链接在同一个边链表中。 

因为无向图中的边没有方向性,所以无向图的邻接表没有入边表和出边表之分。在无向图的邻接表中,与顶点 v 相关联的边都链接到该顶点的边链表中。无向图的每条边在邻接表里出现 2次。 

说明:如果用邻接表存储有向网或无向网,则在边结点中还应增加一个成员,用于存储边的权值。 

2.  存储方式对算法复杂度的影响

时间复杂度:邻接表里直接存储了边的信息,浏览完所有的边,对有向图来说,时间复杂度复杂度是 O(m), 对无向图是 O(2×m)。 而邻接矩阵是间接存储边, 浏览完所有的边, 复杂度是 O(n2)。

空间复杂度:邻接表里除了存储 m 条边所对应的边结点外,还需要一个顶点数组,存储各顶点的顶点信息及各边链表的表头指针,总的空间复杂度为 O(n+m)(或 O(n+2m));而用邻接矩阵存储图,需要 n×n 规模的存储单元,其空间复杂度为 O(n2)。当边的数目相对于 n×n 比较小时,邻接矩阵里存储了较多的无用信息,用邻接表可以节省较多的存储空间。
 

标签:存储,复杂度,结点,链表,邻接,顶点
From: https://www.cnblogs.com/love-9/p/18114513

相关文章

  • 图的存储-邻接矩阵
    1.有向图和无向图的邻接矩阵 设G(V,E)是一个具有n个顶点的图,则图的邻接矩阵是一个n×n的二维数组,用Edge[n][n]表示,它的定义为:下面的图给出了无向图G1(V,E)及其邻接矩阵表示。在图中,为了表示顶点信息,特意将顶点的标号用字母A、B、C、D、E和F表示,各顶点的信息......
  • 对象存储:现代数据管理的关键技术
    在当今数字化时代,数据的产生和积累呈现出爆炸式增长的趋势。面对海量的数据,传统的存储方式已经无法满足日益增长的需求。为了有效管理和利用这些数据,对象存储技术应运而生。对象存储分为三种类型,第一种:标准存储,较适合用于云应用,数据分享,内容分享,热点分享等等浏览频率较高的存......
  • 散列表的数据结构以及对象在JVM堆中的存储过程
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18032068出自【进步*于辰的博客】参考笔记二,P67、P68.1。目录1、什么是“散列表”?2、关于对象存储过程2.1加载过程2.2注意事项3、Hashtable扩容机制3.1扩容机制是什么......
  • 达梦执行存储过程报死锁问题分析排查方法
    最近在一个项目中调用存储过程报死锁错误,而根据DEADLOCK_HISTORY也无法看出是哪个表产生了死锁,下面模拟一下环境做测试dropTABLEifEXISTStest;CREATETABLEtest(idint);BEGINforiin1..100loopinsertintotestVALUES(i);endloop;commit;end;CREATEorREP......
  • 【阅读笔记】MySQL数据库存储类型选择
    摘自:《高性能MySQL》第四版原则更小的通常更好一般来说,尽量使用能够正确存储和表示数据的最小数据类型。更小的数据类型通常更快,因为它们占用的磁盘、内存和CPU缓存的空间更少,并且处理时需要的CPU周期也更少。简单为好简单数据类型的操作通常需要更少的CPU周期。例如,整型数......
  • 进程调度-死锁-存储管理-固定分页分段
    进程调度进程调度方式是指当有更高优先级的进程到来时如何分配CPU。分为可剥夺和不可剥夺两种,可剥夺指当有更高优先级进程到来时,强行将正在运行进程的CPU分配给高优先级进程;不可剥夺是指高优先级进程必须等待当前进程自动释放CPU。在某些操作系统中,一个作业从提交到完成需要经......
  • MybatisPlus存储非List<Long>类型
    错误信息:java.lang.RuntimeException:FailedtodeserializeJSONtoList<Long> 使用mybatisplus的时候,对应数据库的实体类有个字段如下:@TableField(typeHandler=JacksonTypeHandler.class)privateList<String>authImages;需要存储图片列表的地址,["aaa.png","bbb.png&q......
  • 视频监控/云存储/AI智能分析平台EasyCVR集成时调用接口报跨域错误的原因排查
    EasyCVR视频融合平台基于云边端架构,可支持海量视频汇聚管理,能提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。平台兼容性强,支持多协议、多类型设备接入,包括:国标GB/T28181协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK......
  • MySQL之存储引擎,详细总结
    在介绍存储引擎之前我们先了解了解MySQL的体系结构:连接层最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限服务层第二层架构主要完成大多数的核心服务功能,如SQL接口,并完......
  • 进程的操作与管理(PV方法/死锁/存储方法)
     操作系统本质上是人机之间交互的接口,人通过操作系统(比如命令行、窗口、菜单)去操控计算机硬件;同时也是应用软件与硬件之间的接口(换而言之可以控制程序的运行)。操作系统的五大作用:进程管理、存储管理、文件管理、作业管理、设备管理上图就是典型的计算机结构:硬件层......