图 —— 基础概念详解

news2024/11/17 6:00:15

文章目录

  • 前言
  • 1. 顶点、边、阶
  • 2. 无向图、有向图、简单图、多重图、完全图
    • 🍑 无向图
    • 🍑 有向图
    • 🍑 简单图
    • 🍑 多重图
    • 🍑 完全图
  • 3. 顶点的度、入度、出度
  • 4. 顶点之间的关系、路径、边
  • 5. 连通图、子图
  • 6. 生成树、生成森林
  • 7. 树、有向树
  • 8. 总结


前言

图这种数据结构比树更加复杂,树形结构中的节点或者说数据之间有明显的层次关系,一个父节点可以有多个子节点,当然,一个子节点只能有唯一的父节点。但在图形结构中,节点之间可以有任意的关系,即任意两个数据都可能相关。

关于图的话,涉及的概念和术语比较多,需要反复记住。

图的基本概念:

在这里插入图片描述

重要知识点:

在这里插入图片描述

1. 顶点、边、阶

在图中,数据元素被称为 顶点,和在树中将数据元素称为节点是有区别的,用 v(Vertex)表示。不同的顶点之间的连线称为 ,用 e(Edge)表示。

图(Graph)是由顶点的 有穷非空 集合和顶点之间的连线(边)的集合组成。通常表示为 G=(V, E),其中 G 表示一个图,V(G) 代表图 G 中的顶点集合,E(G) 代表图 G 中的边集合。

|V| 表示图 G 中顶点个数,也称为图 G 的阶。

|E| 表示图 G 中边的条数。

下图所示就是一个图,其中 A、B、C、D、E、F 是顶点。

在这里插入图片描述

注意:图不可以为空,换句话说,顶点集合 V 不可以为空集。而边集合 E 可以为空,所以,下图 2 所示也是一个图。

在这里插入图片描述

2. 无向图、有向图、简单图、多重图、完全图

🍑 无向图

上面介绍的图中的边是没有方向的,这种边就叫做 无向边(简称边)。

如果图中任意两个顶点之间的边都是无向边,则称该图为 无向图

如下图所示:

在这里插入图片描述

对于无向图,只要两个顶点之间有一条边,则这两个顶点之间可以互相到达。

上图中,连接顶点 A 与 B 之间的边因为不存在方向问题,因此可以表示为无序对 (A,B) 或者 (B,A)

注意:这里用的是 圆括号 表示无向边。

🍑 有向图

当然,从一个顶点到另外一个顶点的边也可以是有方向的,这种边称为 有向边,也称为

如果图中任意两个顶点之间的边都是有向边,则称该图为 有向图

如下图所示:

在这里插入图片描述

在上图中,顶点 A 到 B 之间存在一条有向边(从 A 指向 B 的箭头),这表示从顶点 A 可以到达顶点 B,但因为顶点 B 到顶点 A 之间并不存在有向边,所以从顶点 B 不可以到达顶点 A。

这里你可以设想一下 CSDN 用户之间的关系。你关注喜欢的用户之后,可以看到对方发的文章,但这并不等于人家也关注了你,如果对方没有关注你,那也看不到你发的文章。

顶点 A 到顶点 B 的有向边(箭头)就是弧。箭头开始的顶点 A 叫 弧尾,箭头指向的顶点 B 叫 弧头。这条弧可以用 <A,B> 表示,注意这里用的是 尖括号 表示有向边。另外还需要注意方向,不可以写成 <B,A>

🍑 简单图

图中若不存在 顶点到其自身 的边,并且同一条边 不会重复 出现,这种图称为 简单图

简单图分为:简单无向图和简单有向图。

🍑 多重图

图中某两个顶点之间的边数多于一条,或者顶点通过一条边和自己关联,这种图称为 多重图

多重图分为:多重无向图和多重有向图。

如下如图 4 所示:

在这里插入图片描述

数据结构中所讨论的图都是 简单图,多重图不在讨论之中。基本上,绝大部分问题通过简单图都可以得到解决,比如 CSDN 中不需要自己加自己为好友,也不需要加同一个人多次好友。

🍑 完全图

在无向图中,如果任意两个顶点之间都存在边,则称该图为 无向完全图

如下图所示:

在这里插入图片描述

仔细观察后会发现,含有 n 个顶点的无向完全图有 n ( n − 1 ) / 2 n(n−1)/2 n(n1)/2 ​条边

比上图中,一共有 5 个顶点,每个顶点有 4 条边,所以一共有 20 条边,但因为边是两两重复的,比如顶点 A 与顶点 B 的边也是顶点 B 与顶点 A 的边,所以边数要除以 2 也就是 20 / 2 = 10 20/2=10 20/2=10 条边。

在有向图中,如果任意两个顶点之间都存在方向相反的两条弧,则称该图为 有向完全图

如下图所示:

在这里插入图片描述

从上图中不难看出,含有 5 个顶点的有向完全图含有 20 条边,因此,含有 n 个顶点的有向完全图有 n ( n − 1 ) n(n-1) n(n1) 条边

有很少条边或者弧的图称为稀疏图,反之称为稠密图。这里稀疏和稠密都是相对而言的,并不是一个精确的数值。

3. 顶点的度、入度、出度

在无向图中,顶点 v 的度(Degree)是和 v 相关联的边的数目,记为 TD(v)。

比如下图中,顶点 A 的度为 3。

深入思考一下,无向图中,因为一条边可以给与这条边相连接的两个顶点分别提供 1 度,所以,无向图中所有顶点的度之和就应该是边数 * 2,即 2|E|

在这里插入图片描述

在有向图中,以顶点 v 为终点(箭头指向 v)的有向边的数目称为顶点 v 的 入度(InDegree),记为 ID(v)。

以顶点 v 为起点的有向边的数目称为顶点 v 的 出度(OutDegree),记为 OD(v)。

所以,有向图中顶点 v 的度等于其 入度和出度之和,既 TD(v)=ID(v)+OD(v)

比如下图中,顶点 A 的入度为 1,出度为 3,所以顶点 A 的度为 4。

有向图中,因为一条边可以给与这条边相连接的两个顶点分别提供 1 出度和 1 入度,所以 有向图所有顶点的入度之和与出度之和相等并且等于弧的数量。

在这里插入图片描述

4. 顶点之间的关系、路径、边

顶点 v m v_m vm​ 和顶点 v n v_n vn​ 的路径是一个顶点序列 v m ​ , v 1 ​ , v 2 ​ , v 3 ​ , … … v n ​ v_m​,v_1​,v_2​,v_3​,……v_n​ vm,v1,v2,v3,……vn,该序列中的顶点属于图中的顶点集合。

两个顶点的路径并不唯一,下图展示了无向图中从顶点 B 到 D 四种不同的路径,如粗线条所示(当然还有更多)。

在这里插入图片描述

这里注意,对于有向图,路径也是有向的,下图展示了有向图中从顶点 A 到顶点 D 的两种不同路径。而对于 B 到 A 之间就不存在路径。

在这里插入图片描述

我们把第一个顶点和最后一个顶点相同的路径称为回路或环。如下图所示:

在这里插入图片描述

这么多的路径,其实也是涉及了一些专有名词的。

(1)简单路径

定义:在路径序列中顶点不重复出现的路径称为简单路径。

下图中,从顶点 A 到顶点 D 可以有多种不同路径,比如 A、B、A、D 这个路径,因为顶点 A 重复出现了,所以这就不是一个简单路径。

在这里插入图片描述

(2)简单回路 / 简单环

定义:除第一个顶点和最后一个顶点,其余顶点不重复出现的回路叫简单回路或简单环。

(3)路径长度

定义:路径上的边或弧的数目。

下图中的四幅图路径长度分别为 1、2、2、3

在这里插入图片描述

这幅图中的两幅图路径长度分别为 3、1。

在这里插入图片描述

(2)点到点的距离

定义:从顶点 v m v_m vm​ 到 v n v_n vn​ 的 最短路径 如果存在,则此路径的长度称为从顶点 v m v_m vm​ 到 v n v_n vn​ 的距离,如果 v m v_m vm​ 到 v n v_n vn​ 之间不存在路径,则称他们之间的距离为 无穷(∞)

无向图中,若从顶点 v m v_m vm​ 到 v n v_n vn​ 之间有路径存在,则称 v m v_m vm​ 和 v n v_n vn​ 是 连通 的。

下图中,顶点 F 与其他顶点之间不连通,而除 F 外的其他顶点是彼此连通的。

在这里插入图片描述

有向图中,若从顶点 v m v_m vm​ 到 v n v_n vn​ 之间和从顶点 v n v_n vn​ 到 v m ​ v_m​ vm 之间都有路径,则称这两个 顶点是强连通 的。

下图中,顶点 A 和 D 之间就是强连通的,而顶点 A 和 B 之间就不是强连通的,因为从 B 到 A 不存在路径。

在这里插入图片描述

有些图的边或弧有与其相关的数字,这种与图的边或者弧相关的数字叫 (Weight)或者 权值

这些权值可以表示从一个顶点到另一个顶点的距离、时间、票价等数据。

这种带权的图通常称为 带权图

如下图所示:

在这里插入图片描述

5. 连通图、子图

局部的顶点、边了解完之后,我们再将视角放大,着眼于整张图。

如果 无向图 中任意两个顶点都是连通的,则称图为 连通图,否则称为 非连通图

比如下图就是一个连通图。

在这里插入图片描述

因此得出几个结论:

  • 对于具有 n 个顶点的无向图,如果是连通图,则最少要有 n-1 条边
  • 对于具有 n 个顶点的无向图,如果是非连通图,则最多只能有 ( n − 1 ) ( n − 2 ) / 2 (n−1)(n−2)/2 (n1)(n2)/2 ​条边

如何推出这个结论呢?

试想一下,含有 n 个顶点的无向完全图有 n ( n − 1 ) / 2 n(n−1)/2 n(n1)/2​ 条边,比如含有 5 个顶点的无向完全图有 10 条边,那么如果再增加进来一个顶点变成 6 个顶点,现在只要将这个新增加的顶点和任意其他顶点连线,就构成了连通图,所以 6 个顶点的非连通图最多只能有 10 条边。

如果 有向图 中任意一对顶点都是强连通的呢?那我们称此图为 强连通图

如下图所示:

在这里插入图片描述

不难想象,对于有 n 个顶点的有向图,若是强连通图,则最少要有 n 条边以构成回路,如下图所示:

在这里插入图片描述

我们假设有图 1 和图 2 两个图,如果图 2 的顶点是图 1 的顶点的子集,并且图 2 的边是图 1 边的子集,则称图 2 是图 1 的 子图

如果子图包含原图的所有顶点,则称该子图为原图的一个 生成子图

下图所示,从第 2 个图开始的图都是第 1 个图的子图,而最后一个子图是原图的生成子图。

在这里插入图片描述

连通分量: 无向图中的极大连通子图称为连通分量。

换句话说,极大连通子图必须连通并且包含尽可能多的顶点和边,如下图所示:

在这里插入图片描述

举个例子,全国各个城市的地铁网,比如上海地铁网是全国地铁网的连通分量,深圳地铁网是全国地铁网的连通分量,诸如此类。

强连通分量: 有向图中的极大强连通子图称为强连通分量。这里的强连通意味着两两可达。如下图所示:

在这里插入图片描述

6. 生成树、生成森林

一个无向的连通图的生成树是包含图中全部顶点的一个极小的连通子图。

这里的极小指边尽可能要少,如下图所示:

在这里插入图片描述

从上图可以看到,无向连通图的生成树可以有多个,生成树中如果有 n 个顶点,则必须有 n-1 条边。因为我们前面说过,n 个顶点的无向图,如果是连通图,则最少要有 n-1 条边。

话说回来:

  • 如果一个无向图有 n 个顶点和小于 n-1 条边,则肯定是非连通图
  • 如果它多于 n-1 条边,则一定有回路(环)
  • 但有 n-1 条边的图不一定是生成树,因为生成树要求连通

你可以想象一下通往各个城市的道路铺设场景,其中就可以用到生成树。

生成树 既可以保证各个城市之间彼此都可以到达,又可以保证铺设的道路尽可能少,而后可以在多个生成树中挑选最优的生成树方案。

比如如果想最节省成本,就可以把修每段路(边)的价格作为权值来计算总成本并最终挑选出总成本最少的修路方案。

如下图所示:

在这里插入图片描述

当图是带权图时,一条路径上所有边的权值之和称为 带权路径长度

在无向非连通图中,连通分量的生成树构成了无向非连通图的生成森林。

如下图所示:

在这里插入图片描述

7. 树、有向树

在无向图中,树是连通且不存在回路的。

如下图所示:

在这里插入图片描述

从上图可以看到,以 E、A 为根向下绘制看起来更像一棵树,当然,以任何其他顶点为根都是可以的。

注意:具有 n 个顶点的树,必然会有 n-1 条边,否则一定会是有回路的

而在有向图中,一个顶点的入度为 0,其余顶点的入度均为 1,称为 有向树

如下图所示:

在这里插入图片描述

上图就是有向树,其中入度为 0 的顶点可以当做树的根,所以顶点 E 作为根。

8. 总结

关于图的概念不少,可以这篇文章的内容分成几个主题,把主题以及主题中一些比较重要的文字列举出来作为线索,然后重点理解和记忆。

主题一:顶点、边、阶

主题二:无向图、有向图、简单图、多重图、完全图

  • 含有 n 个顶点的无向完全图有 n ( n − 1 ) / 2 n(n−1)/2 n(n1)/2​ 条边。
  • 含有 n 个顶点的有向完全图有 n ( n − 1 ) n(n-1) n(n1) 条边。

主题三:顶点的度、入度、出度

  • 无向图中所有顶点的度之和是边数 * 2,即 2|E|
  • 有向图所有顶点的 入度之和出度之和 相等,并且等于 弧的数量

主题四:顶点之间的关系、路径、边

主题五:连通图、子图

  • 对于具有 n 个顶点的无向图,如果是连通图,则最少要有 n − 1 n-1 n1 条边。
  • 对于具有 n 个顶点的无向图,如果是非连通图,则最多只能有 ( n − 1 ) ( n − 2 ) / 2 (n−1)(n−2)/2 (n1)(n2)/2​ 条边。
  • 对于有 n 个顶点的有向图,若是强连通图,则最少要有 n 条边以构成回路。

主题六:生成树、生成森林

  • 如果一个无向图有 n 个顶点和小于 n-1 条边,则肯定是非连通图。
  • 如果它多于 n-1 条边,则一定有回路(环)。

主题七:树、有向树

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bazel远程构建(Remote Execution)

原理 既然 ActionResult 可以被不同的 Bazel 任务共享&#xff0c;说明 ActionResult 和 Action 在哪里执行并没有关系。因此&#xff0c;Bazel 在构建时&#xff0c;可以把 Action 发送给另一台服务器执行&#xff0c;对方执行完&#xff0c;向 CAS 上传 ActionResult&#x…

ESLint 中的“ space-before-function-paren ”相关报错及其解决方案

ESLint 中的“ space-before-function-paren ”相关报错及其解决方案 出现的问题及其报错&#xff1a; 在 VScode 中&#xff0c;在使用带有 ESLint 工具的项目中&#xff0c;保存会发现报错&#xff0c;并且修改好代码格式后&#xff0c;保存会发现代码格式依然出现问题&…

SpringBoot 整合 RabbitMQ

1. 创建 SpringBoot 工程 把版本改为 2.7.14 引入这两个依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springfr…

在Mac 上安装flutter 遇到的问题

准备工作 1、升级Macos系统为最新系统 2、安装最新的Xcode 3、电脑上面需要安装brew https://brew.sh/ 4、安装chrome浏览器(开发web用) 下载Flutter、配置Flutter环境变量、配置Flutter镜像 下载Flutter SDK https://docs.flutter.dev/release/archive?tabmacos 根据自己…

吐槽丨为什么我依然喜欢用旧版UWP网易云音乐

实在忍不住吐槽一下 左侧&#xff1a;网易云音乐 真UWP版&#xff0c;UI间距宽松&#xff0c;页面清爽。 右侧&#xff1a;网易云音乐 假PC移植版&#xff0c;文字密集&#xff0c;显得杂乱无章&#xff0c;列表行距太窄。 左侧&#xff1a;真UWP版页面UI自适配&#xff0c;随…

GEEMAP 基本操作(三)如何对图像进行 3D 叠加显示 (图像混合 blend)

最近在 GIS 界有很多大神在讨论如何将图像下面混合一幅地形数据&#xff0c;这样看起来是 3D 的比较酷炫。 比如这样&#xff1a; 以上图片来自网络&#xff0c;是在专业软件中制作的。 GEEMAP 中是否可行呢&#xff1f;当然没问题&#xff0c;使用 blend 即可。下面的例子请笑…

Flutter启动页

效果图 import dart:async; import package:flutter/cupertino.dart; import package:flutter/material.dart; import jumpPage.dart;class TransitPage extends StatefulWidget {const TransitPage({super.key});overrideState<TransitPage> createState() > _Trans…

Gateway的服务网关

Gateway服务网关 Gateway网关是我们服务的守门神&#xff0c;所有微服务的统一入口。 网关的核心功能特性&#xff1a; 请求路由 权限控制 限流 架构如下&#xff1a; gateway使用 引入依赖 创建gateway服务&#xff0c;引入依赖 <!--网关--> <dependency>…

PHP8的数组-PHP8知识详解

今天开始学习数组&#xff0c; 本文主要讲了三点&#xff1a;什么是数组、php8中数组的改进、数组函数。 一、什么是数组 在PHP8中&#xff0c;数组是非常重要的数据类型。相对于其他的数据类型&#xff0c;数组更像一种结构&#xff0c;而这种结构可以储存一系列数值。 数组…

ETLCloud制造业轻量级数据中台解决方案

制造业数据处理特点 制造业在业务发展过程中产生大量的业务交易数据以及设备运行过程中的状态数据&#xff0c;但是制造业有别于其他互联网或零售行业&#xff0c;其数据处理具有以下特点&#xff1a; 数据量不大&#xff0c;大部分业务系统的数据库表在1000W以下数据结构复杂…

数据指标体系峰会——构建与应用

京东物流指标体系 流量指标体系 如何构建和应用指标体系 落地关键保障与举措 数据标准化&#xff0c;一致化比较困难。 火山引擎抖音集团指标分析与增长实践指南 实践Case 指标分析方法 策略假设方法论 《测出转化率》 lift模型 紧急度&#xff1a; 外部驱动&#xff…

华为OD机试 - 敏感字段加密(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》…

敦煌网、newegg店铺优化三大方法,测评补单原来可以这样做

我们都知道敦煌网、newegg流量是一个店铺的血液&#xff0c;没有流量的支撑&#xff0c;其他也都将成为浮云。流量能够成为转化率的保证&#xff0c;如何让店铺拥有傲人的流量成为重要之重&#xff0c;店铺的流量又主要来源于以下几部分&#xff1a; 一、主要流量的来源 1.搜索…

【探索SpringCloud】服务发现-Nacos服务端数据结构和模型

前言 上一文中&#xff0c;我们从官方的图示了解到Nacos的服务数据结构。但我关心的是&#xff0c;Nacos2.x不是重构了吗&#xff1f;怎么还是这种数据结构&#xff1f;我推测&#xff0c;必然是为了对Nacos1.x的兼容&#xff0c;实际存储应该不是这样的。于是&#xff0c;沿着…

JAVA设计模式3:抽象工厂模式,这是一种创建型设计模式

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;3年JAVA全栈开发经验&#xff0c;专注JAVA技术、系统定制、远程指导&#xff0c;致力于企业数字化转型&#xff0c;CSDN学院、蓝桥云课认证讲师。 主打方向&#xff1a;Vue、SpringBoot、微信小程序 本文讲解了 Java 设…

嵌入式BL304可提供4路RS485/RS232口

BL304网关具有多功能的数据通信和处理设备&#xff0c;具有多种输入和输出接口&#xff0c;支持多种操作系统和应用程序&#xff0c;以及数据库连接。下面我们将详细介绍该产品的特点和功能。 设备提供了多路RS485/RS232接口、CAN口、网口、DI口、PWM口输出以及USB接口&#xf…

算法面试-深度学习基础面试题整理(2023.8.29开始,每天下午持续更新....)

一、无监督相关&#xff08;聚类、异常检测&#xff09; 1、常见的距离度量方法有哪些&#xff1f;写一下距离计算公式。 1&#xff09;连续数据的距离计算&#xff1a; 闵可夫斯基距离家族&#xff1a; 当p 1时&#xff0c;为曼哈顿距离&#xff1b;p 2时&#xff0c;为欧…

天津专业大数据培训班 教你分析大数据行业前景

大数据分析是IT行业挺火的词汇&#xff0c;围绕大数据分析产生的数据仓库、数据安全、数据挖掘等商业价值也渐渐地被挖掘了出来&#xff0c;大数据时代渐渐来临...... 大数据是什么 随着科技的发展&#xff0c;尤其是互联网的深入&#xff0c;新兴了大数据这个行业&#xff0…

无涯教程-JavaScript - LOGINV函数

LOGINV函数替代Excel 2010中的LOGNORM.INV函数。 描述 该函数返回x的对数正态累积分布函数的逆函数,其中ln(x)的分布通常带有参数mean和standard_dev。 如果pLOGNORMDIST(x,...),则LOGINV(p,...) x 使用对数正态分布来分析对数转换的数据。 语法 LOGINV (probability, me…

软件项目验收测试流程

软件系统验收测试 软件项目验收测试是对系统进行全面的测试&#xff0c;以验证其是否符合合同要求&#xff0c;出具第三方测试报告&#xff0c;为系统验收提供依据。 软件产品验收测试一直以来被用于不同的技术和方法中&#xff0c;有时指的是同一个概念&#xff0c;有时也可…