数据结构【图】

news2024/11/24 5:00:58

第六章 图

一、图
1.定义:V是顶点集,E是边集;|V|表示顶点数,称为阶;|E|表示边数;有向图叫弧<>,无向叫边() ;

  • 有向图:有方向,<v,w>的v和w之间是有序的,v弧尾(不带箭头),w弧头(带箭头);
  • 无向图:无方向,<v,w>的v和w之间是无序的;
  • 权:两顶点之间的距离;
  • 路径:两顶点间经过的点边上的数目,若第一个顶点和最后一个顶点路径相同,叫做环;如果一个图有n个顶点,且有大于n-1条边,则该图一定有环。
  • 简单路径:顶点不重复;
  • 简单回路:除第一个顶点和最后个顶点外,其余顶点也不重复出现;

2.简单图:无重复边,不存在顶点到自身的边;有n个顶点的向完有全图有n(n-1)条边;
3.完全图:任意两顶点间都存在边;有n个顶点的无向完全图有n(n-1)/2条边;

  • 完全无向图:存在两个不相同的点且两点间有一条无向边;
  • 完全有向图:存在两个不相同的点且两点间有一条弧;

4.稀疏图和稠密图:很少边,很少弧,判断标准e<nlog₂n,反之为稠密图;
5.子图和生成子图:顶点和边都属于另一个图,则叫子图;顶点数与图相等,但边只属于该图,则叫生成子图;
6.连通:在无向图中,只要存在路径就是连通的;

  • 连通图:任意两点中只要存在路径就是连通的,否则不是;
  • 连通分量:无向图的极大(极大要求该连通子图包含其所有的边)连通子图称为该图的连通分量;任何连通图的连通分量只有一个,即是自身,非连通图的无向图有多个连通分量;如果一个图有n个顶点,且小于n-1条边,则此图必为连通图;
  • 强连通图:在有向图中任意一对顶点都强连通的;
  • 强连通分量:在有向图中的极大强连通子图称为有向图的强连通分量;

7.顶点的邻接(Adjacent):对于无向图G=(V,E),若边(v,w)EE,则称顶点v和w互为邻接点,即v和w相邻接。
顶点的度、入度、出度:对于无向图G=(V,E),VvieV,图G中依附于的边的数目称为顶点的度(degree),记为TD(vi)。
显然,在无向图中,所有顶点度的和是图中边的2倍。 即 ∑TD(vi)=2e ;i=1,2…n ,e为图的边数。(度和公式)。

8.对有向图G=(V,E),若存在vi∈V ,图G中以vi作为起点的有向边(弧)的数目称为顶点vi的出度(Outdegree),记为OD(vi);以vi作为终点的有向边(弧)的数目称为顶点的入度(Indegree),记为ID(vi)。顶点的出度与入度之和称为的度,记为TD(vi)。即TD(vi)=OD(vi)+ID(vi);

二、图的存储
1.存储结构:邻接矩阵、邻接链表、邻接多重表和边表;
2.邻接矩阵(无向图和有向图都各有无权图和有权图两类)

  • 无向图的数组表示

    • 特点: 对称方阵;顶点相邻的边数等于该点度数;图所有边数等于下或上三角的非0元素的个数;

    • 无权图的邻接矩阵
      在这里插入图片描述

    • 带权图的邻接矩阵
      在这里插入图片描述

  • 有向图数组表示

    • 特点: 某行的非0元素个数对应是出度,某列的非0元素个数对应入度;

    • 无权图的邻接矩阵
      在这里插入图片描述

    • 带权图的邻接矩阵
      在这里插入图片描述

3.邻接链表法:对图的每个顶点建立一个单链表,存储该顶点所有邻接顶点及其相关信息。每一个单链表设一个表头结点。

  • 特点:对有向图可以建立正邻接表或逆邻接表;在有向图中,第i个链表中结点数是顶点的出或入度,求出或入度需要遍历整个邻接表;

  • 无向图的邻接表
    在这里插入图片描述

  • 有向图的邻接表
    在这里插入图片描述

三、图的遍历
1.图的遍历算法

  • 深度优先搜索算法:类似树的先序遍历,是树的先序遍历的推广;借助栈实现,是递归算法,空间复杂度O(V);以邻接矩阵表示时时间复杂度O(V²),以邻接表表示时时间复杂度为O(e+V);
    在这里插入图片描述

  • 广度优先搜索算法:类似于树的按层次遍历,借助队列实现,空间复杂度O(V);以邻接矩阵表示时时间复杂度O(V²),以邻接表表示时时间复杂度O(e+V);
    在这里插入图片描述

四、图的应用
1.最小生成树:如果连通图是一个带权图,则其生成树中的边也带权,生成树中所有边的权值之和称为生成树的代价。带权连通图中代价最小的生成树称为最小生成树;

  • 基本原则是:
    • 尽可能选取权值最小的边,但不能构成回路;
    • 选择n-1条边构成最小生成树。
  • 普里姆(Prim)算法:整个算法的时间复杂度是O(n²),与边的数目无关,适用于求解稠密图最小生成树。
    在这里插入图片描述
  • 克鲁斯卡尔(Kruskal)算法:整个算法的时间复杂度是O(eloge);适用于边稀疏而顶点较多的图。
    在这里插入图片描述

2.最短路径:带权有向图的最短路径,也适用于无向图。将一个路径的起始顶点称为源点,最后一个顶点称为 终点。

  • 单源点最短路径
    • 迪杰斯特拉算法:一个顶点到每个顶点的最短路径;按路径长度递增次序;时间复杂度是O(n²);
      在这里插入图片描述
  • 弗洛伊德算法:每一对顶点之间的最短路径,时间复杂度O(n³);

3.AOV网:顶点表示活动,弧表示优先关系;

  • 特点:弧表示活动间存在某种制约关系;不能出现回路;
    在这里插入图片描述
  • 拓扑排序:对一个有向图构造拓扑序列的过程;时间复杂度O(n+e);使得AOV网中所有应有存在的前驱和后继关系都能得到满足;(简单来说就是找入度为0的点然后挨个去掉);若AOV网中存在回路即写不出拓扑排序。

4.AOE网:求关键路径,基于有向图;边表示活动;AOE网中没有入边的顶点叫始点,没有出边的叫终点;

  • 关键路径:始点到终点具有最大路径长度,该路径上的各个活动所持续的时间之和的路径称为关键路径(类似工程所需的最短工期);
  • ▲关键活动:关键路径上的活动称为关键活动;
    • 事件的最早发生时间ve[k];
      在这里插入图片描述
    • 事件的最迟发生时间vl[k];
      在这里插入图片描述
    • 活动的最早开始时间e[i];
      在这里插入图片描述
    • 活动的最晚开始时间l[i];
      在这里插入图片描述
    • 关键活动:l[i]=e[i]的活动(红色部分是由关键活动组成的路径,叫关键路径);
      在这里插入图片描述

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

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

相关文章

Yarn与Zookeeper学习

YARN学习 1.YARN是什么&#xff1f; yarn 分配运行资源 mapReduce的运行平台 2.YARN运行过程&#xff1a; 客户端与ResourceManager交互&#xff0c;生成临时配置文件(Application)ResourceManager根据Application信息生成Task然后生成MapReduceApplicationMaster(简称AM)AM…

python单元测试unittest实例详解

这篇文章主要介绍了python单元测试unittest用法,以实例形式详细分析了Python中单元测试的概念、用法与相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python单元测试unittest用法。分享给大家供大家参考。具体分析如下&#xff1a; 单元测试作为任何…

用R语言来进行ababoost模型的构建

每天进步一点点&#xff0c;今天来分享怎么用R语言来进行ababoost模型的构建。 首先&#xff0c;什么是adaboost模型呢&#xff1f;它是一种迭代算法&#xff0c;属于boosting这个大类别的一员。它的核心思想是针对同一个训练集训练不同的分类器(弱分类器)&#xff0c;然后把这…

力扣题库刷题笔记118--杨辉三角

1、Python代码如下&#xff1a; 2、个人Python代码如下&#xff1a; 截图1的第5-9行和截图2的第5-6行均是生成一个元素均为1的杨辉三角。

1.前端入门

文章目录 一、基础认知1.1 认识网页&#xff1a;1.2 五大浏览器1.3 Web标准 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、基础认知 1.1 认识网页&#xff1a; 1.网页由哪些部分组成&#xff1f; 文字、图片、音频、视频、超链接。 2.我们…

Spring Security从入门到精通

Spring Security从入门到精通&#xff08;学习三更老师的视频&#xff09; 视频地址&#xff1a;我觉得讲的不赖。三更老师的Spring Security视频 课程介绍 0. 简介 ​ Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供…

接口漏洞-DVWS(XXE+鉴权)+阿里云KEY

dvws靶场 靶场&#xff1a;https://github.com/snoopysecurity/dvws-node 开启靶场&#xff0c;注册一个普通用户&#xff0c;登录成功 来到首页点击admin area 发现进入几秒钟之后又跳转回到首页&#xff0c;只有管理员admin用户才能进入。 点击admin area抓包&#xff0c;发现…

FPGA——verilog实现格雷码与二进制的转换

文章目录 一、格雷码简介二、二进制转格雷码三、格雷码转二进制四、仿真 一、格雷码简介 格雷码是一种循环二进制码或者叫作反射二进制码。跨时钟域会产生亚稳态问题&#xff08;CDC问题&#xff09;&#xff1a;从时钟域A过来的信号难以满足时钟域B中触发器的建立时间和保持时…

Python 单继承、多继承、@property、异常、文件操作、线程与进程、进程间通信、TCP框架 7.24

单继承 class luban:def __init__(self, name):self.name nameself.skill "摸鱼飞弹"self.damageLevel 20def attack(self):print("{} 使用了技能{} &#xff0c;给敌方带来了极大的困扰\n""并有{}% 的机会造成一击必杀的效果".format(self.…

初识socket编程的相关概念

文章目录 IP地址和MAC地址源IP地址和目的IP地址 端口号(port)端口号和PID 初识TCP/UDP协议TCPUDP可靠/不可靠传输 网络字节流理解socket套接字概念socket常见APIsocket接口参数中的结构体 IP地址和MAC地址 IP协议有两个版本&#xff0c;IPv4和IPv6&#xff0c;凡是提到IP协议&…

STC12C5A60S2 单片机串口2的通信功能测试

根据手册说明&#xff0c;STC12C5A60S2 系列单片机可以直接使用 reg51.h 的头文件&#xff0c;只是在用到相应的特殊功能寄存器时&#xff0c;要做相应的定义即可。 笔记来自视频教程链接: https://www.bilibili.com/video/BV1Qq4y1Z7iS/?spm_id_from333.880.my_history.page…

python绘制地图时添加比例尺

目前为止我没有找到cartopy包自动添加地图比例尺的方式&#xff0c;我结合别人的代码写了这个手动添加比例尺的函数&#xff0c;个人觉得在外观上比线段比例尺漂亮一些。之所以是手动的&#xff0c;是因为这种方法不会根据你的地图坐标系和投影自动生成比例尺&#xff0c;而需要…

SpringCloud学习路线(9)——服务异步通讯RabbitMQ

一、初见MQ &#xff08;一&#xff09;什么是MQ&#xff1f; MQ&#xff08;MessageQueue&#xff09;&#xff0c;意思是消息队列&#xff0c;也就是事件驱动架构中的Broker。 &#xff08;二&#xff09;同步调用 1、概念&#xff1a; 同步调用是指&#xff0c;某一服务…

Mysql表的查找进阶

重点细节知识&#xff1a;NULL是表示表里这个格子是空着的&#xff0c;NULL参与各种运算都是->false&#xff0c;但是只有这个才是可以用NULL等于NULL成功的 <>。,看一下&#xff0c;下图的区别&#xff0c;下面的是连空也算上了 补充一个is 用法&#xff0c;和上面语…

ubuntu docker离线安装docker(.deb包方式)(成功)(附卸载方法)

参考文章&#xff1a;Install Docker Engine on Ubuntu 文章目录 安装步骤下载安装包拷贝到目标主机并执行安装命令 验证拉取运行容器测试build dockerfile测试持久运行容器测试主机重启后&#xff0c;docker各服务是否正常自启 卸载方法附&#xff1a;各安装包作用说明&#x…

【iPadOS 开发】打开 iPad 的开发者模式的方法

文章目录 1. 前提条件2. 具体方法 1. 前提条件 iPad 通过 Type-C 线连接到 Mac Mac上已经安装 Xcode 2. 具体方法 在 Xcode 顶栏中的 Window 中打开 Devices and Simulators &#xff0c;可以看到自己的设备&#xff1a; 接着在 iPad 上进入 设置 > 隐私与安全性 > 开…

2023年Houdini电脑配置推荐,附上10款Houdini渲染器

SideFX Houdini是一款非常强大的工具&#xff0c;旨在创建最高质量的电影效果。它需要强大的系统来实现平稳的工作流程。赞奇云工作站为 SideFX Houdini找到最佳的 CPU、GPU 和渲染器。 什么是 SideFX Houdini&#xff1f; SideFX Houdini是一款 3D 动画和视觉效果软件&#…

监狱人员定位系统:提高监狱安全性及维护社会安全的工具

如何提高监狱安全性一直是社会关注的焦点。在现代化的安全管理工具中&#xff0c;监狱人员定位系统正逐渐被广泛应用于各地监狱。通过实时定位和监控&#xff0c;这一系统能够有效提高监狱安全性和管理效率&#xff0c;维护社会的安全和稳定。 那么&#xff0c;在这篇文章中&a…

Spring,SpringBoot,Spring MVC的区别是什么

1.Spring是什么 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽庞⼤的社区&#xff0c;这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景&#xff0c;它可以让 Java 企业级…

Python实现Up数据信息采集 <内含JS逆向解密>

目录标题 前言环境使用:模块使用:实现基本流程:代码展示&#xff1a;尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: python 3.8 >>> 运行代码 pycharm 2021.2 >>> 辅助敲代码 模块使用: 第三方模块 需要安装 import requests >…