首页 > 其他分享 >图的存储

图的存储

时间:2024-06-11 20:43:59浏览次数:12  
标签:存储 行第 cnt 邻接矩阵 无向 正向 节点

模板题,但码量大。本题主要考察的是存图的方式。

图的类别

有向图:简单来说是指一副具有方向性的图。例如节点 \(a\) 指向节点 \(b\) ,则只能从 \(a\) 走到 \(b\),而不能从 \(b\) 走到 \(a\)。

无向图:若一个图中每条边都是无方向的,则称为无向图。如果一个图为无向图,则既可以从节点 \(a\) 走到节点 \(b\),又可以从 \(b\) 走到 \(a\)。

赋权图:若一个图中连接两个节点的边有长度,则这个图是赋权图。

图的存储方式

邻接矩阵

邻接矩阵是一个 \(n\) 行 \(n\) 列的矩阵,\(n\) 代表节点数。仅能在一张无重边的图中使用。

赋权图

假如节点 \(i\) 连接节点 \(j\),则将矩阵中第 \(i\) 行第 \(j\) 列设为边权,表示这里有一条长度为 \(w\) 的边。

无权图

存法都差不多只不过将第 \(i\) 行第 \(j\) 列的值设为一。仅表示这里有一条边。

注意

邻接矩阵中如果节点 \(a\) 连接节点 \(b\) 且这个图为无向图,那么第 \(a\) 行第 \(b\) 列和第 \(b\) 行第 \(a\) 列都要赋值,因为两边都可以走。如下图。

代码实现

jz[u][v]=w  //节点u到节点v之间有一条长为w的边

关联矩阵

同样是一个二维数组,他记录的是一个点与一条边的关系。并且关联矩阵仅能在一张无自环并且无权的图中使用。

存法

现在第 \(i\) 条边上有节点 \(u\) 和 \(v\) 相连,如果点 \(u\) 在第 \(i\) 条边中作为起点出现,则将 \(b_{u,i}=1\),否则等于负一。 如果这个图是无向图则将 \(b_{u,i}\) 和 \(b_{v,i}\) 都设为一。如下。

邻接链表

相对于邻接矩阵,邻接表虽然更加复杂却极大减少了空间复杂度。邻接表就相当于一维数组与链表的结合体。同时他还有一个熟悉的名字,链式前向星

存法

顶点: 按编号顺序将顶点数据存储在一维数组中。

关联同一顶点的边: 用线性链表存储。

无向图

有向图

链式前向星

void add(int x,int y,int v){ //x节点指向y节点,长度为v
	c[++cnt].v=v;
	c[cnt].to=y;
	c[cnt].next=h[x];
	h[x]=cnt;
}

正向表/逆向表

正向表

当对图 \(G\) 的节点与边进行编号后,正向表将每个节点
的直接后继集中在一起存放。

有向图的正向表有一个 \((n+1)\) 维向量 \(A\),一个 \(m\) 维向量 \(B\) 组成。
\(A(i)\) 表示节点 \(v_i\) 的第一个后继在 \(B\) 中的地址。\(B\) 中存放这些后继节点的编号,即 \(A(n+1)=m+1\)。

逆向表

与正向表相反,逆向表是将每个结点的直接前驱 集中在一起存放

标签:存储,行第,cnt,邻接矩阵,无向,正向,节点
From: https://www.cnblogs.com/wenzhihao2023/p/18242699

相关文章

  • Vitis HLS 学习笔记--接口存储器布局模型
    目录1.简介2.详解2.1数据对齐2.2 数据结构填充3.总结1.简介软件开发者写的程序会在CPU处理器上运行,而硬件开发者设计的“内核”则会在FPGA上运行。这两部分需要通过一个精心设计的接口来沟通,就像两个人用对讲机来交流一样。为了确保这种沟通顺畅,数据必须以......
  • 【Gold菜鸟】Linux知识回忆(4)——磁盘存储和文件系统管理
    前言这一部分让我们来了解,Linux中的磁盘存储和文件系统管理吧~VX: wenjinworkon目录磁盘结构1.1设备文件1.2硬盘类型1.3硬盘类型管理存储2.1磁盘分区2.1.1MBR2.1.2GPT2.1.3管理分区命令2.2文件系统2.2.1文件系统类型2.2.2创建文件系统2.3挂载2.3......
  • 不同数据库背后的数据存储方案
    在大数据和AI时代,数据库成为各类应用不可或缺的重要组成部分。而数据库中的数据依赖存储引擎进行管理,包括数据的存储、查询、更新和删除等。因此,在设计系统时,选择正确的数据库存储引擎方案变得尤为重要。这篇文章将以关系型、NoSQL和NewSQL数据库,以及OLTP、OLAP和HTAP处理方......
  • 使用 .NET 集成 MinIO 实现高效对象存储
    引言https://min.io/在现代软件开发中,存储和管理大量的非结构化数据(如图片、视频和文档)变得越来越重要。对象存储解决方案如AmazonS3已成为主流,但其高昂的成本和对公有云的依赖使得很多开发者寻求开源和自托管的替代方案。MinIO作为一款高性能的开源对象存储系统,以其兼容......
  • MySQL 存储函数及调用
    1.mysql存储函数及调用在MySQL中,存储函数(StoredFunction)是一种在数据库中定义的特殊类型的函数,它可以从一个或多个参数返回一个值。存储函数在数据库层面上封装了复杂的SQL逻辑,使得在应用程序中调用时更加简单和高效。下面是一个具体的MySQL存储函数的示例,该函数接受一个整数......
  • 对象存储服务的回源特性
    为充分提升基础设施相关预算的投资效率,数据安全性,客户的数据可能分布在多套存储中,按照价格、业务场景等,可以划分为如下形式:本地高端存储,支撑生产类业务本地低端存储,支撑归档类业务、分析型业务云端高端存储,支撑生产类业务、分析型业务云端低端存储,支撑归档类业务依据不同的......
  • 对象存储服务的加密特性
    实现思路加密特性的方案,涉及如下设计点:密钥的用途加密的位置加密的算法加密密钥的使用加密密钥的管理密钥的用途密钥的用途分为管理密钥和数据密钥。管理密钥用于加密数据密钥,需要定期更换,更换成本低;假如管理密钥丢失,则导致数据密钥无法解密,从而丢失数据。数据密钥用......
  • JSON文件存储
    JSON文件存储JSON,全称为JavaScriptObjectNotation,也就是JavaScript对象标记,通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。对象和数组在JavaScript语言中,一切皆为对象。因此任何支持的类型都可以通过JSON......
  • 存储引擎解析:选择最佳方案以提升数据库性能【文末送书】
    文章目录什么是存储引擎?01关系型数据库&NoSQL数据库&NewSQL数据库02OLTP&OLAP&HTAP对比03总结《深入浅出存储引擎》【文末送书】在计算机科学领域中,存储引擎是数据存储和检索的核心组件之一。它们是数据库系统的重要部分,负责管理数据的持久化存储和快速检索。本文......
  • 第一章 MySQL体系结构和存储引擎
    1.1定义数据库和实例数据库:物理操作系统文件或其他形式文件类型的集合实例:MySQL数据库由后台线程以及一个共享内存区组成在MySQL数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例MySQL数据库实例在系统上的表现就是一个进程MySQ......