考研数据结构--图

news2024/11/25 0:35:05

文章目录

  • 图的基本概念
    • 图的定义
      • 种类
    • 图的抽象数据类型
    • 图的基本术语
      • 1. 端点和邻接点
      • 2. 顶点的度、入度和出度
      • 3. 完全图
      • 4. 稠密图、稀疏图
      • 5. 子图
      • 6. 路径和路径长度
      • 7. 回路或环
      • 8. 连通、连通图和连通分量
      • 9. 强连通图和强连通分量
        • 在一个图中找强连通分量的方法
      • 10. 权和网
  • 图的存储结构和基本运算算法
    • 图的存储表示
      • 邻接矩阵存储方法
        • 特点
      • 邻接表存储方法
        • 特点
      • 十字链表存储有向图
      • 邻接多重表存储无向图
  • 图的遍历
    • 概念
    • 方法
      • 深度优先遍历算法
        • 过程
      • 广度优先遍历算法
        • 过程
    • DFS和BFS的差别
  • 生成树和最小生成树
  • 生成树
    • 概念
    • 深度优先生成树
    • 广度优先生成树
  • 最小生成树
    • 概念
  • 非连通图和生成树
  • 普里姆算法
  • 克鲁斯卡尔算法
  • 最短路径
    • 路径的概念
    • 从一个顶点到其余各顶点的最短路径(Dijkstra算法)
    • 每对顶点之间的最短路径(Floyd算法)
  • 有向无环图及其应用
    • 有向无环图的定义
    • AOV网
    • 有向无环图的拓扑排序
    • AOE网
    • AOE网的关键路径
    • 关键路径算法

图的基本概念

图的定义

在这里插入图片描述

种类

在这里插入图片描述

在这里插入图片描述

图的抽象数据类型

在这里插入图片描述

图的基本术语

1. 端点和邻接点

在这里插入图片描述

2. 顶点的度、入度和出度

在这里插入图片描述

公式

在这里插入图片描述

3. 完全图

在这里插入图片描述

4. 稠密图、稀疏图

在这里插入图片描述

5. 子图

在这里插入图片描述

6. 路径和路径长度

在这里插入图片描述

7. 回路或环

在这里插入图片描述

8. 连通、连通图和连通分量

在这里插入图片描述

练习

在这里插入图片描述

在这里插入图片描述

9. 强连通图和强连通分量

在这里插入图片描述

在这里插入图片描述

在一个图中找强连通分量的方法

在这里插入图片描述

例题

在这里插入图片描述

在这里插入图片描述

10. 权和网

在这里插入图片描述

图的存储结构和基本运算算法

图的存储表示

在这里插入图片描述

邻接矩阵存储方法

在这里插入图片描述

在这里插入图片描述

//定义最大顶点数为100
#define MaxVertexNum 100
typedef struct {
    char Vex[MaxVertexNum];   //顶点数组,存储顶点名称
    int Edge[MaxVertexNum][MaxVertexNum];   //邻接矩阵,存储顶点之间的边
    int vexNum,arcNum;    //顶点个数和边数
} MGraph;

演示

在这里插入图片描述

特点

在这里插入图片描述

邻接表存储方法

在这里插入图片描述

在这里插入图片描述

图的邻接表存储方法是一种顺序分配与链式分配相结合的存储方法

在这里插入图片描述

//定义最大顶点数为100
#define MaxVertexNum 100
//邻接表存储结构中的边结点
typedef struct ArcNode{
    int adjVex;   //记录该边依附的顶点在顶点数组中的下标
    struct ArcNode *next;   //指向下一个边结点
} ArcNode;
//邻接表存储结构中的顶点结点
typedef struct VNode{
    char data;   //顶点数据
    ArcNode *first;   //指向第一条依附该顶点的边结点
} VNode, AdjList[MaxVertexNum];
//邻接表存储结构
typedef struct {
    AdjList vertices;   //邻接表
    int vexNum,arcNum;   //存储顶点个数和边数
} ALGraph;

演示

在这里插入图片描述

特点

在这里插入图片描述

十字链表存储有向图

在这里插入图片描述

在这里插入图片描述

邻接多重表存储无向图

在这里插入图片描述

在这里插入图片描述

图的遍历

概念

在这里插入图片描述

在这里插入图片描述

方法

图的遍历有两种基本方法:深度优先搜索(Depth First Search,简称DFS)和广度优先搜索(Breadth First Search,简称BFS)。

深度优先遍历算法

过程

在这里插入图片描述

演示

在这里插入图片描述

广度优先遍历算法

过程

在这里插入图片描述

演示

在这里插入图片描述

DFS和BFS的差别

在这里插入图片描述

生成树和最小生成树

生成树

概念

在这里插入图片描述

如果在一棵生成树上添加一条边,必定构成一个环。

深度优先生成树

在这里插入图片描述

广度优先生成树

在这里插入图片描述

一个连通图的生成树不一定是唯一的。

最小生成树

概念

在这里插入图片描述

在这里插入图片描述

非连通图和生成树

在这里插入图片描述
【数据结构算法】图解prime算法和Kruskal算法(最短路径问题)

最小生成树算法——Prime算法、kruskal算法

普里姆算法

在这里插入图片描述

克鲁斯卡尔算法

在这里插入图片描述

在这里插入图片描述

最短路径

路径的概念

在这里插入图片描述

在这里插入图片描述

从一个顶点到其余各顶点的最短路径(Dijkstra算法)

在这里插入图片描述

求解思路

在这里插入图片描述

过程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

算法设计

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

算法演示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Dijkstra算法不适合负权值的情况

在这里插入图片描述

每对顶点之间的最短路径(Floyd算法)

在这里插入图片描述
算法:迭代(递推)思路

在这里插入图片描述

在这里插入图片描述

算法设计

在这里插入图片描述

在这里插入图片描述

算法演示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

有向无环图及其应用

第七章-图(6)有向无环图及其应用-拓扑排序

第七章-图(6)有向无环图及其应用-关键路径

有向无环图的定义

  • 有向无环图(DAG,Directed Acyclic Graph)是图论中的一种特殊的有向图,它没有任何从某个顶点出发经过若干条边回到该顶点的路径,也就是说,它没有环。
  • 有向无环图可以用来表示一些具有优先关系或依赖关系的问题,例如工程项目的进度安排、表达式的计算、编译器的优化等。
  • 有向无环图可以用邻接表或邻接矩阵来存储,其中每个顶点可以用一个入度(指向该顶点的边的数量)和一个出度(从该顶点出发的边的数量)来描述。

在这里插入图片描述

在这里插入图片描述

AOV网

AOV网(边是有向边,应用:拓扑排序)、AOE网(边是带权有向边,应用:关键路径):最早和最晚时刻一致的活动(有向边)是关键路径中的活动

AOV和AOE之间的区别和联系

  • AOV网(Activity On Vertex Network)是一种用顶点表示活动,用弧表示活动之间的优先关系的有向图,它可以用来表示一些具有偏序关系或依赖关系的问题,例如工程项目的进度安排、课程的选修顺序等。
  • AOV网中的顶点表示一个活动,它可以是一个具体的任务或一个抽象的概念,它有一个开始时间和一个结束时间,以及一个持续时间。
  • AOV网中的弧表示一个活动之间的优先关系,它指示了哪些活动必须在另一些活动之前完成,它可以有一个权值,表示两个活动之间的间隔时间。
  • AOV网中没有环路,即不存在从某个顶点出发经过若干条弧回到该顶点的路径,否则就会出现矛盾或死锁。

有向无环图的拓扑排序

【数据结构】AOV网——拓扑排序

  1. 从图中选择一个没有前驱的顶点输出。
  2. 从图中删除该顶点和所有以他为顶点的边。
  3. 重复第一,二步,直到图为空,或者不存在没有前驱的顶点。

AOE网

AOV网(拓扑排序)和AOE网

[关键路径(AOE)网 通俗易懂](关键路径(AOE)网 通俗易懂 - 知乎 (zhihu.com))

  • AOE网(Activity On Edge Network)是一种用边表示活动,用顶点表示事件,用边上的权值表示活动持续的时间的有向图,它可以用来表示一些具有时间限制或工期要求的问题,例如工程项目的进度安排、任务的优先级等。
  • AOE网中的边表示一个活动,它可以是一个具体的任务或一个抽象的概念,它有一个开始事件和一个结束事件,以及一个持续时间。
  • AOE网中的顶点表示一个事件,它是所有指向它的边所代表的活动均已完成的状态,它有一个最早发生时间和一个最迟发生时间,以及一个时差。
  • AOE网中没有环路,即不存在从某个顶点出发经过若干条边回到该顶点的路径,否则就会出现矛盾或死锁。
  • AOE网中有一个入度为0的顶点称为源点或始点,表示一个工程的开始;有一个出度为0的顶点称为汇点或终点,表示一个工程的结束。
  • AOE网可以用邻接表或邻接矩阵来存储,其中每个顶点可以用一个入度(指向该顶点的边的数量)和一个出度(从该顶点出发的边的数量)来描述。

AOE网的关键路径

【数据结构】AOE网——关键路径

  • 关键路径(Critical Path)是一种对AOE网中所有边进行排序的方法,使得对于网中任意一条有向边<u,v>,边u在排序中都出现在边v之前。
  • 关键路径可以用来检查一个有向图是否有环,也可以用来确定一个工程项目的最早开始时间和最晚开始时间。
  • 关键路径是指在AOE网中从源点到汇点路径最长的路径。这里的路径长度是指路径上各个活动持续时间之和。
  • 关键路径上的活动是关键活动,它们是决定整个工程工期的关键因素,即通过加快关键活动来缩短整个工程的工期。
  • 关键路径上的事件是关键事件,它们是决定整个工程进度安排的关键节点,即通过调整关键事件来优化整个工程的进度安排。
  • 关键路径并不唯一,即关键路径可能有多条。且对于有几条关键路径的网,只提高一条关键路径上的关键活动并不能缩短整个工程的工期,只有加快那些包括在所有关键路径上的关键活动才能达到缩短工期的目的。

关键路径算法

  • 关键路径算法(Critical Path Method)是一种求解AOE网中关键路径和关键活动的算法,它主要利用了以下几个参数:
    • 事件vk 的最早发生时间ve(k) —— 它是从源点v1到某个顶点vk 的最长路径长度。它决定了之后的活动能够开工的最早时间。
    • 事件vk 的最迟发生时间vl(k) —— 它是指在不推迟整个工期的前提下,该事件最迟必须发生的时间。
    • 活动ai 的最早开始时间e(i) —— 它是该活动的起点表示的事件的最早发生时间。
    • 活动ai 的最迟开始时间l(i) —— 它是该活动的终点表示的事件的最迟发生时间减去该活动所需时间之差。
    • 活动ai 的总时差t(i) —— 它是该活动最迟开始时间与最早开始时间之差。如果总时差为0,则该活动为关键活动。
  • 关键路径算法主要分为以下几个步骤:
    • 计算每个事件(顶点)最早发生时间ve(k) 和最迟发生时间vl(k):
      • ve(源点) = 0
      • ve(k) = max {ve(j) + cost(j,k)}
      • vl(汇点) = ve(汇点)
      • vl(k) = min {vl(j) - cost(k,j)}
    • 计算每个活动(边)最早开始时间e(i) 和最迟开始时间l(i):
      • e(i) = ve(起点)
      • l(i) = vl(终点) - cost(起点,终点)
    • 确定关键路径和关键活动:
      • 如果某条路径上所有活动总时差都为0,则该路径为关键路径;如果某个活动总时差为0,则该活动为关键活动。
      • 关键路径和关键活动可能不止一条或一项。

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

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

相关文章

如何在华为OD机试中获得满分?Java实现【统计匹配的二元组个数】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

基于openfaas托管脚本的实践

作者 | 张曦 一、openfaas产品背景 在云服务架构发展之初&#xff0c;这个方向上的思路是使开发者不需要关心搭建和管理后端应用程序。这里并没有提及无服务器这个概念&#xff0c;而是指后端基础设施由第三方来托管&#xff0c;需要的基础架构组建均以服务的形式提供&#x…

list的模拟实现

第一步&#xff1a;看源代码 类的框架&#xff1a; 成员函数&#xff1a; 基本可以确定list是一个带头双向循环链表&#xff0c;end()的迭代器指向头节点&#xff0c;begin()的迭代器指向头结点的下一个节 list的迭代器&#xff1a;&#xff08;稍显复杂&#xff09; 库中的迭代…

5节点系统潮流计算-牛拉法和PQ分解法(代码+报告)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该部分资料是牛拉法和PQ分解法两种潮流计算方法的代码和对应的资料&#xff0c;程序针对5节点系统&#xff0c;也可以自行修改节点和线路参数改成其他节点系统&#xff0c;程序通用性较强&#xff0c;注释清晰…

电脑没有声音了怎么恢复?3个实用方法分享!

案例&#xff1a;我想在电脑上看电影、听音乐&#xff0c;但是我发现电脑没有声音&#xff0c;这种情况让我感到很困扰&#xff0c;有没有解决的方法&#xff1f; 【我的电脑没有声音&#xff0c;这非常影响我的使用。电脑没有声音是什么问题&#xff1f;有没有小伙伴知道解决…

Recurrent Neural Network(循环神经网络)

目录 Slot Filling with RNN Elman Network & Jordan Network Bidirectional RNN LSTM(Long Short-term Memory) Example Learning Target LSTM GRU (Gated Recurrent Unit) More Applications Many to One Many to Many Speech Recognition Sequence to Sequ…

一大波物联网毕业设计选题推荐(配套源码、文档、开发板)

以下项目整体综合性比较强&#xff0c;更贴近于产品化&#xff0c;并且基本都包含微信小程序与物联网云平台的联动&#xff0c;每个项目均配套详细的项目开发文档、程序源码&#xff0c;非常适合作为物联网毕业设计选题。项目文档及源码在文章末尾可免费下载。 另外&#xff0…

新手上路——怎样给我的网站备案

怎样办理网站备案&#xff1a; 由于备案是在主机接入商处办理&#xff0c;通常在哪里买的网站空间在哪里提交备案。例如在西部数码开通的虚拟主机、云服务器、独立主机等业务后&#xff0c;再通过其平台提交备案申请。 1.主机业务开通成功后&#xff0c;打开备案平台网址&…

【uniapp】app端压窗屏设计

一、前言 众所周知&#xff0c;在app端中&#xff0c;普通的组件是无法覆盖原生组件&#xff0c;即使是官方提供的cover-view也只是在实体内容中覆盖一些原生的如地图。但是无法覆盖底部的tabbar。 二、了解层级关系 实际上app端每点击一次的层级是这样的&#xff0c;我们可…

spring security oauth2.0-authorization code

Oauth2.0 spring security 估计很多人都在用,里面有几种安全模式值得大家去摸索. oauth2.0 是一种授权鉴权的机制,主要是用来颁发令牌,验证令牌,刷新令牌. OAuth2.0是OAuth协议的延续版本&#xff0c;但不向前兼容OAuth 1.0(即完全废止了OAuth1.0). 2012年10月&#xff0c…

泛微e-cology9 SQL注入漏洞复现(QVD-2023-5012)

1、产品简介 泛微协同管理应用平台e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。 2、漏洞概述 泛微e-cology9中存在SQL注入漏洞&#xff0c;未…

《数据万象带你玩转视图场景》第三期:图片极智压缩

前言 在本系列的第一期我们介绍了图片 AVIF 压缩&#xff0c;作为最前沿的压缩技术&#xff0c;AVIF 确实有着无数的优点。但时代的进步是循序渐进的&#xff0c;在一些较老的终端或设备上&#xff0c;可能短时间内确实无法支持 AVIF 格式&#xff0c;那如何能让这部分业务享受…

【毕业季征文】你们的未来可期

还有大约一个月即将又有一批大学的学弟学妹们离开学校,走向社会,走上工作岗位。你们是否是既兴奋又迷茫呢?,我相信更多的是憧憬吧。回想我大学毕业那是10年前的事情了,现在的感受是那么遥远,仿佛自己从来都没上过大学。可能是在大学期间过的太过艰苦,以至于不想保留那一…

TDengine客户端连接

目录 TDengine-clinet 下载网址 运行软件 连接默认TD 连接指定TD TDengineGUI 下载地址 使用 连接&#xff1a;端口默认是6041&#xff1b; sql查询时需要制定 库名 TDengine-clinet 下载网址 连接器 | TDengine 文档 | 涛思数据 默认安装即可; 运行软件 连接默认TD…

机器学习期末复习 线性模型

1.线性回归&#xff0c;对数几率回归&#xff0c;线性判别分析是分类还是回归任务&#xff1f;是有监督的学习还是无监督的学习&#xff1f; 有监督学习和无监督学习 解释&#xff1a; 线性模型要做的有两类任务&#xff1a;分类任务、回归任务 分类的核心就是求出一条直线w…

JavaScript之BOM(上)

Window对象 1.BOM(浏览器对象模型) 2.定时器-延时函数 3.JS执行机制 4.location对象 5.navigator对象 6.history对象 一.BOM(浏览器对象模型) 1.BOM(Browser Object Model)是浏览器对象模型 2.window对象是一个全局对象&#xff0c;也可以说是JavaScript中的顶级对象 3.像do…

Facebook速推帖子和Facebook广告有什么区别

Facebook速推帖子和Facebook广告是在Facebook平台上推广内容的两种不同方式。虽然它们都可以帮助我们增加品牌曝光和吸引目标受众&#xff0c;但它们在运作方式和效果上有一些区别。让我们来详细了解一下它们之间的差异。 1.内容形式和展示方式&#xff1a; Facebook速推帖子&…

基于北斗+LoRa的落水报警定位方案一 -实现无人区,弱信号地区人员 位置安全监控

人员安全一直是企业管理的重中之重。无人区工地是一个安全事故多发的地方&#xff0c;在施工环境复杂且危险的情况下&#xff0c;工地人员位置监控成为管理工作中的一个难点&#xff0c;一直以来采用粗放的方式&#xff0c;现有的工地项目存在施工人员实时督查难等问题&#xf…

【问题记录】postgreSQL使用默认密码导致kdevtmpfsi挖矿病毒注入

起因 postgreSQL我做错了这几件事情 开启了全部IP登陆权限postgreSQL用的是默认用户名和密码用户postgres也没有设置密码&#xff0c;直接用su - postgres就能登陆 不知道是什么原理&#xff0c;反正服务器被侵入&#xff0c;并且注入了病毒文件 1. 基本信息排查 linux服务器…

大麦链接源码 大麦一键生成订单页面

8.4最新版源码 更新了大麦模版链接 更新了大麦订单页面一键生成