6.2.图的存储结构-邻接矩阵法

一.邻接矩阵法存储不带权图:

结点不带权值:

1.左图的无向图中,A到B直达的有一条路,所以A行B列的值为1;

左图的无向图中,A到F没有直达的路,所以A行F列的值为0;

结论:无向图中采用邻接矩阵法,0表示两个顶点不邻接,1表示两个顶点邻接,边对应两个1;

2.右图的有向图中,A到B直达的有一条路,所以A行B列的值为1,

B到A没有直达的路,所以B行A列的值为0;

结论:有向图中采用邻接矩阵法,1表示有向边(弧),有向边(弧)对应一个1;

3.上述图片中的代码,顶点表是要存入边表的即表中存点;

4.顶点表也可以是其他类型,如整型,自定义数据类型;

5.int型表示边占4个字节(4B)或者8个字节(8B),用bool型或枚举型变量表示边则占1个字节(1B);

6.注:表中的顶点是有下标(编号)的,这样是为了在表中方便寻找两个顶点的关系,如A的下标为0,B的下标为1,这样比如在左图的无向图中只需要找第0行第1列就可以查找顶点A和B的关系;

7.如何求顶点的度(针对无向图和有向图),入度和出度(只针对有向图):

  • 无向图:如上述图片中的B结点,在B结点这一行中,有几个非0元素就有几个度,显然A,E,F列为1即不为0,因此B的度为3(看B结点这一列也可以,结果一致)

结论:第i个结点的度=第i行(第i列)的非零元素个数,时间复杂度为O(n)或者O(|v|),v是顶点数

  • 有向图:某个结点的出度的个数就是该结点所在行(不能是列)中非0元素的个数,如A结点的出度为1;

    某个结点的入度的个数就是该结点所在列(不能是行)中非0元素的个数,如A结点的入度为2;

    有向图中某个结点的度等于该结点入度的个数加出度的个数,时间复杂度为O(n)或者O(|v|),v是顶点

    数,因此A结点的度为3;


二.邻接矩阵法存储带权图(网):

1.带权图中存储的就是权值,比如左图的无向图A直达B的权值为5,那么A行B列的值为5,

左图的无向图B直达C不存在权值即B直达不了C,那么B行C列的值可以用无穷来表示;

2.权值的类型可以是整型,浮点型或者自定义数据类型等;

3.有时也会把自己指向自己的权值设为0,如A到A的权值为0;

4.邻接矩阵法存储带权图(网)中结点到结点的权值如果为0或者是无穷,那么表示与之对应的两个结点之间不存在边:


三.邻接矩阵法的性能分析:

1.如果图中有n个顶点(结点),那么存储该图的顶点就需要一个一维数组,此时存储顶点的空间复杂度为O(n),

还需要定义一个n * n的二维数组来存储和这些顶点相关的边的信息,所以存储边的空间复杂度为O(n * n),

所以总共空间复杂度为O(n)+O(n * n),等价于O(n * n),

结论:邻接矩阵法的空间复杂度为O(n * n)或O(|v| * |v|),v为顶点数-->只和顶点数有关,和实际的边数无关,导致的弊端就是如果顶点很多,但边比较少,就会使得存储边的二维数组空间浪费,因此邻接矩阵法适用于存储稠密图即边多的图;


四.邻接矩阵法的性质:讨论不带权值的图即矩阵元素只有0,1

0表示从一个顶点到另一个顶点没有路径,1表示从一个顶点到另一个顶点有路径,

A到B到D的长度为2,符合要找的路径长度,所以算了进去;

注:简单图中自己到自己的权值为0;

上述图片中右下角的矩阵中的值表示的是顶点到顶点长度为2的路有几条,如A行C列中顶点A到顶点C长度为2的路有1条;


五.总结:

邻接矩阵法的空间复杂度为O(n*n),n为顶点数,由此可看出邻接矩阵法的空间复杂度较高,不适合存储稀疏图,如果使用邻接矩阵法存储稀疏图,会造成大量的空间浪费。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20501.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1-知识图谱-概述和介绍

知识图谱:浙江大学教授 陈华军 知识图谱 1课时 http://openkg.cn/datasets-type/ 知识图谱的价值 知识图谱是有什么用? 语义搜索 问答系统 QA问答对知识图谱:结构化图 辅助推荐系统 大数据分析系统 自然语言理解 辅助视觉理解 例…

【C语言】C语言 食堂自动化管理系统(源码+数据文件)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【C语言】C语言 食堂自动化管理系统(源…

C#之上位机开发---------C#通信库及WPF的简单实践

〇、上位机,分层架构 界面层 要实现的功能: 展示数据 获取数据 发送数据 数据层 要实现的功能: 转换数据 打包数据 存取数据 通信层 要实现的功能: 打开连接 关闭连接 读取数据 写入数据 实体类 作用: 封装数据…

网络编程(24)——实现带参数的http-get请求

文章目录 二十四、day241. char 转为16进制2. 16进制转为 char3. URL 编码函数4. URL 解码函数5. 实现 get 请求参数的解析6. 测试 二十四、day24 我们在前文通过beast实现了http服务器的简单搭建,但是有很多问题我们并没有解决。 在前文中,我们的 get…

机器学习_18 K均值聚类知识点总结

K均值聚类(K-means Clustering)是一种经典的无监督学习算法,广泛应用于数据分组、模式识别和降维等领域。它通过将数据划分为K个簇,使得簇内相似度高而簇间相似度低。今天,我们就来深入探讨K均值聚类的原理、实现和应用…

LeetCode1287

LeetCode1287 目录 题目描述示例思路分析代码段代码逐行讲解复杂度分析总结的知识点整合总结 题目描述 给定一个非递减的整数数组 arr,其中有一个元素恰好出现超过数组长度的 25%。请你找到并返回这个元素。 示例 示例 1 输入: arr [1, 2, 2, 6, 6, 6, 6, 7,…

恒创科技:如何重新启动 Windows 服务器

重新启动 Windows 服务器对于应用更新、解决问题和维护系统性能至关重要。定期重新启动有助于确保服务器运行最新软件、解决冲突并清除临时文件。本教程将介绍如何使用不同的方法重新启动 Windows 服务器。 注意:重新启动服务器之前保存所有工作,以避免丢…

Django ModelForm使用(初学)

1.目的是根据员工表字段,实现一个新增员工的数据填写页面 2.在views.py文件中按下面的格式写 定义 ModelForm 类:UserModelForm (自己命名的类名)使用时需要导入包 定义视图函数:user_model_form_add(在函…

华为固态电池引发的思索

华为固态电池真牛! 超长续航:单次充电即可行驶3000公里 极速充电:五分钟内充满80% 极致安全:不可燃、不漏液 长寿命设计:循环寿命达10000次以上 如上是华为电池展示的优势项,每一条都让我们心动不已。…

美信监控易:运维新时代,守护数据安全

在 2025 年这个科技飞速发展的时代,数据安全已成为各行业关注的焦点。随着云计算、大数据、物联网等技术的不断推进,运维数据的保护面临着新的挑战与要求。美信时代公司的美信监控易运维管理软件,以其卓越的功能、特性和竞争力,为…

个人博客5年回顾

https://huangtao01.github.io/ 五年前,看程序羊的b站视频做的blog,受限于网络,只能单向学习,没有人指导与监督,从来没有想过,有没有什么问题? 一、为什么要做个人博客? 二、我是怎么…

Unity合批处理优化内存序列帧播放动画

Unity合批处理序列帧优化内存 介绍图片导入到Unity中的处理Unity中图片设置处理Unity中图片裁剪 创建序列帧动画总结 介绍 这里是针对Unity序列帧动画的优化内容,将多个图片合批处理然后为了降低Unity的内存占用,但是相对的质量也会稍微降低。可自行进行…

【Docker】容器被停止/删除的方式及命令:全面解析与实践指南

文章目录 引言一、容器的生命周期二、停止容器的命令及方式1. docker stop 命令2. docker kill 命令3. docker pause 和 docker unpause 命令4. docker restart 命令 三、删除容器的命令及方式1. docker rm 命令2. docker container prune 命令3. docker rm 与 docker rmi 的区…

大数据SQL调优专题——Flink执行原理

引入 上一篇我们了解了Spark,相比起MapReduce来说,它确实已经快了超级多了,但是人类的欲望是没有止境的,这也是推动人类进步的动力。 Flink就是为了满足实时响应的场景需求诞生的。 其实在Flink之前,实时处理其实已…

【Cocos TypeScript 零基础 16.1】

目录 FlappyBird背景其他心得_刚体audio部分 FlappyBird 本人没有按照老师的做法去做,大体差不多, 当然老师做的更精细,有些不会的还是参考老师的方法 参考部分 小鸟如何像真实物体一样的重力效果点击如何使小鸟飞翔 省略部分 3. 小鸟多动画(飞机大战其实有做,单纯偷懒) 4. …

CHARMM-GUI EnzyDocker: 一个基于网络的用于酶中多个反应状态的蛋白质 - 配体对接的计算平台

❝ "CHARMM-GUI EnzyDocker for Protein−Ligand Docking of Multiple Reactive States along a Reaction Coordinate in Enzymes"介绍了 CHARMM-GUI EnzyDocker,这是一个基于网络的计算平台,旨在简化和加速 EnzyDock 对接模拟的设置过程&…

腿足机器人之六- 前向运动学

腿足机器人之六- 前向运动学 刚体运动学基础坐标系定义旋转矩阵与欧拉角齐次变换矩阵(平移旋转的统一表示) 运动链建模串联运动链结构(从基座到末端的关节连接)标准Denavit-Hartenberg(D-H)参数法改进D-H参…

uni-app发起网络请求的三种方式

uni.request(OBJECT) 发起网络请求 具体参数可查看官方文档uni-app data:请求的参数; header:设置请求的 header,header 中不能设置 Referer; method:请求方法; timeout:超时时间,单位 ms&a…

【linux】更换ollama的deepseek模型默认安装路径

【linux】更换ollama的deepseek模型默认安装路径 文章目录 【linux】更换ollama的deepseek模型默认安装路径Ollama 默认安装路径及模型存储路径迁移ollama模型到新的路径1.创建新的模型存储目录2.停止ollama3.迁移现有模型4.修改 Ollama 服务配置5.重启ollama6.验证迁移是否成功…

「软件设计模式」装饰者模式(Decorator)

深入解析装饰者模式:动态扩展功能的艺术(C实现) 一、模式思想与应用场景 1.1 模式定义 装饰者模式(Decorator Pattern)是一种结构型设计模式,它通过将对象放入包含行为的特殊封装对象中,动态地…