考研数据结构--图

文章目录

  • 图的基本概念
    • 图的定义
      • 种类
    • 图的抽象数据类型
    • 图的基本术语
      • 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,则该活动为关键活动。
      • 关键路径和关键活动可能不止一条或一项。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自信裸辞:一晃 ,失业都3个月了.....

最近&#xff0c;找了很多软测行业的朋友聊天、吃饭 &#xff0c;了解了一些很意外的现状 。 我一直觉得他们技术非常不错&#xff0c;也走的测开/管理的路径&#xff1b;二三月份裸辞的&#xff0c;然后一直在找工作&#xff0c;现在还没找到工作 。 经过我的分析&#xff0…

2023年广东省中职网络安全Web渗透测试解析(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.访问地址http://靶机IP/task1,分析页面内容,获取flag值,Flag格式为flag{xxx}; 2.访问地址http://靶机IP/task2,访问登录页面。用户user01的密码为1-1000以内的数,获取用户user01的密码,将密码作为Flag进行提交,Flag格式…

如何真正开启docker远程访问2375

注意看官方文档 Configure remote access for Docker daemon | Docker Documentation 1. windows上Docker Desktop开启远程访问端口2375 系统版本&#xff1a; win10专业版 Docker Desktop版本&#xff1a;4.18.0 很简单勾上&#xff0c; 应用并重启即可 2. linux上开启 尝…

设计模式—“接口隔离”

在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采样添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。 典型模式有:Fascade、Proxy、Adapter、Mediator 一、Fascade 动机 上述A方案的问题在于组件的客户和…

性能测试重要知识与TPS上不去原因分析,测试进阶之路卷起来...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 常见性能测试术语…

音视频使用qt测试ffmpeg接口时无法运行

仅仅时把自己过程中遇到的稍微阻塞疑惑问题做出整理&#xff0c;疑惑的是拿到的ffmpeg包中没有dll文件&#xff0c;导致自己研究了一系列。 使用qt加载音视频ffmpeg对应的相关lib库&#xff0c;进行接口&#xff0c;源码的研究。 1&#xff1a;使用源码安装的方式获取相关的动…

易基因:全基因组DNA甲基化分析揭示DNMT1在斑马鱼模型听觉系统发育中的作用 | 胚胎发育

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 听力障碍通常与内耳发育不全或损伤有关&#xff0c;是影响生活质量的严重健康问题。因此研究听觉器官发生过程中的关键基因对于探索听力损伤的潜在策略至关重要。斑马鱼模型在理解内耳发…

基于SSM的校园办公管理系统的设计与实现(源码完整)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据你想解决的问题&#xff0c;今天给…

噶了呀,现在的00后这么卷的吗?

现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪20K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家里…

企业微信也能接入ChatGPT啦~你也能成功,步骤超详细~

文章目录 配置企业微信创建企业创建应用 配置项目一、OpenAI账号注册二、克隆项目代码三、复制配置文件四、企业微信配置 服务器购买运行项目安装Python安装核心依赖启动项目 个人微信绑定 上次我把ChatGPT接入了微信&#xff08;请看这篇文章当ChatGpt接入微信群之后&#xff…

前几天面了个30岁左右的测试员,年薪50w问题基本都能回答上,必是刷了不少八股文···

互联网行业竞争是一年比一年严峻&#xff0c;作为测试工程师的我们唯有不停地学习&#xff0c;不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水&#xff0c;进入心仪的企业&#xff08;阿里、字节、美团、腾讯等大厂.....&#xff09; 所以&#xff0c;大家就迎来了…

论文笔记: Trajectory Clustering: A Partition-and-Group Framework

07 Sigmoid 使用类DBSCAN的思路对轨迹聚类 1 intro 1.1 轨迹聚类 现有的轨迹聚类算法是将相似的轨迹作为一个整体进行聚类&#xff0c;从而发现共同的轨迹。 但是这样容易错过一些共同的子轨迹&#xff08;sub-trajectories&#xff09;。而在实际中&#xff0c;当我们对特…

Redis主从复制,哨兵模式和集群模式

一、主从复制 1、主从复制-哨兵-集群 主从复制&#xff1a;主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。缺陷&#xff1a;故障恢复无法自…

服务器被勒索病毒攻击怎么办,如何进行勒索病毒解密与预防工作?

在当今社会中服务器已经成为企业关键数据存储和传输的重要载体&#xff0c;同样也成为黑客攻击和勒索病毒的首要目标。一旦服务器被勒索病毒攻击&#xff0c;企业的正常运转与经济利益和核心数据都将受到威胁。下面将为大家介绍一下服务器被勒索病毒攻击后应该采取怎样的措施及…

软件系统三基座之一:权限管理

软件系统三基座包含&#xff1a;权限管理、组织架构、用户管理。 何为基座&#xff0c;即是有了这些基础&#xff0c;任一相关的“建筑”就能逐步搭建起来。 万丈高楼平地起 一、为什么要权限管理 权限管理&#xff0c;一般指根据系统设置的安全规则或者安全策略&#xff0c;…

【013】C++数组之一维数值数组和二维数值数组

一维数值数组和二维数值数组 引言一、一维数值数组1.1、概念1.2、一维数值数组的定义1.3、一维数值数组的初始化1.4、一维数值数组的元素操作1.5、使用示例 二、二维数值数组2.1、概述2.2、二维数值数组的初始化2.3、二维数值数组的元素操作2.4、使用示例 总结 引言 &#x1f4…

Windows 安装 GCC

文章目录 GCC 是什么&#xff1f;GCC 和 gcc 什么关系&#xff1f;Windows 安装 GCC选型下载安装配置环境变量验证 参考文献 GCC 是什么&#xff1f; GCC&#xff08;GNU Compiler Collection&#xff09;是一个开源的编译器套件&#xff0c;由 GNU 项目开发和维护。 GNU 编译…

讯飞星火_VS_文心一言

获得讯飞星火认知大模型体验授权&#xff0c;第一时间来测试一下效果&#xff0c;使用申请手机号登录后&#xff0c;需要同意讯飞SparkDesk体验规则&#xff0c;如下图所示&#xff1a; 同意之后就可以进行体验了&#xff0c;界面如下&#xff1a; 讯飞星火效果体验 以下Promp…

数据结构【链表】看完还怕拿不下链表?

✨Blog&#xff1a;&#x1f970;不会敲代码的小张:)&#x1f970; &#x1f251;推荐专栏&#xff1a;C语言&#x1f92a;、Cpp&#x1f636;‍&#x1f32b;️、数据结构初阶&#x1f480; &#x1f4bd;座右铭&#xff1a;“記住&#xff0c;每一天都是一個新的開始&#x1…

“饶派杯”XCTF车联网安全挑战赛战队巡礼!

2023年5月31日&#xff0c;“饶派杯” XCTF车联网安全挑战赛将于江西省上饶市重磅开赛。本届大赛由江西省委网信办、江西省工信厅、上饶市人民政府主办&#xff0c;旨在深入贯彻落实国家网络强国和交通强国战略部署&#xff0c;推动智能网联汽车技术与产业发展、加快该领域人才…