邻接矩阵(Adjacency Matrix)

[GNN图神经网络]普通邻接矩阵和 Adjacency Matrix 与 COO稀疏矩阵(edge_index, 和edge_w)相互转化 本文主要使用Pytorch 和 Numpy 实现图的 Adjacency Matrix 与 edge_index, 和edge_w相互转化 阅读详情
AI摘要

本文详细介绍了邻接矩阵的概念及其在图论中的应用。包括无向图和有向图的邻接矩阵表示方法、特点和存储结构,以及如何通过邻接矩阵判断顶点之间的连接关系。

定义

  邻接矩阵(Adjacency Matrix):是表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V={v1,v2,…,vn}。G的邻接矩阵是一个具有下列性质的n阶方阵:

特点

  无向图的邻接矩阵一定是对称的,而有向图的邻接矩阵不一定对称。因此,用邻接矩阵来表示一个具有n个顶点的有向图时需要n2个单元来存储邻接矩阵;对有n个顶点的无向图则只存入上(下)三角阵,故只需n(n+1)/2个单元。
  无向图邻接矩阵的第i行(或第i列)非零元素的个数正好是第i个顶点的度。
  有向图邻接矩阵中第i行非零元素的个数为第i个顶点的出度,第i列非零元素的个数为第i个顶点的入度,第i个顶点的度为第i行与第i列非零元素个数之和。
  用邻接矩阵表示图,很容易确定图中任意两个顶点是否有边相连。

邻接矩阵的C语言描述

  用一个顺序表来存储顶点信息
  

图的邻接矩阵表示法

  1.图的邻接矩阵表示法
  在图的邻接矩阵表示法中:
  ① 用邻接矩阵表示顶点间的相邻关系
  ② 用一个顺序表来存储顶点信息
  2.图的邻接矩阵(Adacency Matrix)
  设G=(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下性质的n阶方阵:
  

  【例】下图中无向图G 5 和有向图G 6 的邻接矩阵分别为A l 和A 2 。
  

  3.网络的邻接矩阵
  若G是网络,则邻接矩阵可定义为:
  

  其中:
  w ij 表示边上的权值;
  ∞表示一个计算机允许的、大于所有边上权值的数。
  【例】下面带权图的两种邻接矩阵分别为A 3 和A 4 。
  

  4.图的邻接矩阵存储结构形式说明
  #define MaxVertexNum l00 //最大顶点数,应由用户定义
  typedef char VertexType; //顶点类型应由用户定义
  typedef int EdgeType; //边上的权值类型应由用户定义
  typedef struct{
  VextexType vexs[MaxVertexNum] //顶点表
  EdeType edges[MaxVertexNum][MaxVertexNum];
  //邻接矩阵,可看作边表
  int n,e; //图中当前的顶点数和边数
  }MGragh;
  注意:
  ① 在简单应用中,可直接用二维数组作为图的邻接矩阵(顶点表及顶点数等均可省略)。
  ② 当邻接矩阵中的元素仅表示相应的边是否存在时,EdgeTyPe可定义为值为0和1的枚举类型。
  ③ 无向图的邻接矩阵是对称矩阵,对规模特大的邻接矩阵可压缩存储。
  ④ 邻接矩阵表示法的空间复杂度S(n)=0(n 2 )。
  5.建立无向网络的算法。
  void CreateMGraph(MGraph *G)
  {//建立无向网的邻接矩阵表示
  int i,j,k,w;
  scanf("%d%d",&G->n,&G->e); //输入顶点数和边数
  for(i=0;in;i++) //读人顶点信息,建立顶点表
  G->vexs =getchar();
  for(i=0;in;i++)
  for(j=0;jn;j++)
  G->edges[j]=0; //邻接矩阵初始化
  for(k=0;ke;k++){//读入e条边,建立邻接矩阵
  scanf("%d%d%d",&i,&j,&w);//输入边(v i ,v j )上的权w
  G->edges[j]=w;
  G->edges[j]=w;
  }
  }//CreateMGraph
  该算法的执行时间是0(n+n 2 +e)。由于e
  根据图的定义可知,图的逻辑结构分为两部分:V和E的集合。因此,用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,称这个二维数组为邻接矩阵。邻接矩阵又分为有向图邻接矩阵和无向图邻接矩阵。

  

邻接矩阵(adjacency matrix)的Matlab表达

  N = 4;
  dag = zeros(N,N);
  C = 1; S = 2; R = 3; W = 4;
  dag(C,[R S]) = 1;
  dag(R,W) = 1;
  dag(S,W)=1;
数据结构复习 ---- 邻接矩阵 这里要总结的邻接矩阵时关于图的邻接矩阵;图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图;一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息; 阅读详情

相关推荐

【数据结构与算法】图——邻接表与邻接矩阵

邻接表与邻接矩阵

qq_66314292的博客 1万+

一起来学算法(邻接矩阵)

邻接矩阵原理透析+leetcode题单

一枚数学专业的小码农的博客 1万+

Adjacency Matrix of Graph(图的邻接矩阵)

//本文件是图的邻接矩阵的头文件,使用C++模板类封装(This file is the header file of adjacency matrix of graph,and packed by C++ template class) #ifndef MGRAPH_H #define MGRAPH_H #include #include "SeqList.h" using namespace

依然静谧的专栏 5348

邻接矩阵详解

邻接矩阵是图论中用于表示图(Graph)结构的一种重要数据结构,特别适用于表示顶点之间连接关系的图形。在计算机科学和数学领域,它被广泛应用来编码无向图和有向图的信息。 对于一个具有 n 个顶点的图 G=(V,E),邻接矩阵是一个 n×n 的矩阵 A,其中的行和列分别对应着图中的每个顶点。矩阵中的每个元素 (A[i][j]) 表示从顶点 i 到顶点 j 存在边的情况: 在无向图中,如果顶点i和顶点j之间有一条边相连,则 (A[i][j] = A[j][i] = 1)(或者根据具体实现可能是其他非零

ffffffeiyu的博客 1万+

探究boost::adjacency_matrix的实际用法

接下来,我们将通过一个简单的测试程序,探究boost::adjacency_matrix的实际用法。值得注意的是,我们只给定了节点数,而并没有指定具体的边。综上,通过上述的测试程序,我们初步了解了boost::adjacency_matrix在实际应用中的使用方法,包括邻接矩阵的创建和边的添加,同时也展示了操作邻接矩阵时所需的一些常见技巧。最后,我们需要注意的是,在使用boost::adjacency_matrix时,由于涉及到内存管理,我们需要谨慎考虑缺省配置下的空间开销,以免出现程序崩溃的情况。

ByteWhiz的博客 238

使用boost::adjacency_matrix的测试程序编程

这是一个简单的示例,演示了如何使用boost::adjacency_matrix来创建图、添加边以及遍历图的节点和边。然后,我们使用boost::tie函数和boost::vertices(g)来获取图中所有节点的迭代器范围,并进行遍历。Boost是一个开源的C++库集合,提供了许多有用的工具和算法。接下来,我们使用boost::add_edge函数向图中添加两条边,连接节点0和节点1,连接节点1和节点2。这表明节点0的邻居节点是节点1,节点1的邻居节点是节点0和节点2,节点2的邻居节点是节点1。

ByteKnight的博客 165

【Elasticsearch】 邻接矩阵聚合(Adjacency Matrix Aggregation)

每个过滤器可以是一个简单的查询,例如`term`、`terms`或`range`查询,用于筛选满足特定条件的文档。键是过滤器名称的组合,例如`A&B`。例如,如果有过滤器`A`和`B`,它会计算同时满足`A`和`B`的文档数量。• `grpA`:匹配`accounts`字段中包含`hillary`或`sidney`的文档。• `grpC`:匹配`accounts`字段中包含`vladimir`或`nigel`的文档。• `grpB`:匹配`accounts`字段中包含`donald`或`mitt`的文档。

risc123456的博客 1007

特征提取神操作,登上Nature!计算速度狂提300%!

登上Nature!作者提出CVOCA,一种能同时处理数据的幅度和相位信息的卷积模型,在性能远超SOTA的同时,计算速度更是狂飙300%!实际上,作为机器学习和深度学习的核心技术,特征提取一直都是研究的热门!它直接影响着模型的准确性、计算效率、可解释性……同时,它也是我们改模型涨点,最好操作的部分!因为可切入点的真的非常之丰富,不管是轻量化、多尺度、时域与频域结合等,都能使模型性能得到提升!

2401_82426425的博客 4036

邻接矩阵(adjacency matrix)

邻接矩阵(adjacency matrix)

听海边涛声 372

RK3588工业开发板实战:如何用IgH EtherCAT主站精准控制伺服电机(附完整代码)

本文详细介绍了如何利用RK3588工业开发板和IgH EtherCAT主站实现伺服电机的精准控制。从硬件选型、实时内核配置到EtherCAT主站安装和核心代码实现,提供了一套完整的工业自动化解决方案,特别适合需要高精度运动控制的场景。

pca5navigator的博客 972

Converting Phase Noise to Random Jitter(Period)

推导了Phase Noise to Random Jitter(Period)的转换过程,解释了分频对Phase Noise & Spur(每2分频改善6dB)的影响,每N分频,TIE RJ(1𝜎)不变(之前已推导),而Period RJ(1𝜎)增加√N倍。

u010486560的博客 2037

无向图的邻接矩阵(adjacency matrix)

MGraph.h #ifndef __MGRAPH_H__ #define __MGRAPH_H__ const int MaxSize = 10; template <class T> class MGraph { public: MGraph(T _maxtrix[], int _vertex, int _edge); ~MGraph(); public: void DF...

白水的博客 1万+

库存预测新思路:AI架构师的图神经网络应用

用图神经网络(GNN)解决传统库存预测的“关联盲区”,让预测从“孤立商品”转向“商品网络”。传统库存预测的痛点分析;GNN的核心概念(图结构、消息传递);GNN在库存预测中的算法原理与代码实战;实际应用场景与未来趋势。背景:用超市老板的烦恼引出传统方法的问题;核心概念:用“商品朋友圈”比喻GNN的图结构和消息传递;算法原理:用数学公式和Mermaid流程图讲清楚GNN的工作流程;实战:用PyTorch Geometric写一个简单的库存预测模型;

AI Python 编程之道的博客 959

图数据结构之邻接矩阵Adjacency Matrix(Python版)

使用二维数组来表示顶点和它相邻节点的一种关系的图

深度学习领域优质创作者,优快云博客专家 3372

Innovus快捷键大全:从入门到精通的效率提升指南

本文是Innovus快捷键从入门到精通的效率提升指南,旨在帮助芯片后端设计工程师通过掌握核心快捷键,将重复性鼠标操作转化为高效的肌肉记忆,从而显著提升版图设计、编辑和分析的工作流速度。文章系统讲解了视图导航、对象选择编辑、流程管理等关键快捷键组合,并提供了个性化配置与实战策略,助力工程师突破效率瓶颈,实现人机合一的流畅设计体验。

silver的专栏 797

从0到1构建数据分析AI Agent:数据采集、洞察生成与报告自动化

在企业数字化转型的今天,数据分析师80%的时间被消耗在重复取数、数据清洗、报表排版等低价值劳动上,真正用于深度业务洞察和决策支持的时间不足20%。本文将从核心概念、技术原理、代码实现、落地实践全维度,教你从0到1搭建一套完整的数据分析AI Agent系统,实现「用户用自然语言提需求→Agent自动采集多源数据→AI自动挖掘业务洞察→自动生成符合业务要求的多格式报告」的全链路自动化,平均可将需求响应速度从天级压缩到分钟级,释放70%以上的分析师人力成本。

AI Python 编程之道的博客 471

Elasticsearch 聚合系列:adjacency matrix aggregation(邻接矩阵聚合)

定义 对某个字段的值做矩阵,返回单独满足一个/同时满足两个的结果 A B C A A A&B A&C B B B&C C C 测试: 环境准备 初始化一个带 Kibana 的 ES 集群 参考 环境搭建攻略 本文使用的是 ES 7.16,与上文中的集群版本不一致 在首页中添加示例数据 add sample data 测试执行 分别执行以下命令,可以得到以下结果 POST kibana_sample_data_ecommerce/_sear

weixin_40601534的博客 1557

游戏开发中的CV:实时动作捕捉与虚拟交互

游戏开发中的CV:实时动作捕捉与虚拟交互​ ,人工智能,计算机视觉,大模型,AI,在当今游戏产业中,玩家对游戏体验的要求日益提高,追求更加真实、沉浸的交互感受。计算机视觉(Computer Vision,CV)技术的飞速发展,为游戏开发带来了革命性的突破,其中实时动作捕捉与虚拟交互技术更是成为提升游戏品质的核心驱动力。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 16万+

Java集合和数据结构-图 (Graph)的定义与邻接矩阵(Adjacency Matrix)

本文系统介绍了图论中的基本概念和邻接矩阵表示法。首先阐述了图的定义,将图描述为由顶点集合V和边集合E组成的结构G=(V,E),并分类讨论了无向图、有向图、带权图等类型及其特性。然后重点讲解了邻接矩阵表示法,包括其构建规则(N×N矩阵中元素表示顶点间连接关系)、特点(对称性、空间复杂度O(N²))和适用场景。最后提供了Java代码实现,包含邻接矩阵的初始化、边添加和打印功能,并对比分析了邻接矩阵与邻接表的优缺点。全文通过理论结合代码的方式,为图论学习提供了扎实的基础知识。

道冲而用之或不盈,渊兮似万物之宗。 1281

本地快速部署谷歌开放模型Gemma教程(基于Ollama)

谷歌最近发布了新一代开源AI模型Gemma,此次发布的 Gemma 相比自家的 Gemini 更加轻量级,模型权重也一并开源。不仅可以在笔记本电脑上运行,而且还免费可商用,支持中文。运行速度飞快。

特立独行的博客 6716

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

nx.adjacency_matrix计算邻接矩阵与真实结果不一致:解决办法记录

nx.adjacency_matrix计算邻接矩阵与真实结果不一致:解决办法记录问题描述原来的代码实际运行输出理论结果调试过程解决方案修改后的代码修改代码后的运行结果函数说明 问题描述 我自己根据edgelist计算的邻接矩阵,与调用networkx.adjacency_matrix(g)返回的结果不一样,经过调试发现了问题原因以及解决办法,记录如下。 原来的代码 edgelist = [ (0, 1), (1, 3), (2, 4), (1,

yingluo54的博客 7349

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

六、【数据结构】图-邻接矩阵(adjacency matrix)的实现

本文旨采用C++实现图数据结构,具体地以邻接矩阵的方式实现图数据结构。图结构可以描述一组对象之间的二元关系,例如在城市交通中,联接于各个公交车站之间的道侣,或者在互联网中个网络节点之间的路由都可以很方便地用图结构来表述,另外在之前介绍的树结构也属于图的一种,此类一般性的二元关系,属于图论。 在将一些对象之间的关系用图结构表示后,那么我们就可以使用图算法方便地解决这些对象的某些问题,比如拓扑排序,...

天涯明月刀的博客 5720

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

计算机是如何存储矩阵,如何存储稀疏邻接矩阵(How to store sparse adjacency matrix)

如何存储稀疏邻接矩阵(How to store sparse adjacency matrix)我读了几个主题,但我迷路了。 我对此很陌生。 我想存储巨大的稀疏矩阵并有几个想法,但可以在它们之间进行选择。 这是我的需求:邻接矩阵约。 5000万个顶点。每个顶点的最大邻居数量 - 大约 10 000。每个顶点的平均邻居数量 - 约。 200-300。快速行查询 - 向量将乘以此矩阵。O(1)增加边缘...

weixin_35617554的博客 672

nx.adjacency_matrix(G).todense()计算邻接矩阵与真实结果不一致

问题和下面一样,问题出现的原因已经在下面的链接中说的很明白,是由于生成的Graph类中的Graph.nodes没有按照顺序排列导致邻接矩阵不对应。 https://blog.youkuaiyun.com/yingluo54/article/details/113325108 我按照上面问题中的方法把edge按照点的顺序排列也没有用,节点依然存在顺序问题,最后用下面的解决办法搞定: 先将可能存在的所有点按照从大到小的顺序排成node_list(如[1,3,5,7,…]),然后用G.add_nodes_from(nod

Nicolas_Yin的博客 2180
上一篇: MATLAB 函数在优化问题中的应用
下一篇: 数字信号处理应用中的数值逼近方法概述
鹅鹅
博客等级 码龄19年 70粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值