数据结构与算法--图的应用
文章目录
- 回顾
- 提要
- 连通图
- 生成树
- 最小生成树
- 构造最小生成树的算法
- 普里姆(Prim)算法
- 克鲁斯卡尔(Kruskal)算法
- 最短路径
- 狄杰斯特拉 (Dijkstra) 算法
- 当前最短路径的更新
- 拓扑排序
- 拓扑排序方法
- 拓扑排序示例
- 总结
回顾
图的遍历方法:
- 深度优先遍历 (DFS):从任意顶点开始,访问其未访问过的邻接点,直至全部访问完毕。
- 广度优先遍历 (BFS):从任意顶点开始,访问其所有未访问过的邻接点,然后是下一层的邻接点,直至所有顶点被访问。
提要
- 最小生成树的概念。
- 最小生成树的构造算法:
- 普里姆 (Prim) 算法
- 克鲁斯卡尔 (Kruskal) 算法
- 单源点最短路径。
- 拓扑排序。
连通图
连通图:图中任意两个顶点都是连通的。在连通图中,从任意顶点出发进行深度优先遍历或广度优先遍历,都可以访问图中所有其他顶点。

生成树
生成树:包含连通图全部顶点的极小连通子图,即以最少的边连接连通图中所有的顶点。


最小生成树
最小生成树:带权连通图的所有生成树中权值之和最小的生成树。在实际问题中,如管道铺设问题,可以应用最小生成树来最小化成本。
最小生成树:带权连通图的所有生成树中权值之和最小的生成树。
在实际问题中的应用:管道的铺设问题。
n 个小区只需铺设 n-1 条管线就能连通,各条管线的投资成本不同,如何使得总的投资成本最低?最小生成树。

构造最小生成树的算法
- 普里姆 (Prim) 算法:从任一顶点开始,逐步扩展最小生成树,每次添加权值最小的边。
- 克鲁斯卡尔 (Kruskal) 算法:按边权值从小到大的顺序选择边,形成最小生成树,不形成环。
普里姆(Prim)算法

示例:
求解过程:
- 初始化U={v}。v到其他顶点的所有边为候选边;
- 重复以下步骤n-1次,使得其他n-1个顶点被加入到U中:
- 从候选边中挑选权值最小的边输出,设该边在V-U中的顶点是k,将k加入U中;
- 考察当前V-U中的所有顶点j,修改候选边:若 (k, j) 的权值小于原来和顶点 j 关联的候选边,则用 (k, j) 取代后者作为候选边。
克鲁斯卡尔(Kruskal)算法
假设N=(V,E)是连通网(带权的图),令最小生成树的初始状态为包含全部n个顶点,但没有边的非连通图T=(V,{ }),图中每个顶点自成一个连通分量。
在E中选择权值最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条权值最小的边。依此类推,直至所有顶点都在同一连通分量上为止。
示例:
求解过程:
- T的初始状态:包含n个顶点、不包含边的森林:T=(V,Ø );
- 按权值递增的顺序选择E中的n-1条安全边(u,v),并加入T;
- 安全边指两个顶点分别是森林T里两棵树中的顶点的边。安全边的加入,不会形成环。加入安全边,可将森林中的两棵树连接成一棵更大的树。
最短路径
最短路径:带权图中从源点到终点的所有路径中,所经过边的权值之和最小的路径。
图的最短路径:
单源点最短路径:从一个顶点到其余各顶点的最短路径;
每对顶点间的最短路径。
狄杰斯特拉 (Dijkstra) 算法
求解单源点最短路径的算法,通过不断更新顶点间的最短路径来实现。



当前最短路径的更新


拓扑排序
拓扑排序:在一个有向图中找一个满足所有有向边的方向的顶点序列的过程。

拓扑排序方法
- 从有向图中选择一个没有前驱(入度为0)的顶点并输出。
- 从图中删去该顶点及发出的全部有向边。
- 重复以上步骤,直到所有顶点都被输出。
拓扑排序示例
计算机专业课程学习顺序的拓扑排序,展示了如何根据先修课程的要求进行排序。

课程之间的先后关系可用有向图表示:
拓扑序列:C2-C7-C1-C3-C4-C5-C6 或:C1-C2-C3-C4-C5-C7-C6 等
注意:拓扑序列不一定唯一。
总结
- 普里姆 (Prim) 算法和克鲁斯卡尔 (Kruskal) 算法构造最小生成树的方法。
- 狄杰斯特拉 (Dijkstra) 算法求解单源点最短路径。
- 拓扑排序的应用。
相关文章:
数据结构与算法--图的应用
文章目录 回顾提要连通图生成树最小生成树构造最小生成树的算法普里姆(Prim)算法克鲁斯卡尔(Kruskal)算法 最短路径狄杰斯特拉 (Dijkstra) 算法当前最短路径的更新拓扑排序拓扑排序方法拓扑排序示例总结 回顾 图的遍历方法: 深度优先遍历 (DFS):从任意…...
【leetcode图文详解】特殊数组II : 空间换时间的“记忆化”,越多越好吗?
题目详解 需求:判断给定区间内的元素是否满足“特殊数组”要求 尝试: 暴力求解? 如果试着直接对每个queries中的区间进行检测而不做其他处理,那么最后不出意外地超时了。。 细想优化策略,不难察觉到其中可能存在大量的重复运算 那还等什…...
离线安装prometheus与Grafana实现可视化监控
简介 prometheus 是一个专为云环境设计的开源系统监控和警报工具,它收集并存储多维度的时间序列数据,通过PromQL查询语言提供强大的数据检索能力,并支持可视化及警报功能。而 Grafana 则是一个开源的数据可视化平台,能够与包括Pr…...
【Python学习-UI界面】PyQt5 小部件7-QSpinBox 计数器
样式如下: 一个 QSpinBox 对象向用户呈现一个文本框,右侧有一个上下按钮,显示一个整数。如果按下上下按钮,文本框中的值将增加/减少。 默认情况下,框中的整数从0开始,最高到99,并以步长1变化。对于浮点数…...
[二次元]个人主页搭建
文章目录 域名买一个免费的 框架HexoHexo-Theme-ParticleX Halo 参考 域名 买一个 有钱人玩这个 免费的 github.io 教程在github官方文档有; 框架 Hexo 静态的 Hexo-Theme-ParticleX Argvchsの小窝 Halo 动态的 halo 参考 基于Hexo框架的GitHub个人主页…...
Spring Data JPA 自动创建时间的相关注解和用法
以Springboot项目为例 在实体类上加上注解 EntityListeners(AuditingEntityListener.class)在相应的字段上添加对应的时间注解 LastModifiedDate 和 CreatedDateApplication启动类中添加注解 EnableJpaAuditing...
Java基础之隐式类型转换
类型转换 基本数据类型表示范围大小排序: 在变量赋值及算术运算的过程中,经常会用到数据类型转换,其分为两类: 隐式类型转换 显式类型转换 1 隐式类型转换 情形1:赋值过程中,小数据类型值或变量可以直…...
【数据结构与算法 | 图篇】Dijkstra算法(单源最短路径算法)
1. 前言 由图: 如果我们想要求得节点1到节点5(也可以是其他节点)的最短路径,我们可以使用Dijkstra算法。 2. 步骤与思路 1. 将所有顶点标记为未访问(顶点类的visited属性设置为false)。创建一个未访问顶点的集合。 2. 为每个顶…...
windows c转linux c要做的事情。
写在开头: 最近的copy项目要转到windows版本了,一直在跟进做这个事情。 直入主题说下移植过程中可能涉及以下几个方面的调整: 编译器和工具链的更改:Windows和Linux使用不同的编译器和工具链,因此需要在Windo…...
【高等代数笔记】002.高等代数研究对象(二)
1. 高等代数的研究对象 1.4 一元高次方程的求根 a n x n a n − 1 x n − 1 . . . a 1 x a 0 0 a_{n}x^{n}a_{n-1}x^{n-1}...a_{1}xa_{0}0 anxnan−1xn−1...a1xa00 等式左边是一元多项式。 所有一元多项式组成的集合称为一元多项式环。...
ubuntu服务器部署的mysql本地连不上的问题
试过了网上的所有方法,都连不上,可以执行: SELECT user, host, plugin FROM mysql.user WHERE user root; 查一下:plungin这个连接插件是不是auth_socket, auth_socket是只能本地连接的插件,需要修改: ALTER USER root% IDENTIFIED WITH mysql_native_password BY your_pass…...
python redis安装
python redis安装 #方法1、 sudo apt-get install redis-server python 支持包: (其实就一个文件,搞过来就能用) sudo apt-get install python-redis #方法2、 sudo pip install redis...
YJ0043定制版抖音电商卷抢购系统带回收商城抖音电商优惠卷投资理财系统
系统是基于逍遥商城二开的系统,pc手机端都新增了邀请码验证 手机端重新定制的UI,前端产品不至于抖音卷也可以自行更改其他产品 用户前端下单,后台订单可以直接回收,后台支持设置默认邀请码和抢卷时间限制...
如何选择图片和视频
文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何选择视频文件"相关的内容,本章回中将介绍如何混合选择图片和视频文件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我…...
html+css网页制作 电商华为商城首页 ui还原度100%
htmlcss网页制作 电商华为商城首页 ui还原度100% 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码…...
EDAS(企业级应用服务)
1 :介绍 1:edas 提供了应用,开发,部署,监控,运维。同时支持 spring cloud, dubbo ,HSF 2:Ali-Tomcat 基于tomcat改造的Servlet容器。支持原有功能,它在启动时会自动加载Pandora(潘多拉&#x…...
简单工厂,工厂方法 和 抽象工厂
这三种模式, 都是创建类型的模式, 将对象的创建流程封装起来供客户调用 简单工厂模式 简介: 和策略模式一样,就是针对不通的参数, 返回不通的实例而已 问题: 没有遵循开闭原则, 如果我们想增加一种类, 那…...
python 压力测试脚本
需求: 生成一个12位不重复的随机数将随机数赋值给Json 串中的 orderCode字段将Json用ECB 指定 key为bJXQezYtR4ZSNK4p进行加密并作为值传给{ “data”: “” }设置每秒30个并发持续1分钟调用接口接口输出测试测试报告 代码示例 import json import random import…...
【Linux】多线程7——线程池
1.线程池的概念 1.1.池化技术 池化技术指的是提前准备一些资源,在需要时可以重复使用这些预先准备的资源。 在系统开发过程中,我们经常会用到池化技术。通俗的讲,池化技术就是:把一些资源预先分配好,组织到对象池中…...
Linux Shell实例
1.查空行 答案: awk /^$/{print NR} file1.txt#awk:一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析#处理。 #1)基本语法 #awk [选项参数]/pattern1/{action1} /pattern…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
