数据结构学习笔记(VI):图

news2024/11/24 19:48:55

目录

1 图的基本概念

6.1 图的基本概念

1.定义

2.边 

3.连通 

4.子图

5.连通分量  

6. 生成树与森林

7.权

8.特殊的图

2 图的存储

2.1 邻接矩阵法

1.实现

2.性能分析

3.性质

2.2 邻接表法

1.实现

2.对比

2.3 十字链表与邻接多重表

1.十字链表存储有向图

2.邻接多重表存储无向图

2.4 图的基本操作

3 图的遍历

3.1 广度优先遍历(BFS)

1.思路

2.实现

3.分析

3.2 深度优先遍历

1.实现

2.分析

4 最短路径问题

4.1 最小生成树

1.定义

2.Prim算法 

3.Kruskal算法

4.2 BFS算法

4.3 Dijkstra算法

4.4 Floyd算法

4.5 有向无环图描述表达式

1.定义

2.解题方法

4.6 拓扑排序

1.定义

2.实现

3.逆拓扑排序

4.7 关键路径

1.AOE网

2.求关键路径步骤


1 图的基本概念

6.1 图的基本概念

1.定义

2.边 

对于无向图:顶点v的度是指依附于该顶点的边的条数,记为TD(v) 

对于有向图:入度是以顶点v为终点的有向边的数目,记为ID(v);出度是以顶点v为起点的有向边的数目,记为OD(v);顶点v的度等于其入度和出度之和,即TD(v)= ID(v)+OD(v)

路径――顶点vp到顶点vq之间的一条路径是指顶点序列

简单路径――在路径序列中,顶点不重复出现的路径称为简单路径

简单回路――除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路称为简单回路

路径长度――路径上边的数目

点到点的距离――从顶点u出发到顶点v的最短路存若存在,则此路径的长度称为从u到v的距离。若从u到v根本不存在路径,则记该距离为无穷

无向图中,若从顶点v到顶点w有路径存在,则称v和w是连通的

有向图中,若从顶点v到顶点w和从顶点w到顶点v之间都有路径,则称这两个顶点是强连通的

3.连通 

4.子图

5.连通分量  

无向图中的极大连通子图称为连通分量;有向图中的极大强连通子图称为有向图的强连通分量

6. 生成树与森林

连通图的生成树是包含图中全部顶点的一个极小连通子图;在非连通图中,连通分量的生成树构成了非连通图的生成森林。

7.权

边的权――在一个图中,每条边都可以标上具有某种含义的数值,该数值称为该边的权值。

带权图/网――边上带有权值的图称为带权图,也称网。

带权路径长度――当图是带权图时,一条路径上所有边的权值之和!称为该路径的带权路径长度

8.特殊的图

2 图的存储

2.1 邻接矩阵法

1.实现

2.性能分析

3.性质

2.2 邻接表法

1.实现

表示方式不唯一

2.对比

2.3 十字链表与邻接多重表

1.十字链表存储有向图

2.邻接多重表存储无向图

2.4 图的基本操作

3 图的遍历

3.1 广度优先遍历(BFS)

1.思路

2.实现

3.分析

 

 

3.2 深度优先遍历

1.实现

2.分析

 

4 最短路径问题

4.1 最小生成树

1.定义

对于一个带权连通无向图G=(V, E),生成树不同,每棵树的权〈即树中所有边上的权值之和)也可能不同。设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的最小生成树((Minimum-Spanning-Tree, MST)。

2.Prim算法 

从某一个顶点开始构建生成树;每次将代价最小的新顶点纳入生成树,直到所有顶点都纳入为止。

3.Kruskal算法

每次选择一条权值最小的边,使这条边的两头连通(原本已经连通的就不选),直到所有结点都连通

4.2 BFS算法

求无权图的单源最短路径

只能用于无权图

4.3 Dijkstra算法

求单源最短路径

第1轮︰循环遍历所有编点,找到还没确定最短路径,且dist最小的顶点Vi,令final[i]=ture。检查所有邻接自Vi的顶点,若其final值为false,则更新dist和path信息。

第2轮:循环遍历所有结点,找到还没确定最短路径,且dist最小的顶点Vi,令final[i]=ture。

第3轮∶循环遍历所有结点,找到还没确定最短路径,且dist最小的顶点Vi,令final[i]=ture。

第4轮︰循环遍历所有结点,找到还没确定最短路径,且dist最小的顶点Vi,令final[i]=ture。

对于负权值带权图,该算法可能失效。

4.4 Floyd算法

各顶点间的最短路径

可以解决带负权值的图,但无法解决带有负权回路的图,因为其可能没有最短路径。

4.5 有向无环图描述表达式

1.定义

若一个有向图中不存在环,则称为有向无环图,简称DAG图(Directed Acyclic Graph)

2.解题方法

4.6 拓扑排序

1.定义

AOV网( Activity on Vertex Network,用顶点表示活动的网):用DAG图(有向无环图)表示一个工程。顶点表示活动,有向边<Vi,Vj>表示活动Vi必须先于活动Vj进行

拓扑排序︰在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序:每个顶点出现且只出现一次;若顶点A在序列中排在顶点B的前面,则在图中不存在从顶点B到顶点A的路径。

2.实现

①从AOV网中选择一个没有前驱(入度为O)的顶点并输出。②从网中删除该顶点和所有以它为起点的有向边。③重复①和②直到当前的AOV网为空或当前网中不存在无前驱的顶点为止。

3.逆拓扑排序

①从AOV网中选择一个没有后继(出度为0)的顶点并输出。②从网中删除该顶点和所有以它为终点的有向边。③重复①和②直到当前的AOV网为空。

4.7 关键路径

1.AOE网

在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动所需的时间),称之为用边表示活动的网络,简称AOE网(Activity On Edge NetWork)

在AOE网中仅有一个入度为0的顶点,称为开始顶点(源点),它表示整个工程的开始;也仅有一个出度为0的顶点,称为结束顶点(汇点),它表示整个工程的结束。

从源点到汇点的有向路径可能有多条,所有路径中,具有最大路径长度的路径称为关键路径,而把关键路径上的活动称为关键活动

活动a的最早开始时间e(i)——指该活动弧的起点所表示的事件的最早发生时间

活动a的最迟开始时间l(i)——它是指该活动弧的终点所表示事件的最迟发生时间与该活动所需时间之差

2.求关键路径步骤

 

 

 

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

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

相关文章

梦开始的地方——C语言柔性数组

文章目录柔性数组什么是柔性数组&#xff1f;柔性数组的使用柔性数组的优点柔性数组 什么是柔性数组&#xff1f; 在C99中&#xff0c;结构体最后一个元素它允许是一个未知大小的数组&#xff0c;这就叫做柔性数组成员。 这个概念听起来可能有点不可以思议&#xff0c;但它的…

KVC原理与数据筛选

作者&#xff1a;宋宏帅 1 前言 在技术论坛中看到一则很有意思的KVC案例&#xff1a; interface Person : NSObject property (nonatomic, copy) NSString *name; property (nonatomic, assign) NSInteger age; end Person *person [Person new]; person.name "Tom&q…

[附源码]计算机毕业设计springboot基于JavaWeb的学校社团活动管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

小知识· Zigbee 简介

1. 介绍 ZigBee是一种近距离、低复杂度、低功耗、低速率、低成本的双向无线通讯技术 ZigBee建立在IEEE 802.15.4标准&#xff08;定义了PHY和MAC层&#xff09;之上&#xff0c;ZigBee联盟对其网络层和应用层进行了标准化 ZigBee协议栈可分为五层 - 物理层&#xff08;PHY&a…

时间序列建模三部曲

与大多数高级分析解决方案不同&#xff0c;时间序列建模是一种低成本解决方案&#xff0c;可提供强大的洞察力。 本文将介绍构建质量时间序列模型的三个基本步骤&#xff1a;使数据平稳&#xff0c;选择正确的模型并评估模型的准确性。这篇文章中的例子使用了一家主要汽车营销…

[附源码]Python计算机毕业设计SSM旅行网的设计与实现(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

从零搭建开发脚手架 注意Logback多个配置文档导致配置紊乱问题

文章目录背景查找logback内部状态以及生效的配置文件解决背景 最近项目中出现个问题&#xff0c;自定义的logback.xml不生效&#xff0c;排查发现项目中出现了2个logback.xml&#xff0c;另一个在依赖Jar中&#xff0c;使用的在依赖Jar中的logback.xml&#xff0c;导致我们自定…

Azkaban源码阅读与本地调试

1、架构 2、本地源码加载,gradle会下载依赖。 AzkabanWebServer 配置 参数如下: -Dlog4j.configuration=file:///D:\workspace_com\azkaban\azkaban\azkaban-web-server\src\main\resources\conf\log4j.properties -conf D:\\workspace_com\\azkaban\\azkaban\\azkaban-…

Unity实现摄像头录像功能

Unity实现摄像头录像功能 前言 在之前的很多展馆展示的项目中&#xff0c;甲方有很多要求实现用摄像头录像的功能。使用Unity实现调用USB摄像头画面的功能非常容易实现&#xff0c;但是实现录屏的功能有一些困难&#xff0c;我使用了几种方法都没有实现出想要的效果&#xff…

广播实现强制下线功能

实现强制下线功能 强制下线应该是一个比较常用的功能,比如QQ在比的地方被登陆了,就会强制比被挤下线.强制下线的功能还是比较简单的,只需要在界面上弹出一个框,告知用户无法再进行任何操作即可.只能点击确定然后跳转至登录界面.强制下线功能需要关闭所有的Activity,然后返回到…

5 - 2 单选题

1.下列线索二叉树中&#xff08;用虚线表示线索&#xff09;&#xff0c;符合后序线索树定义的是&#xff1a;B 后序线索二叉树的构建流程就是&#xff1a; 1.后序遍历二叉树&#xff1a;d b c a 2.第一个结点的前驱是NULL&#xff0c;即d的前驱&#xff0c;d的左孩子为NULL …

在 Android 中创建静态应用程序快捷方式

您是否在日常应用程序中看到过快捷方式示例?可能像 Instagram、Discord、Medium 等。提供它们是为了帮助我们快速导航到应用程序内部的特定功能、屏幕或部分,而无需逐步浏览它们。 在本文中,我们将逐步实现静态快捷方式。但在我们开始编码之前,我们需要知道这个快捷方式到底…

大数据(9h)FlinkSQL之Lookup Join

文章目录概述pom.xmlMySQL建表对应Flink的建表SQLLookup JoinFlinkSQL完整Java代码概述 lookup join通常是 查询外部系统的数据 来 充实FlinkSQL的主表 例如&#xff1a;事实表 关联 维度表&#xff0c;维度表在外部系统&#xff08;如MySQL&#xff09;要求&#xff1a; 1个表…

中国多媒体与网络教学学报杂志社中国多媒体与网络教学学报编辑部2022年第9期目录

多媒体信息技术《中国多媒体与网络教学学报》投稿&#xff1a;cn7kantougao163.com 采油工程探索式虚拟仿真实验教学实践——以有杆抽油系统实验为例 窦祥骥 ;何岩峰 ;张少辉 ;王相 ;徐慧 ; 1-5 人体寄生虫课程网络虚拟实验环境的构建及其应用研究 周蕾;贺帅;李晓琳;席…

深入理解mysql执行的底层机制

MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解explain以及索引优化https://blog.csdn.net/zhenghuishengq/article/details/124552080【三】深入理解mysql事务本质https://blog.cs…

3dmax如何进行网络渲染?网渲云渲染渲染农场怎么用?

渲染本身是将3d模型转换为2d图像的一个过程&#xff0c;而网络渲染就是把3d模型放在云端进行完成&#xff0c;而本地我们只需要等待结果就好。而云渲染也就是网渲的标准称呼&#xff0c;两个是一个意思。 那怎么进行网络渲染呢&#xff1f; 首先我们需要下载网络渲染客户端&a…

03-Docker-Docker镜像的分层概念

目录 一、镜像是什么 二、UnionFS&#xff08;联合文件系统&#xff09; 三、Docker镜像加载原理 四、将容器生成为镜像Commit命令 一、镜像是什么 是一种轻量级、可执行的独立软件包&#xff0c;包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖打包好…

TextBox文本框与PasswordBox密码框水印

在开发一个软件和网页的时候&#xff0c;都会有一个功能&#xff0c;那就是登陆功能&#xff0c;有了登陆那就一定需要用户输入账号和密码&#xff0c;我们在写登陆页面都会想到使用TextBox和PasswordBox去完成这两个功能&#xff0c;但是有一个问题&#xff0c;那就是如果你使…

java EE初阶 — 线程的状态

文章目录1.状态的基本认识2.观察线程的所有状态3.线程状态和状态转移4.多线程的意义1.状态的基本认识 NEW 创建了 Thread 对象&#xff0c;但是还没调用 start&#xff08;内核里还没有创建对应的PCB&#xff09;TERMINATED 表示内核中的 PCB 已经执行完毕了&#xff0c;但是 …

zabbix监控触发器与报警动作

目录 一、环境准备 1、搭建zabbix基础环境 2、创建被监控主机 二、触发器概念 三、创建触发器 1、创建触发器步骤 2、触发器表达式 &#xff08;1&#xff09;表达式格式 &#xff08;2&#xff09;表达式函数 3、配置触发器 四、创建报警动作 1、设置邮箱服务器 …