图论理论基础

图论理论基础 | 代码随想录

图的基本概念

二维坐标中,多个点连成的线就构成了图。图也可以是一个节点,甚至没有节点(空图)。

图的种类

整体上一般分为有向图和无向图。

有向图是指图中边是有方向的,无向图是指图中边没有方向。

加权有向图,就是图中边是有权值的。

无向图中有几条边链接该节点,该节点就有几度。

在有向图中,为了区分边的方向,每个节点有出度和入度。

出度:从该节点出发的边的个数。

入读:指向该节点的边的个数。

连通性

在途中表示节点的连通情况。

连通图

在无向图中,任何两个节点都是可以到达的,称之为连通图。

如果有节点不能到达其他节点,则为非连通图。

强连通图

在有向图中,任何两点是可以互相达到的,成为强连通图。

有向图中要注意边的方向,节点1可以到达节点5,但是节点5不能到节点1。

强连通图是在有向图中任何两个节点都可以互相到达。

下面这个图就是一个强连通图。

连通分量

在无向图中,极大连通子图称为该图的一个连通分量。

节点1、2、5和节点2、4、6分别构成两个子图,这个子图中的所有节点都是相互可达到的。二者都是这个无向图的连通分量。但是节点3、4构成的无向图就不是该无向图的连通分量。(必须是极大连通子图才能构成连通分量)

强连通分量

在有向图中极大连通子图称为该图的强连通分量。

 节点1-5构成强连通分量,但是节点6、7、8不构成强连通分量,因为这不是强连通图,节点8不能到达节点6。

节点1、2、5构成的子图也不是强连通分量,因为这不是极大图。

图的构造

一般使用邻接表、邻接矩阵或者用类来表示。

邻接矩阵

用二维数组来表示。

例如:grid[2][5]=6,表示节点2链接节点5为有向图,节点2指向节点5,边的权值为6。

如果想表示无向图,即:grid[2][5]=6, grid[5][2]=6,表示节点2与节点5相互连通,权值为6。

申请n(节点数)的空间,如果边少、节点多的情况,会导致申请过大的二维数组,造成空间浪费。

寻找节点连接情况的时候,需要遍历整个矩阵,n*n的时间复杂度,造成时间浪费。

邻接矩阵的优点:

  • 表达方式简单,易于理解
  • 检查任意两个顶点间是否存在边的操作非常快
  • 适合稠密图,在边数接近顶点数平方的图中,邻接矩阵是一种空间效率较高的表示方法。

缺点:

  • 遇到稀疏图,会导致申请过大的二维数组造成空间浪费 且遍历 边 的时候需要遍历整个n * n矩阵,造成时间浪费

邻接表

邻接表使用数组+链表的方式来表示。邻接表是从边的数量来表示图,有多少边才会申请对应大小的链表。

这里表达的图是:

  • 节点1 指向 节点3 和 节点5
  • 节点2 指向 节点4、节点3、节点5
  • 节点3 指向 节点4
  • 节点4指向节点1

邻接表的优点:

  • 对于稀疏图的存储,只需要存储边,空间利用率高
  • 遍历节点连接情况相对容易

缺点:

  • 检查任意两个节点间是否存在边,效率相对低,需要 O(V)时间,V表示某节点连接其他节点的数量。
  • 实现相对复杂,不易理解

图的遍历方式

图的遍历方式基本是两大类:

  • 深度优先搜索(dfs)
  • 广度优先搜索(bfs)

二叉树的递归遍历,是dfs 在二叉树上的遍历方式。

二叉树的层序遍历,是bfs 在二叉树上的遍历方式。

dfs 和 bfs 一种搜索算法,可以在不同的数据结构上进行搜索,在二叉树章节里是在二叉树这样的数据结构上搜索。

而在图论章节,则是在图(邻接表或邻接矩阵)上进行搜索。

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

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

相关文章

《GPT-4o mini:开启开发与创新的新纪元》

在科技发展的快速进程中,OpenAI 推出的 GPT-4o mini 模型如同一阵春风,给开发者们带来了新的希望和机遇。它以其卓越的性能和极具吸引力的价格,成为了行业内热议的焦点。 当我首次听闻 GPT-4o mini 的消息时,内心充满了好奇与期待…

Pytorch笔记1

建议点赞收藏关注!持续更新至pytorch大部分内容更完。 整体框架如下 目录 gpu加速数据数据结构张量TensorVariable 预处理数据增强 模型构建模块组织复杂网络初始化网络参数定义网络层 损失函数创建损失函数设置损失函数超参数选择损失函数 优化器管理模型参数管理…

【ESP32 IDF 软件模拟SPI驱动 W25Q64存储与读取数组】

目录 SPISPI介绍SPI时序代码编写(spi&w25q64) 代码调试 SPI SPI介绍 SPI(Serial Peripheral Interface,串行外围设备接口)是一种高速、全双工、同步的串行通信总线,常用于微控制器与各种外围设备&…

【React】详解如何获取 DOM 元素

文章目录 一、基础概念1. 什么是DOM?2. 为什么需要获取DOM? 二、使用 ref 获取DOM元素1. 基本概念2. 类组件中的 ref3. 函数组件中的 ref 三、 ref 的进阶用法1. 动态设置 ref2. ref 与函数组件的结合 四、处理特殊情况1. 多个 ref 的处理2. ref 与条件渲…

大数据-49 Redis 缓存问题中 穿透、雪崩、击穿、数据不一致、HotKey、BigKey

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

nginx目录列表美化—rpm安装

目录美化 1. 下载NGINX2. 下载美化工具3. 配置模块4. 主题下载5. 配置文件编写6. 其它问题 1. 下载NGINX RHEL系列的yum源 使用yum源安装如果不能指定版本,请点击跳转nginx的仓库 nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$…

【H.264】H.264详解(二)—— H264视频码流解析示例源码

文章目录 一、前言二、示例源码【1】目录结构【2】Makefile源码【3】h264parser.c源码【4】编译运行【5】源码下载地址 声明:此篇示例源码非原创,原作者雷霄骅。雷霄骅,中国传媒大学通信与信息系统专业博士生,在此向雷霄骅雷神致敬…

【Python机器学习】朴素贝叶斯——条件概率

条件概率 假设现在有一个装了7块石头的罐子(3块灰色,4块黑色),如果从中随机取出一块,灰色的可能性就是3/7,黑色的可能性是4/7。我们使用p(gray)来表示取到灰色石头的概率,其概率值可以通过灰色…

cocos creator 3学习记录01——如何替换图片

一、动态加载本地图片 1、通过将图片关联到CCClass属性上来进行代码切换。 1、这种方法,需要提前在脚本文件中声明好代表图片的CCClass属性。 2、然后拖动图片资源,到脚本内声明好的属性上以进行关联。 3、然后通过程序,来进行切换展示。…

unity2D游戏开发01项目搭建

1新建项目 选择2d模板,设置项目名称和存储位置 在Hierarchy面板右击,create Empty 添加组件 在Project视图中右键新建文件夹 将图片资源拖进来(图片资源在我的下载里面) 点击Player 修改属性,修好如下 点击Sprite Editor 选择第二…

Hadoop3:HDFS的客户端工具Big Data Tools(IDEA版本)

1、安装插件 在Plugins里搜索Big Data Tools 安装完成后,重启IDEA 2、配置Windows环境 主要是配置Hadoop环境,否则无法通过插件远程连接HDFS 1、解压hadoop安装包 2、进入hadoop的bin目录 放入图中标红的两个文件 3、配置hadoop环境变量 新建HAD…

freertos的学习cubemx版

HAL 库的freertos 1 实时 2 任务->线程 3 移植 CMSIS_V2 V1版本 NVIC配置全部是抢占优先级 第四组 抢占级别有 0-15 编码规则, 变量名 :类型前缀, c - char S - int16_t L - int32_t U - unsigned Uc - uint8_t Us - uint…

【游戏制作】使用Python创建一个完整的2048游戏项目

目录 项目运行展示 项目概述 项目目标 项目结构 安装依赖 代码实现 1. 导入库 2. 创建 Game2048 类 3. 设置UI界面 4. 加载二维码图片 5. 创建菜单 6. 游戏逻辑和功能 7. 运行应用 总结 创建一个完整的2048游戏项目 项目运行展示 项目概述 在这个项目中&#xff…

19 Python常用内置函数——range()

range() 是 Python 开发中非常常用的一个内置函数。该函数返回具有惰性求值特点的 range 对象,其中包含左闭右开区间 [start, end) 内以 step 为步长的整数。 参数 start 默认为 0,step 默认为 1。 print(range(5)) print(list(range(5))) print(list(r…

Zenario CMS 9.2 文件上传漏洞(CVE-2022-23043)

前言 CVE-2022-23043 是一个影响 Zenario CMS 9.2 的严重漏洞。该漏洞允许经过身份验证的管理员用户绕过文件上传限制。具体来说,管理员可以通过创建一个新的带有 ".phar" 扩展名的“文件/MIME 类型”,然后上传一个恶意文件。在上传过程中&am…

Java从入门到精通 (十一) ~ 操作系统、进程和线程

无论做什么,请记住都是为你自己而做,这样就毫无怨言!今天,我为自己而活!今天,又是美丽的一天!早安,朋友! 目录 前言 一、操作系统 1. 概念 2. 操作系统的基本功能 3…

FPGA开发——LED流水灯实现先从左往右流水,再从右往左流水

一、概述 我们在设计完一个方向的流水灯的设计时,总是会想实现让流水灯倒着流水回去的设计,这里我也是一样,实现这种设计的方法有很多种,其中就有直接使用case语句将所有可能包含进去编写,这种设计方法是最简单的&…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(四)高斯牛顿法详解

一、高斯牛顿法详解 拓展阅读:高斯牛顿法详解_gauss-newton算法步骤-CSDN博客 1、梯度下降法 ​ ​ ​ 无论一阶泰勒展开,还是二阶泰勒展开都是关于增量​的方程。 2、牛顿法 ​ 这个自变量增量都是可求的。但是二阶求解复杂。因此为了简化有了下…

windows下运行sh文件

1、打开git bash 2、进入sh文件所在文件夹,使用sh xx.sh运行

@RequiredArgsConstructor详解

RequiredArgsConstructor详解 一、什么是RequiredArgsConstructor? RequiredArgsConstructor是Lombok的一个注解,简化了我们对Autowired书写,我们在写Controller层或者Service层的时候,总是需要注入很多mapper接口或者service接口&#xf…