无向图的邻接矩阵可用一维数组存储

简介: 无向图的邻接矩阵可用一维数组存储

在无向图中,邻接矩阵是一个对称矩阵,即矩阵的第 i 行第 j 列元素与第 j 行第 i 列元素相同(A[i][j] = A[j][i])。由于这个性质,我们不需要存储整个 n×n 的矩阵来表示一个包含 n 个顶点的无向图。我们只需要存储矩阵的上三角部分或下三角部分。

例如,考虑一个包含 4 个顶点的无向图,其邻接矩阵可能如下所示:

0 1 2 3
0 0 1 1 0
1 1 0 1 1
2 1 1 0 1
3 0 1 1 0

在这个邻接矩阵中,我们只需要存储非对角线上方或下方的元素。对于上三角矩阵(不包括对角线),我们可以按照以下顺序存储元素:

(0,1), (0,2), (0,3), (1,2), (1,3), (2,3)

对应的一维数组就是:

1, 1, 0, 1, 1, 1

这里,我们按行优先的顺序存储了上三角矩阵中的元素。如果我们想通过一维数组来访问邻接矩阵中的元素 A[i][j] (假设 i < j),我们可以使用以下方法来计算一维数组中的索引:

index = i * (n - 1) - (i * (i + 1) / 2) + (j - i) - 1

这里,n 是顶点的数量。这个公式的理解是:

  • i * (n - 1) 是如果存储完整行时直到行 i 的元素数量。
  • (i * (i + 1) / 2) 是由于我们只存储上三角部分,所以需要减去前 i 行对角线及其下方的元素数量(即前 i 行中不存储的元素数量)。
  • (j - i) 是当前行 i 中,从对角线到我们要找的列 j 的元素数量。
  • 最后,我们减去 1 是因为数组索引从 0 开始。

这样,我们就可以仅用一个一维数组来存储无向图的邻接矩阵,节省了空间。

目录
相关文章
|
存储 编译器 数据库
【C/C++ 数据结构 】线索二叉树全解析:从数学原理到C++实现
【C/C++ 数据结构 】线索二叉树全解析:从数学原理到C++实现
837 0
|
算法
最小生成树算法:Prim算法
在图论中,最小生成树(Minimum Spanning Tree,简称MST)是一种常用的算法问题。最小生成树是指在一个加权连通图中选取边的子集,使得所有顶点都被覆盖,并且边的总权值最小。
1568 0
|
大数据 Linux
CentOS自动同步互联网服务器时间
CentOS自动同步互联网服务器时间
4986 0
CentOS自动同步互联网服务器时间
|
9月前
|
人工智能 安全 算法
【云故事探索】NO.18:易点天下:以全栈AI营销能力引领全球增长新周期,阿里云“全球一张网”筑牢中国企业出海底座
位于西安的易点天下,以算法与数据驱动,助力中国品牌出海。自2011年成立以来,业务覆盖全球220+国家,通过AIGC、Agentic AI等技术,携手阿里云构建智能营销全链路,推动跨境电商、新能源等领域全球化布局,成为中国企业走向世界的重要推手。
|
Java Maven
使用 maven 自动将源码打包并发布
使用 maven 自动将源码打包并发布
917 0
|
Windows
Acunetix——本地计算机上的Acunetix服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止
Acunetix——本地计算机上的Acunetix服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止
856 0
|
机器学习/深度学习 自然语言处理 数据挖掘
使用Python和大模型进行数据分析和文本生成
Python语言以其简洁和强大的特性,成为了数据科学、机器学习和人工智能开发的首选语言之一。随着大模型(Large Language Models, LLMs)如GPT-4的崛起,我们能够利用这些模型实现诸多复杂任务,从文本生成到智能对话、数据分析等等。在这篇文章中,我将介绍如何用Python连接和使用大模型,并通过示例展示如何在实际项目中应用这些技术。
|
存储 算法 C语言
数据结构学习记录——图-最短路径问题(无权图单源最短路径算法、有权图单源最短路径算法、多源最短路径算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)
数据结构学习记录——图-最短路径问题(无权图单源最短路径算法、有权图单源最短路径算法、多源最短路径算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)
1572 1
|
编译器
408王道计算机组成原理强化——指令系统及大题解构(上)
408王道计算机组成原理强化——指令系统及大题解构
948 1
408王道计算机组成原理强化——指令系统及大题解构(上)
|
存储 消息中间件 SQL

热门文章

最新文章