当前位置: 首页 > news >正文

数据结构秘籍(二)图(含图的概念、存储以及图的两大搜索)

1 引言

线性数据结构的元素满足唯一的线性关系,每个元素(初第一个和最后一个外)只有一个直接前趋和一个直接后继。树形数据结构的元素之间有着明显的层次关系。但是图形结构的元素之间的关系是任意的。

什么是图?

简单来说,图就是由顶点的有穷非空集合和顶点之间的边组成的集合。通常表示为:G(V,E),其中,G表示一个图,V表示顶点的集合,E表示边的集合。

上图所展示的就是图,而且是一个有向图(带箭头) 

2 图的基本概念

拿好友关系举例

2.1 顶点

图中的数据元素我们称之为顶点,图中至少有一个顶点(非空有穷集合)

对应到好友关系图,每一个用户就代表一个顶点。

2.2 边

顶点之间的关系用边表示。

对应到好友关系图,两个用户是好友的话,那两者之间就存在一条边。

2.3 度

度表示一个顶点包含多少条边,在有向图中,还分为出度和入度,出度表示从该顶点出去的边的条数,入度表示进入该顶点的边的条数。

对应到好友关系图,度就代表了某个人的好友数量。

2.4 无向图和有向图

边表示的是顶点之间的关系,有的关系是双向的,比如同学,A是B的同学,那么B也肯定是A的同学,那么在表示A和B的关系时,就不用关注方向,用不带箭头的边表示,这样的图就是无向图。

有的关系是有方向的,比如抖音,我关注了你,你没有关注我,这样我们之间的关系就是单向的,我们用箭头表示二者之间的关系,这样的图就是有向图。

2.5 无权图和带权图

对于一个关系,如果我们只关心关系的有无,而不关心关系有多强,那么就可以用无权图来表示二者的关系。

对于一个关系,如果我们既关心关系的有无,也关心关系的强度,比如某某某的好感度,你对人家好感度百分百,人家对你好感度百分之零(一个悲伤的故事),那么就可以用带权图来表示,带权图中每一条边用一个数值表示权值,代表关系的强度。

把上面的有向图进行加工就是一个带权有向图

3 图的存储

3.1 邻接矩阵存储

邻接矩阵将图用二维矩阵存储,是一种较为直观的表示方式。

如果第i个顶点和第j个顶点之间有关系,且关系权值为n,则A[i][j]=n。

在无向图中,我们只关心关系的有无,所以当顶点i和顶点j有关系时,A[i][j]=1,当顶点i和顶点j没有关系时,A[i][j]=0。如下图所示。

值得注意的是:无向图的邻接矩阵是一个对称矩阵,因为在无向图中,顶点i和顶点j有关系,那么就必定是双方的。

邻接矩阵存储的方式优点是简单直接(直接用一个二维数组即可),并且,在获取两个顶点之间的关系时也非常高效(直接获取指定位置的数组元素的值即可)。但是吧,这种存储方式的缺点也很明显,那就是比较浪费空间。

3.2 邻接表存储

针对上面邻接矩阵比较浪费内存空间的问题,诞生出了另外一种存储方法--邻接表。

邻接链表使用一个链表来存储某个顶点的所有后继相邻顶点。对于图中每个顶点Vi,把所有邻接于Vi的顶点Vj链成一个单链表,这个单链表称为顶点Vi的邻接表。如下图所示:

可以数一数邻接表中所存储的元素的个数以及图中边的条数:

在无向图中,邻接表元素个数等于边的条数的两倍,如左图所示的无向图中,边的条数为7,邻接表存储的元素个数为14。

在有向图中,邻接表元素个数等于边的条数,边的条数为8,那么邻接表存储的元素个数就为8. 

4 图的搜索 

4.1 广度优先搜索

广度优先搜索是一层一层向外扩展的

广度优先搜索的具体实现方式用到了之前学过的线性数据结构--队列。具体过程如下所示 

4.2 深度优先搜索

深度优先搜索就是从原顶点开始,一直走到没有后继节点,才回溯到上一顶点,然后继续往下走。

 

注意:搜索顺序是不唯一的,如果给出了链表或矩阵的存储方式,如下就是用单链表存储,那么搜索顺序就是固定的。 

 深度优先搜索的具体实现用到了另一种线性数据结构--栈。(队列和栈可以从我线性数据结构一文中了解数据结构秘籍(一)线性数据结构(数组、链表、栈、队列一次看完)-CSDN博客)过程如下:

 

相关文章:

数据结构秘籍(二)图(含图的概念、存储以及图的两大搜索)

1 引言 线性数据结构的元素满足唯一的线性关系,每个元素(初第一个和最后一个外)只有一个直接前趋和一个直接后继。树形数据结构的元素之间有着明显的层次关系。但是图形结构的元素之间的关系是任意的。 什么是图? 简单来说&…...

前端八股——JS+ES6

前端八股:JSES6 说明:个人总结,用于个人复习回顾,将持续改正创作,已在语雀公开,欢迎评论改正。...

Python 课堂点名桌面小程序

一、场景分析 闲来无事,老婆说叫我开发一个课堂点名桌面小程序,给她在课堂随机点名学生问问题。 人生苦短,那就用 Python 给她写一个吧。 二、依赖安装 因为要用到 excel,所以安装两个依赖: pip install openpyxl…...

【Java基础】Java中new一个对象时,JVM到底做了什么?

Java中new一个对象时,JVM到底做了什么? 在Java编程中,new关键字是我们创建对象的最常用方式。但你是否想过,当你写下new MyClass()时,Java虚拟机(JVM)到底在背后做了哪些工作?今天&…...

C#中的字典怎么使用?

在C#中&#xff0c;Dictionary<TKey, TValue> 是一个泛型集合类&#xff0c;用于存储键值对&#xff08;key-value pairs&#xff09;。它提供了快速的查找、插入和删除操作&#xff0c;适合需要根据键快速查找值的场景。以下是 Dictionary 的基本用法和常见操作&#xf…...

vue框架后遗症∶被遗忘的dom操作

用多了vue、react等前端框架&#xff0c;不得不说用数据驱动视图来开发真的很香&#xff0c;但是也免不了会有不用这些框架的项目&#xff0c;dom操作还是很有必要的&#xff0c;一开始学习网页设计的时候就教过&#xff0c;后面一直开发项目基本上用框架。虽然有些想不起来了&…...

进程 ─── linux第10课

目录 回顾上一节 进程 基本概念 描述进程 - PCB task_struct - PCB的一种 task_ struct内容分类 组织进程 下面来介绍task_struct内部 PID 和PPID 子进程与父进程 getpid()和getppid() 杀进程 exe 和 cwd 回顾上一节 1. 如果我们写的程序要访问硬件,必定通过sy…...

线性模型 - 支持向量机

支持向量机&#xff08;SVM&#xff09;是一种用于分类&#xff08;和回归&#xff09;的监督学习算法&#xff0c;其主要目标是找到一个最佳决策超平面&#xff0c;将数据点分为不同的类别&#xff0c;并且使得分类边界与最近的数据点之间的间隔&#xff08;margin&#xff09…...

MyBatis-Plus注解配置:@TableName、@TableId、@TableField

MyBatis-Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus 提供了一系列注解,用于简化数据库表与实体类之间的映射关系。以下是 @TableName、@TableId 和 @TableField 这三个常用注解的配置和使用说明。 官方文档:…...

DeepSeek接入问题-Xshell5连接Ubuntu22失败解决方案

项目场景&#xff1a; deepseek部署常用系统Ubuntu系统&#xff0c; xshell5连接Ubuntu22遇到如下问题&#xff1a; 问题描述 xshell5连接Ubuntu22遇到如下问题&#xff1a; Connecting to 172.16.46.80:22... Could not connect to 172.16.46.80 (port 22): Connection fa…...

论文阅读之基于Syn2Real域的侧扫声纳类水雷目标探测

摘要 由于现实世界数据的稀缺性&#xff0c;基于深度学习的水下水雷探测受到了限制。这种稀缺性导致过拟合&#xff0c;即模型在训练数据上表现良好&#xff0c;但在未见数据上表现不佳。本文提出了一种使用扩散模型的Syn2Real &#xff08;Synthetic to Real&#xff09;域泛…...

【Java】Tomcat日志

Tomcat日志 tomcat 日志的配置文件是tomcat目录下的/conf/logging.properties。 日志输出级别&#xff1a;SEVERE (最高级别) > WARNING > INFO > CONFIG > FINE > FINER(精心) > FINEST (所有内容,最低级别) 日志分类 tomcat 有五类日志 &#xff1a; …...

datalist 是什么?

一、datalist 是什么&#xff1f; datalist 是 HTML5 引入的一个表单相关元素&#xff0c;它本质上是一个为输入框&#xff08;<input>&#xff09;提供预定义选项列表的容器。从外观上看&#xff0c;当用户在与之关联的输入框中进行输入操作时&#xff0c;会自动弹出一个…...

初阶数据结构(C语言实现)——3顺序表和链表(3)

3.链表 3.1 链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表的物理结构 1.从上图可看出&#xff0c;链式结构在逻辑上是连续的&#xff0c;但是在物理上不一定连续…...

Docker 数据卷管理及优化

Docker 数据卷是一个可供容器使用的特殊目录&#xff0c;它绕过了容器的文件系统&#xff0c;直接将数据存储在宿主机上。通过数据卷&#xff0c;可以实现数据的持久化、共享以及独立于容器生命周期的管理。 1.1 为什么要用数据卷 Docker 分层文件系统的特点 性能差&#xff…...

Hi3516CV610车牌识别算法源码之——车牌识别算法初体验

本文讲述如何使用Hi3516CV610开发板读取本地图片&#xff0c;运行车牌识别算法推理&#xff0c;得到车牌信息并打印&#xff1b; 下一篇将介绍Hi3516CV610开发板如何从sensor摄像头获取图像&#xff0c;运行车牌识别算法推理&#xff0c;得到车牌信息并打印&#xff1b; 一、准…...

使用内置命令查看笔记本电池健康状态

如何使用powercfg /batteryreport命令查看笔记本电池健康状态 在Windows系统中&#xff0c;了解笔记本电池的健康状态对于维护电脑性能和预测电池寿命至关重要。Windows 10和Windows 11系统提供了一个内置命令powercfg /batteryreport&#xff0c;可以生成一份详细的电池使用情…...

HONOR荣耀MagicBook 15 2021款 独显(BOD-WXX9,BDR-WFH9HN)原厂Win10系统

适用型号&#xff1a;【BOD-WXX9】 MagicBook 15 2021款 i7 独显 MX450 16GB512GB (BDR-WFE9HN) MagicBook 15 2021款 i5 独显 MX450 16GB512GB (BDR-WFH9HN) MagicBook 15 2021款 i5 集显 16GB512GB (BDR-WFH9HN) 链接&#xff1a;https://pan.baidu.com/s/1S6L57ADS18fnJZ1…...

transformer架构的语言模型保存的内容与格式详解

前文我们已经详细讲述了基于pytorch框架下的transformer架构如何从零开始构建一个小型字符级语言模型,构建过程中涵盖数据准备、模型架构设计、训练、评估与生成的整个流程。我们已经了解了各个部分的细节,而且已经提供了完整的python代码。现在需要了解我们构建好的模型如何…...

win本地vscode通过代理远程链接linux服务器

时间&#xff1a;2025.2.28 1. win本地下载nmap.exe nmap官网 https://nmap.org/或者 https://nmap.org/download#windows下载win版本并安装。 2. vscode插件Remote-SSH 插件下载Remote-SSH 3. 配置 按照图中顺序配置ssh 1.点击左侧工具栏的“小电视”图标 2.点击ssh的…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...