数据结构——图的应用

news2024/11/16 9:31:42

文章目录

  • 前言
  • 一、图的应用
    • 1. 最小生成树
      • 普里姆(Prim)算法
      • 克鲁斯卡尔(Kruskal)算法
    • 2. 最短路径
      • Dijkstra算法求单源最短路径
    • 3. 拓扑结构
    • 4. 关键路径
  • 总结


前言

  1. 图的应用
    1.1 最小生成树
    1.2 最短路径
    1.3 拓扑结构
    1.4 关键路径

一、图的应用

1. 最小生成树

  1. 定义:从图中选取若干条边,将所有顶点连接起来,并且所选取的这些边的权值之和最小
    1).最小生成树的算法
    a. 普里姆算法
    b. 克鲁斯卡尔算法
  2. 最小生成树性质
    (1)最小生成树树形不唯一;图中各权值互不相等时,G的最小生成树唯一;若无向图连通图边比顶点少1,即G本身就是一棵树,G的最小生成树就是本身
    (2)虽然最小生成树不唯一,但最小生成树边的权值之和唯一且最小
    (3)最小生成树边数为顶点数减1

普里姆(Prim)算法

  1. 概念:算法从一个顶点开始,在此顶点对应的结点中寻找最小权值的结点连接,如此往复,直至满了为止,此时树必有n-1条边
    在这里插入图片描述

在这里插入图片描述

  1. 时间复杂度:O(|V|²),不依赖于|E|,适用于求解稠密图的最小生成树

克鲁斯卡尔(Kruskal)算法

  1. 按权值递增序列选择合适的边来构造最小生成树,开始时,每个顶点构成一棵独立的树,T此时为仅含V各结点的森林,按G的边的权值递增顺序选择一条边,若这条边加入不构成回路,则将其加入,否则舍弃,直到含有n-1条边;构造时按网中权值由小到大的顺序,不断选取当前未被选取的边集中权值最小的边,选取n-1条边
    在这里插入图片描述
    在这里插入图片描述
  2. 时间复杂度:采用堆存放边的集合,O(|E|log|E|),适用于边稀疏而顶点较多的图
    在这里插入图片描述

2. 最短路径

概念:对于带权图,路径上权值之和最小的叫最短路径

Dijkstra算法求单源最短路径

  1. 概念:从某一顶点出发,求到另一顶点的最小路径(带权值),可以从一顶点出发挨个搜寻,每一趟都需要得到最短的路径,求的是一顶点到所有其他顶点的路径

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

  1. 时间复杂度:邻接矩阵为O(|V|²),邻接表为O(|V|²),若要找出所有结点之间最短距离,则时间复杂度为O(|V|³)
  2. 注意:若有负权值,此算法不适用
  3. Floyd算法求各顶点间最短路经过
    产生一个n阶方阵 (k从-1开始到n-1)表示从顶点vi到vj路径长度,k表示绕行第k个顶点运算步骤;初始时,vi和vj之间存在边,则以此边权值作为最短路径,若不存在边则以无穷作为权值;以后逐步加入顶点k作为中间顶点,若增加中间结点得到的路径比原路径减少了,则以此新路径代替原来路径

在这里插入图片描述

  1. 时间复杂度:O(|V|³)
  2. 注意:允许带负权值的边,但不允许包含带负权值的边组成的回路,也适用于带权无向图

3. 拓扑结构

  1. 有向无环图:有向图中不存在环,称为DAG图
  2. 拓扑排序
    (1)一个有向无环图顶点组成的序列满足下列条件
    ①每个顶点出现仅出现一次
    ②若顶点A排在B前面,则不存在从B到A的路径
    (2)对一个DAG图进行拓扑排序
    ①从DAG中选择一个没有前驱的顶点并输出
    ②从图中删除该顶点和所有以它为起点的有向边
    ③重复(1)(2)直到DAG图为空或者图中不存在无前驱顶点为止,而后一种情况说明有向图必存在环
    在这里插入图片描述
    (3)时间复杂度:O(|V|+|E|)
    (4)用拓扑排序算法处理DAG图时,注意:
    ①一个顶点有多个直接后继,拓扑排序不唯一;但若各个顶点已经排在一个线性有序序列中,每个顶点有唯一前驱后继关系,则结果唯一
    ②对于一般的图,若它的邻接矩阵是三角矩阵,则存在拓扑序列
    如果进行到某一步,无法找到无前趋的顶点,则说明此AOV网络中存在有向环路,遇到这种情况,拓扑排序就无法进行了。
    在算法中需要用定量的描述替代定性的概念
    没有前驱的顶点=入度为零的顶点
    删除顶点及以它为尾的弧=弧头顶点的入度减1

4. 关键路径

  1. 相关概念
    源点:存在唯一的入度为0的顶点,叫源点
    汇点:存在唯一的,出度为0的顶点叫汇点
    关键路径:从源点到汇点的最长路径的长度,即为完成整个工程任务所需的时间,该路径称为关键路径。
    关键活动:关键路径上的活动叫做关键活动
  2. AOE网
    (1)概念:在有向图中,用顶点表示事件,用弧表示活动,弧的权值表示活动所需的时间,这种有向无环图叫做边表示活动的网,简称AOE-网
    (2)AOE网性质:(1)只有某顶点表示的事件发生后,从该顶点出发的有向边所表示的活动才能开始(2)只有在进入某一顶点各有向边所代表的活动都已经结束时,该顶点所代表的事件才能发生
    (3)AOE网中只有一个源点(入度为0)表示工程开始,也只有一个汇点(出度为0)表示工程结束
    (4)只有路径上所有活动都完成了,整个工程才结束,从源点到汇点的最大路径长度的路径称为关键路径,关键路径上的活动叫关键活动(e(i)=l(i))
    (5)最短时间就是关键路径长度,也就是关键路径上各活动花费开销之和
  3. 求关键路径步骤
    (1)求AOE网中所有事件最早发生时间ve()
    (2)求AOE网中所有事件最迟发生时间vl()
    (3)求AOE网中所有活动最早开始时间e()
    (4)求AOE网中所有活动最迟开始时间l()
    (5)求AOE网中所有活动的差额d(),找出所有d()=0的活动构成关键路径

在这里插入图片描述

注:
(1)可以判断有向图是否有环:深度优先遍历、拓扑排序、关键路径
(2)不存在拓扑排序的有向图,必存在回路
(3)只有关键路径上所有活动时间同时减少,才能缩短工期

总结

  1. 图的应用
    1.1 最小生成树
    1.2 最短路径
    1.3 拓扑结构
    1.4 关键路径

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

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

相关文章

【网络教程】揭秘Windows SSH服务端免密登录:告别繁琐,享受安全连接

文章目录 开启Windows下的SSH服务端图形界面安装手动下载安装Windows如何查看系统用户名Windows如何查看本机IP开启免密登录Window生成秘钥Linux下生成秘钥配置公钥视频讲解开启Windows下的SSH服务端 这篇文章演示的环境是Windows11Windows的SSH服务端默认情况下是没有安装的,…

9.项目细节调整

文章目录 学习资料项目整体细节调整处理首页 学习资料 https://www.bilibili.com/video/BV13g411Y7GS/?p24&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e 项目整体细节调整 处理首页 默认的首页 肯定不能给人看。文件在这个位置。 可以删除…

live555 BasicUsageEnvironment目录解读

文章目录 BasicUsageEnvironmentBasicHashTable.cppBasicTaskScheduler.cppBasicTaskScheduler0.cppBasicUsageEnvironment.cppBasicUsageEnvironment0.cppDelayQueue.cpp后续会进行更新 BasicUsageEnvironment ├── BasicHashTable.cpp ├── BasicTaskScheduler0.cpp ├─…

类加载器 - 双亲委派模型

文章目录 回顾一下类加载过程类加载器类加载器介绍类加载器加载规则类加载器总结自定义类加载器 双亲委派模型双亲委派模型介绍双亲委派模型的执行流程双亲委派模型的好处打破双亲委派模型方法 本文参考: 类加载器详解(重点) | JavaGuide(Ja…

多目标优化算法:基于非支配排序的海象优化算法(NSWOA)MATLAB

一、海象优化算法WOA 海象优化算法(Walrus Optimization Algorithm,WOA)由Trojovsk等人于2023年提出,该算法模拟海象的进食,迁移,逃跑和对抗捕食者的过程,WOA包含探索、迁移和开发三个阶段&…

正则表达式学习和高级用法

以下所有的验证都在 在线验证 1. 起始符 / 正则表达式的起始符2. 限定符 匹配前面的子表达式**1次或多次**。例如,zo 能匹配 "zo" 以及"zoo",但不能匹配 "z"。等价于 {1,}。 ? 匹配前面的子表达式**0次或1次**。例如…

二进制 Deploy Kubernetes v1.23.17 超级详细部署

文章目录 1. 预备条件2. 基础配置2.1 配置root远程登录2.2 配置主机名2.3 安装 ansible2.4 配置互信2.5 配置hosts文件2.6 关闭防firewalld火墙2.7 关闭 selinux2.8 关闭交换分区swap2.9 修改内核参数2.10 安装iptables2.11 开启ipvs2.12 配置limits参数2.13 配置 yum2.14 配置…

函数防抖和节流

函数防抖和节流 经典真题 防抖,节流是什么,如何实现 (字节) 什么是函数防抖和节流 JavaScript 中的函数大多数情况下都是由用户主动调用触发的,除非是函数本身的实现不合理,否则一般不会遇到跟性能相关…

DMA简单总结

文章目录 一、基础概念1.1 DMA---Direct Memory Access 直接存储器访问,目的减少CPU资源占用 二、典型DMA硬件模型2.1 基本硬件特性---通道数、源/目标类型,地址与累加方式,数据位宽,搬移长度,循环模式,中断…

在c#中使用CancellationToken取消任务

目录 🚀介绍: 🐤简单举例 🚀IsCancellationRequested 🚀ThrowIfCancellationRequested 🐤在控制器中使用 🚀通过异步方法的参数使用cancellationToken 🚀api结合ThrowIfCancel…

‘XXX’ is already defined @typescript-eslint/no-redeclare 警告 问题解决

上文ReactTypescript项目环境中搭建并使用redux环境 结束是 其实不算完全写完吧 还会留下一个警告 这个报错 好像是说 这两个值已经定义过了 可能很多人 会觉得小问题 但你会发现 无论你名字怎么改都会一直 带着你新的名字继续报错 我们可以多套一层 export namespace Const…

Java8实战-总结29

Java8实战-总结29 并行数据处理与性能并行流将顺序流转换为并行流测量流性能 并行数据处理与性能 到目前为止,Stream接口最重要的好处是可以对这些集合执行操作流水线,能够自动利用计算机上的多个内核。 例如,在Java 7之前,并行…

Python 异常的概念

视频版教程 Python3零基础7天入门实战视频教程 异常是指程序运行的过程中出现了错误,也叫Bug。 案例一: # 定义人类 class Person:# 属性 姓名name None# 属性 年龄age Noneprint(Person().sex)因为Person类没有sex属性,对象访问sex属性…

Go语言开发环境搭建指南:快速上手构建高效的Go开发环境

Go 官网:https://go.dev/dl/ Go 语言中文网:https://studygolang.com/dl 下载 Go 的语言包 进入官方网站 Go 官网 或 Go 语言中文网: 选择下载对应操作系统的安装包: 等待下载完成: 安装 Go 的语言包 双击运行上…

HuggingFace Transformer

NLP简介 HuggingFace简介 hugging face在NLP领域最出名,其提供的模型大多都是基于Transformer的。为了易用性,Hugging Face还为用户提供了以下几个项目: Transformers(github, 官方文档): Transformers提供了上千个预训练好的模型可以用于不…

GitHub 曝出漏洞,或导致 4000 多个存储库遭受劫持攻击

The Hacker News 网站披露,安全研究员发现 GitHub 中存在一个新安全漏洞,该漏洞可能导致数千个存储库面临劫持攻击的风险。据悉,在 2023 年 3 月 1 日漏洞披露后,微软旗下的代码托管平台已于 2023 年 9 月 1 日解决了安全漏洞问题…

无涯教程-JavaScript - FACT函数

描述 The FACT function returns the factorial of a number. The factorial of a number is equal to 1*2*3*...* number. 语法 FACT (number)争论 Argument描述Required/OptionalNumberThe nonnegative number for which you want the f…

LeetCode 39. Combination Sum【回溯,剪枝】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

C#小知识

项目编译后复制文件到生成目录 方法1 对于单个文件,可以点击属性。输出目录里选择始终复制。 方法2 把项目中的ServerScripts复制到输出目录。 在项目设置中,生成事件里添加批处理 xcopy $(ProjectDir)ServerScripts\*.* $(TargetDir)ServerScrip…

cms之帝国cms安装

内容摘要 帝国网站管理系统,英文名称为EmpireCMS,简称“帝国CMS”,本文将介绍帝国网站管理系统的安装方法。 前言: 本文安装教程是以帝国CMS7.5版本为基础进行图文讲解。 各位看官,一定要按照每个步骤去执行&#xf…