图的基本术语——非八股文

ops/2025/2/5 9:03:32/

        我之前只看到了数据结构算法的冰山一角感觉这些术语只会让知识越来越难理解,现在来看,他们完美抽象一些概念和知识,非常重要。

        本篇概念肯定总结不全,只有遇到的会写上,持续更新,之前文章已经提过的如并查集、最短路径、邻接表等不再重复,这里为补充。


        图形结构中的元素之间存在多对多的联系。

        图形结构中,每一个元素前驱结点可以有多个,后继结点也可以有多个。    

         首先我们肯定都知道图可以分为有向图无向图,它们各自有一些独属于自己的术语和共同的术语,下面这个思维导图帮大家理清一些概念:  


共同术语 

我们先从共同的概念说起 :

  • 完全图:针对有向图无向图,每两个顶点都有一条边(有向图至少 n(n-1) 条边,无向图至少\frac{n(n-1)}{2}条边),如图所示。

  • 稀疏图与稠密图 :根据概念来说,有很少条边或弧(如 e<nlog_2n ,其中e为边的数目,n为顶点的个数)。需要注意的的是,因为这两个概念常用于选择邻接矩阵或邻接表,具体选用要与算法结合。
  • 权和网:权和网可以理解为带权图,在绝大数应用中,每条边应该是带有权重的,权可以表示从一个顶点到另一个顶点的距离、时间或代价等含义。
  • 邻接点:无向图中邻接点是没有方向的,或者称为对称的,假若顶点v 和顶点w 之间存在一条边, 则称顶点v 和w 互为邻接点。在有向图中,邻接点是有方向的,如果存在从顶点到顶点的有向边,那么我们说顶点是顶点的出边邻接点,顶点是顶点的入边邻接点。

无向图

  • 连通:两个顶点有路径。
  • 连通图:任意两个顶点有路径,但不一定都有边。
  • 连通分量:指在无向图中的极大连通子图,如图中的无向非连通图有两个连通分量。

  • 度:顶点v的度是指和v相关联的边的数目;如图中,顶点v的度为3。

有向图

  • 强连通图:任意两个顶点有路径,但不一定都有边。(注意并不一定两个顶点V_iV_j有两条边,只要可以形成环就行。)完全有向图肯定就是强连通图。
  • 强连通分量:有向图中的极大强连通子图称作有向图的强连通分量,如图所示的有向非强连通图有两个强连通分量。

  • 出度和入度:对于有向图,顶点v的度被分为出度和入度,入度是以顶点v为头的的弧数目(箭头指向v),出度就是以顶点v为尾的的弧数目。顶点v的入度为1,出度为2。 

压缩存储

        压缩存储是指在不丢失数据信息的前提下,对数据进行重新编码或组织,以减少数据所占用的存储空间的方法。通过特定的算法数据结构,将原始数据转换为一种更紧凑的表示形式,在需要使用数据时再进行解压缩还原。

        这里主要介绍矩阵的压缩存储。

        对称矩阵

        即a_{i j}=a_{j i},首先我们先回顾一个等差数列的公式:1+2+3+...+n=\frac{n(n+1)}{2}

根据这个公式,我们就可以把一个n维矩阵,用一个一维数组进行存储了。无向图的邻接矩阵就是对称矩阵可用一维数组压缩储存。 

        可以按行主序即下三角存储;或者按列主序即上三角存储。如果我们要找矩阵中位置第i行第j列的元素a_{ij},还是利用上面等差数列公式按行存储和列存储即可搞定。

        三角矩阵

        三角矩阵即只有矩阵的一个三角的数字有意义,对称矩阵就可以理解为三角矩阵,所以三角矩阵的压缩储存与对角矩阵基本一样。

        对角矩阵

        就是只在对角线上存在的元素有意义。 一般分两种方式存储:行序存储和对角线。

        可以将主对角线元素存储在一个一维数组中,通过数组下标与矩阵主对角线元素的对应关系来实现对矩阵元素的访问和操作。例如,对于对角矩阵A的主对角线元素a_{ii},可以存储在一维数组B中,B[i] = a_{ii}

        其它

        另外稀疏矩阵的压缩存储可以用一个三元组表来表示稀疏矩阵中的非0元素。

        稀疏矩阵是指矩阵中绝大多数元素为 0,只有少数非 0 元素的矩阵。为了节省存储空间和提高运算效率,通常采用压缩存储的方式来存储稀疏矩阵,其中一种常见的方法就是用三元组表来表示稀疏矩阵中的非 0 元素。

        三元组表中的每个三元组通常表示为(行标,列标,值),分别记录了稀疏矩阵中每个非 0 元素所在的行、列位置以及该元素的值。通过这种方式,可以只存储稀疏矩阵中的非 0 元素,而不必像常规的二维数组存储方式那样为大量的 0 元素分配存储空间,从而达到压缩存储的目的。例如,对于一个稀疏矩阵:

        可以用三元组表表示为:{(1, 1, 1), (2, 3, 3), (4, 2, 4)}

        除了三元组表,压缩存储稀疏矩阵还可以使用十字链表等其他方法。

参考文献

稠密图与稀疏图判别 - 焓青 - 博客园

数据结构】图的基本概念—无/有向图、权和网、完全图、路径与回路-阿里云开发者社区


http://www.ppmy.cn/ops/155823.html

相关文章

《offer 来了:Java 面试核心知识点精讲 -- 框架篇》(附资源)

继上篇文章介绍了《offer 来了&#xff1a;Java 面试核心知识点精讲 -- 原理篇》书后&#xff0c;本文章再给大家推荐兄弟篇 《offer来了&#xff1a;Java面试核心知识点精讲--框架篇》&#xff0c; 简直就是为Java开发者量身定制的面试神器。 本书是对Java程序员面试中常见的…

directx12 3d开发过程中出现的报错 一

报错&#xff1a;“&”要求左值 “& 要求左值” 这个错误通常是因为你在尝试获取一个临时对象或者右值的地址&#xff0c;而 & 运算符只能用于左值&#xff08;即可以放在赋值语句左边的表达式&#xff0c;代表一个可以被引用的内存位置&#xff09;。 可能出现错…

Java设计模式:行为型模式→状态模式

Java 状态模式详解 1. 定义 状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象在内部状态改变时改变其行为。状态模式通过将状态需要的行为封装在不同的状态类中&#xff0c;实现对象行为的动态改变。该模式的核心思想是分离不同状态…

【C++】C++11

前言 本篇博客我们来看看C11里发展了什么新的东西&#xff0c;跟C98比起来有什么不同 &#x1f493; 个人主页&#xff1a;小张同学zkf ⏩ 文章专栏&#xff1a;C 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 ​ 目录 1.C11的发展历史 …

Baklib在知识管理领域的优势与五款竞争产品的全方位对比分析

内容概要 在现代企业环境中&#xff0c;知识管理的重要性愈发凸显。随着信息技术的快速发展和市场竞争的加剧&#xff0c;企业面临着海量数据和信息的管理挑战。因此&#xff0c;如何有效地集中和利用这些知识资源&#xff0c;就成为了企业提升竞争力的关键所在。Baklib作为一…

BUU13 [极客大挑战 2019]BabySQL 1

题目中过滤了or&#xff0c;需要使用万能密码的变形&#xff08;将or替换成 || &#xff09; 登进去没什么用&#xff0c;我们直接在用户名中输入or,select,union,where,from等词语全被过滤了&#xff0c;那还玩个锤子 网上一搜需要使用双写绕过 我们输入1 || 11 order by 3 …

【高级篇 / IPv6】(7.2) ❀ 04. 在60E上配置ADSL拨号宽带上网(IPv4) ❀ FortiGate 防火墙

【简介】除了单位用户以外&#xff0c;大部分个人用户目前使用的仍然是30E、50E、60E系列防火墙&#xff0c;固件无法达到目前最高版本7.6&#xff0c;这里以最常用的60E为例&#xff0c;演示固件版本7.2下实现ADSL拨号宽带的IPv6上网。由于内容比较多&#xff0c;文章分上、下…

宝塔面板端口转发其它端口至MySQL的3306

最近需要把服务器的MySQL服务开放给外网&#xff0c;但又希望公开给所有人。也不想用默认的3306端口。同时也不想改变MySQL的默认端口。 这时候最好的办法就是用一个不常用的端口来转发至3306上去。例如使用49306至3306&#xff0c;外网通过49306来访问&#xff0c;内网依然使用…