图论基础理论

在我看来,想要掌握图的基础应用,仅需要三步走。

什么是图(基本概念)、图的构造(打地基)、图的遍历方式(应用的基础)

只要能OK的掌握这三步、就算图论入门了!!!

当然新手也不要恐惧啥的,新知识嘛,就是需要一个接受的过程。

学术上,是这么称图的: 

图由顶点(Vertex)集合和(Edge)集合组成,通常表示G(v,e)

当然,这太学术了(~﹃~)~zZ

换句话说,图,就是由顶点与边组成的。

顶点就是各个节点。边就是各个节点的关系or性质。

基本概念:

首先就是图的种类,毕竟人还分不同肤色呢,就更不用说图了。

图分无向图有向图

无向图,边之间没有方向。

有向图,边之间存在方向。

接下来,咱们讲讲的概念。他在有向图与无向图中,分别有不同的含义。

无向图中,只有统一的 “”(因为边无方向)

:与该节点有几条边相邻。

如图,节点1,有4条边与其相连。故度为4。

有向图中,他分别是出度入度总度

出度: 指向其他节点的边。

入度: 其他节点指向本节点的边。

总度: 出度+入度的总和。

如图,节点1:出度(3)、入度(1)、总度(3+1=4)

接下来就讲到,连通图强连通图的概念。

连通图是 图中的概念。意思是每个节点之间,都能相互到达。

但是如果节点之间,无法相互抵达,就是非连通图

如下所示,左侧每个节点之间,都能相互到达,为连通图,而右侧不是却不能。为非连通图。

强连通图同样也是每个节点之间,都能相互抵达,但是有个前提条件,必须按照边的方向。

如图左侧,直接形成了闭环。故为 强连通图。

而图的右侧,为非强连通图(举例:节点4 无法到达 节点3)

构造:

有三种构造方式。

拓扑储存邻接矩阵邻接表

拓扑储存,虽然是Carl自创的名字,但我挺认同的(。・ω・。)

如图,一共有8个节点,如果,想要将这8个节点储存,需要8*2个单位。

如果存在二维数组中,大概需要建立一个二维数组储存。

但是这样的前提是,想要遍历所有内容非常麻烦。(用map储存,用的是同样的效果)

邻接矩阵

邻接矩阵,通过二维数组来储存。是从节点的角度来考虑的。有多大的节点,就分配,其平方大的数组。

如图grid[2][5]=6,代表节点2与节点5之间,有一条节点,权值为6;

在有向图中,grid[2][5]=6 表示为,节点2指向节点6;

在无向图中,若向表示2与5之间有节点。grid[2][5]=6、grid[5][2]=6。

这样联动着表示。

优点:可以迅速查询,两点直接是否有联通。

缺点:适用于稠密图,若果节点变很少,会造成空间极大的浪费。

邻接表

邻接表是通过,数组+链表来储存的。

优点:需要多少边,就申请多少节点。

缺点:若要查询两点之间,是否连通。无法很快查询到。

应用:

其实最后一部分,叫做图的遍历方式更好。

但为啥叫做应用呢,图的应用不就是图的遍历吗,通过各种遍历解决问题。

图的遍历方式大概分为两大类:

深度优先搜索(DFS),与广度优先搜索(BFS)

其实图的遍历方式与树的遍历方式大差不差。

主要还是需要借助实战。

从下一篇博客,就要开始实战喽。

注意⚠️⚠️⚠️,用Carl的话说,图论是非常庞大的知识体系,以上只是一小部分理论基础。

更多的,还是要考刷题积累。

接下来,我们要面对,深度优先搜索(dfs)、广度优先搜索(bfs)、并查集、拓扑排序、最小生成树系列、最短路径系列....热血沸腾吧!


借鉴博客:

1、图论理论基础


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

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

相关文章

详细解读react框架中的hooks

React Hooks 是 React 16.8 引入的一项革命性特性,它允许你在函数组件中使用状态(state)和其他 React 特性,而无需编写 class 组件。下面将详细解读 React Hooks 的核心概念、常用 Hooks 及其工作原理。 一、Hooks 的核心概念 1. 什么是 Hooks Hooks …

主机IP动态变化时如何通过固定host.docker.internal访问本机服务

场景需求——主机IP动态变化时,通过固定的 http://host.docker.internal:11555 访问本机服务,核心问题在于 host.docker.internal 的解析逻辑与动态IP的适配。以下是分步解决方案: 一、核心原理:host.docker.internal 的本质与局…

插值算法 - 最近邻插值实现

目录 1. 导入必要的库 2. nearest_neighbor_interpolation 3. 测试代码 数学原理 完整代码 本文实现了基于最近邻插值算法的图像缩放功能。 它使用 Python 编写,主要依赖于NumPy和PIL(Python Imaging Library)库。 NumPy用于高效的数值计算,而PIL仅用于图像的加载和…

windows中搭建Ubuntu子系统

windows中搭建虚拟环境 1.配置2.windows中搭建Ubuntu子系统2.1windows配置2.1.1 确认启用私有化2.1.2 将wsl2设置为默认版本2.1.3 确认开启相关配置2.1.4重启windows以加载更改配置 2.2 搭建Ubuntu子系统2.2.1 下载Ubuntu2.2.2 迁移位置 3.Ubuntu子系统搭建docker环境3.1安装do…

MySQL事务机制

目录 原子性 持久性 隔离性 隔离级别(并发事务之间的关系) 读未提交 读已提交 可重复读 串行化(最严格的隔离级别) 一致性 问题 不可重复读性(已经提交的数据) 什么是脏读问题(未提交的数据)? 幻读 保存点 自动提交机制--autocommit 会话隔离级别与全局隔离级…

Cadence学习笔记之---直插元件的封装制作

目录 01 | 引 言 02 | 环境描述 03 | 操作步骤 04 | 结 语 01 | 引 言 在之前发布的Cadence小记中,已经讲述了怎样制作热风焊盘,贴片(SMD)焊盘、通孔、过孔,以及贴片元件的封装。 本篇关于Cadence的小记主要讲如何制作直插元件的封装。 …

【第四十周】文献阅读:用于检索-增强大语言模型的查询与重写

目录 摘要Abstract用于检索-增强大语言模型的查询与重写研究背景方法论基于冻结LLM的重写方案基于可训练重写器的方案重写器预热训练(Rewriter Warm-up)强化学习(Reinforcement Learning) 创新性实验结果局限性总结 摘要 这篇论文…

java学习总结(if switch for)

一.基本结构 1.单分支if int num 10; if (num > 5) {System.out.println("num 大于 5"); } 2.双分支if-else int score 60; if (score > 60) {System.out.println("及格"); } else {System.out.println("不及格"); } 3.多分支 int…

yum的基本操作和vim指令

在我们的手机端或者Windows上下载软件,可以在相应的应用商店或者官网进行下载,这样对于用户来说十分的方便和便捷。而在Linux上,也有类似的安装方式,我们来一一了解一下。 Linux安装软件的3种方法 源代码安装 在Linux下安装软件…

C++ CUDA开发入门

CUDA开发笔记 文章目录 CUDA开发笔记[toc]1 概述2 环境3 命令行编译4 CMAKE引入CUDA5 vscode开发CUDA6 Qt中使用CUDA-CMake7 QMake配置CUDA8 核函数9 核函数调用9.1 核函数调用语法9.2 执行配置参数详解9.3 关键调用步骤9.4 重要注意事项9.5 调用示例分析9.6 最佳实践建议 10 线…

llm开发框架新秀

原文链接:https://i68.ltd/notes/posts/20250404-llm-framework3/ google开源ADK-Agent Development Kit 开源的、代码优先的 Python 工具包,用于构建、评估和部署具有灵活性和控制力的复杂智能体项目仓库:https://github.com/google/adk-python 2.6k项目文档:Age…

VM——相机拍照失败

1、问题:相机频闪触发,在MVS中正常出图,在VM中出现拍照失败 2、解决: 1、首先排查网络设置(巨帧是否设置) 2、电脑的所有防火墙是否关闭 3、在MVS中恢复相机的设置参数为默认参数,删除VM中的全…

【时频谱分析】小波分析

算法配置页面,也可以一键导出结果数据 报表自定义绘制 获取和下载【PHM学习软件PHM源码】的方式 获取方式:Docshttps://jcn362s9p4t8.feishu.cn/wiki/A0NXwPxY3ie1cGkOy08cru6vnvc

怎么免费下载GLTF/GLB格式模型文件,还可以在线编辑修改

​ 现在非常流行glb格式模型,和gltf格式文件,可是之类模型网站非常非常少 1,咱们先直接打开http://glbxz.com 官方glb下载网站 glbxz.com 2 可以搜索,自己想要的模型关键词 3,到自己想下载素材页面 4,…

【6】深入学习http模块(万字)-Nodejs开发入门

深入学习http模块 前言http一个Web服务器项目创建代码运行代码解析 Server属性:keepAlive属性:keepAliveTimeout属性:maxHeaderSize属性:requestTimeout属性:maxRequestsPerSocket方法:close()方法&#xf…

buuctf sql注入类练习

BUU SQL COURSE 1 1 实例无法访问 / Instance cant be reached at that time | BUUCTF但是这个地方很迷惑就是这个 一个 # 我们不抓包就不知道这个是sql注入类的判断是 get 类型的sql注入直接使用sqlmap我们放入到1.txt中 目的是 优先检测 ?id1>python3 sqlmap.py -r 1.t…

(即插即用模块-特征处理部分) 三十二、(TGRS 2024) MDAF 多尺度双表示对齐过滤器

文章目录 1、Multiscale Dual-Representation Alignment Filter2、代码实现 paper:SFFNet: A Wavelet-Based Spatial and Frequency Domain Fusion Network for Remote Sensing Segmentation Code:https://github.com/yysdck/SFFNet 1、Multiscale Dual-…

Python 中为什么 hash(-1) == hash(-2)?

推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 让我们从哪里开始?获取源代码!让我们浏览一下这是正确/完整的答案吗?结论前几天在浏览 Reddit 时,我在 r/Python 上看到了这样一个…

基于PySide6与pycatia的CATIA绘图比例智能调节工具开发全解析

引言:工程图纸自动化处理的技术革新 在机械设计领域,CATIA图纸的比例调整是高频且重复性极强的操作。传统手动调整方式效率低下且易出错。本文基于PySide6pycatia技术栈,提出一种支持智能比例匹配、实时视图控制、异常自处理的图纸批处理方案…

macos下 ragflow二次开发环境搭建

参考官网链接 https://ragflow.io/docs/dev/launch_ragflow_from_source虚拟环境 git clone https://github.com/infiniflow/ragflow.git cd ragflow/ # if not pipx, please install it at first pip3 install pipxpipx install uv uv sync --python 3.10 --all-extras 安装 …