算法通关第二十关-青铜挑战认识图结构

大家好我是苏麟 , 今天来聊聊图结构 .

我们平时在工作、学习中会大量使用图结构,不过呢在使用代码进行具体实现的时候极少使用图,主要是图里容易产生环,难以处理。
在算法里,考察图也不是很多,主要是图的表示非常复杂,初始化一个图就需要几十行代码,非常不利于面试。不过呢,在笔试、校招等场景还是可能考察图,所以为了提高自己的胜算,我们有必要掌握必要的图问题。

前面我们学了线性表和树,线性表局限于一个直接前驱和一个直接后继的关系,树也只能有一个直接前驱也就是父节点,当我们需要表示多对多的关系时,就用到了图。

图,是一种比树更为复杂的数据结构。树的节点之间是一对多的 关系,并且存在父与子的层级划分;而图的顶点(注意,这里不叫节点)之间是多对多的关系,并且所有顶点都是平等的,无所谓谁是父 谁是子。

在生活中,图这种数据结构的应用比比皆是。在交通当中,也常常涉及图的应用。

假设某个城市的地铁线路如下:

这些许许多多地铁站所组成的交通网络,也可被认为是数据结构当中的图。

图的定义与术语总结

  1. 图按照有无方向分为无向图和有向图。无向图自顶点和边构成,有向图由顶点和弧何成。弧有弧尾和弧头之分。
  2. 图按照边或弧的多少分稀疏图和稠密图。如果任意两个顶点之间都存在边叫完全图,有向的叫有向完全图。若无重复的边或顶点到自身的边则叫简单图。
  3. 图中顶点之间有邻接点、依附的概念。无向图顶点的边数叫做度,有向图顶点分为入度和出度。
  4. 图上的边或弧上带权则称为网。
  5. 图中顶点间存在路径,两顶点存在路径则说明是连通的,如果路径最终回到起始点则称为环,当中不重复叫简单路径。若任意两顶点都是连通的,则图就是连通图,有向则称强连通图。图中有子图,若子图极大连通则就是连通分量,有向的则称强连通分量。
  6. 无向图中连通旦n个顶点n-l条边叫生成树。有向图中一顶点入度为。其余顶点入度为1的叫有向树。一个有向固自若干棵有向树构成生成森林。

图的基本概念

为了方便处理,我们会将图抽象为只有顶点(vertex)和边的结构(edge),如下图所示

根据边是否有向,可以将图分为有向图和无向图。而根据顶点之间的边是否有权重,又分为带权图和不带权的图。

而不同顶点之间能够连通的线路就称为路径(Path),例如在上述中间有向图中C到D的路径为”C->B>D“,但是从D到C则没有路径,这称为两个结点不可达。

图结构常用来存储逻辑关系为“多对多”的数据。比如说,一个学生可以同时选择多门课程,而一门课程可以同时被多名学生选择,学生和课程之间的逻辑关系就是“多对多”。再举个例子, {V1,V2,V3,V4} 中各个元素之间具有的逻辑关系如下图所示 :

上图中,从V1可以找到V3、V4、V2,从 V3、V4、V2也可以找到 V1,因此元素之间具有“多对多”的逻辑关系,存储它们就需要用到图结构。

和链表不同,图中存储的各个元素被称为顶点(而不是节点)。拿上图来说,图中含有4个顶点,分别为顶点V1、V2、V3 和 V4。

通常情况下,我们习惯用 Vi 表示图中的顶点,且所有顶点构成的集合通常用 V 表示。比如说,上图中顶点的集合为 V={V1,V2,V3,V4}。

上图中各个顶点之间的关系都是双向的,这种情况下我们更习惯用下图来表示各个元素之间的关系 :

由 V1 可以找到 V2,同样由 V2 也可以找到 V1。类似上图这样,各个元素之间的联系都是双向的,这样的图结构称为无向图。如果元素之间存在单向的联系,那么这样的图结构称为有向图,例如:

从上面几个图,我们可以得到两个重要的结论 :

  • 图中各个顶点的地位是一样的,各个边的地位也是一样的。我们知道树是有根节点的,其他结点都要严格的满足树的要求,而图中各个顶点的等价的,你可以将任何一个视为起始点,任何一个视为终点
  • 对于无向图,如果一个图有n个顶点,那么最少需要n-1条边,最多有n(n-1)/2条边。例如,n=5时最少和最多的边如下:

弧头和弧尾
有向图中,无箭头一端的顶点通常被称为"初始点"或"孤尾",箭头一端的顶点被称为"终端点"或"孤头"

入度和出度
对于有向图中的一个顶点 V 来说,箭头指向 V 的的数量为 V 的入度 (InDegree,记为 ID(V));箭头远离 V 的孤的数量为 V 的出度 (OutDegree,记为OD(V)) 。拿图中的顶点 V1来说,该顶点的入度为1,出度为 2,该顶点的度为 3.

(V1,V2) 和 <V1,V2> 的区别
无向图中描述两顶点 V1和 V2 之间的关系可以用(V1,V2) 来表示

有向图中描述从 V1 到 V2 的"单向"关系可以用 <V1,V2>来表示。


 

由于图存储结构中顶点之间的关系是用线来表示的,因此(V1,V2)还可以用来表示无向图中连接 V1 和 V2的线,又称为边:同样,<V1.V2> 也可用来表示有向图中从 V1 到 V2 带方向的线,又称为弧

集合VR
图中习惯用 VR 表示图中所有顶点之间关系的集合。

例如,图中无向图的集合 VR={(v1,v2),(v1,v4),(v1,v3),(v3,v4)}

图中有向图的集合 VR={<v1,v2>,<v1,v3>,<v3.v4>,<v4.v1>}.

路径和回路
无论是无向图还是有向图,从一个顶点到另一顶点途经的所有顶点组成的序列(包含这两个顶点),称为条路径。如果路径中第一个顶点和最后一个顶点相同,则此路径称为"回路”(或"环")。
在此基础上,若路径中各顶点都不重复,此路径被称为"简单路径",若回路中的顶点互不重复,此回路被称为"简单回路”(或简单环)。


拿图来说,从 V1 存在一条路径还可以回到 V1,此路径为{V1,V3,V4,V1},这是一个回路(环),而目还是一个简单回路 (简单环) .
在有向图中,每条路径或回路都是有方向的 .

权和网
有些场景中,可能会为图中的每条边赋予一个实数表示一定的含义,这种与边(或弧)相匹配的实数被称为"权",而带权的图通常称为网。例如:

子图
指的是由图中一部分顶点和边构成的图,称为原图的子图

连通图
前面讲过,图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的。例如图中,虽然V1 和 V3 没有直接关联,但从 V1 到 V3 存在两条路径,分别是 V1-V2-V3 和 V1-V4-V3,因此称 V1 和 V3 之间是连通的。

无向图中,如果任意两个顶点之间都能够连通,则称此无向图为连通图。例如,图中的无向图就是一个连通图,因为此图中任意两顶点之间都是连通的。

强连通图
有向图中,若任意两个顶点 Vi 和 Vj,满足从 V到 V 以及从 V到 Vi 都连通,也就是都含有至少一条通路,则称此有向图为强连通图。如图所示就是一个强连通图。

与此同时,若有向图本身不是强连通图,但其包含的最大连通子图具有强连通图的性质,则称该子图为强连通分量。

强连通分量如上图所示,整个有向图虽不是强连通图,但其含有两个强连通分量。

这期就到这里 , 下期见!

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

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

相关文章

我的前端成长之路:中医药大学毕业的业务女前端修炼之路

大家好&#xff0c;我是风月&#xff0c;2014年二进宫进入阿里&#xff0c;目前是业务平台体验技术数据服务前端团队负责人&#xff0c;负责 BizCharts 横向建设以及财鲸数据业务支撑。本次分享我将回顾作为业务前端从前端工程转型到数据可视化过程中的心路历程。 前端工程师的…

过去5年,PolarDB云原生数据库是如何进行性能优化的?

云数据库实现计算存储分离&#xff0c;支持计算与存储的独立扩展&#xff0c;其用户还可以享受按量付费等特性。这使得基于云数据库的系统更加高效、灵活。因此&#xff0c;构建并使用云原生数据库的势头愈演愈烈。另一方面&#xff0c;云化存储服务已经是云的标准能力&#xf…

ChatGPT 玩「脱」了,写了份毁灭人类计划书,还遭到了 Stack Overflow 的封杀.........

【CSDN 编者按】OpenAI 的新通用聊天机器人原型 ChatGPT 可谓是风靡一时&#xff0c;但却突遭 StackOverflow 封禁。整理 | 刘春霖 责编 | 张红月出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;在上周发布的《挑战 Google 搜索&#xff1f;OpenAI 发布最强 …

基于任务调度的企业级分布式批处理方案

背景 先来谈下什么是分布式批处理&#xff0c;从字面来理解就是有大批量的业务数据需要应用程序去批量计算处理&#xff0c;而通过单机模式去执行会耗费很长的处理时间&#xff0c;也不能充分发挥业务集群中每个应用节点处理能力。通过一些常见的分布式批处理方案&#xff0c;…

如何用一个插件解决 Serverless 灰度发布难题?

导读本文适合&#xff1a;想了解 Serverless 灰度发布的同学。认为当前 Serverless 灰度发布配置太复杂&#xff0c;寻求简洁版灰度发布流程的同学。想了解 Serverless Devs 组件和插件之间关系的同学。Serverless 灰度发布 什么是 Serverless ? Serverless 顾名思义就是无服…

阿里云云原生一体化数仓 — 分析服务一体化新能力解读

分析服务一体化一直都是阿里云离线实时一体化数仓的重要能力创新 分析服务一体化需求分析 业务在线化、运营精细化驱动数据实时化 随着互联网的信息&#xff0c;业务对于在线化、运营精细化的需求日益强烈&#xff0c;领导驾驶舱、实时大屏等&#xff0c;起到了越来越重要的…

Fortinet谢青:有信心在未来几年跻身SD-WAN市场份额首位

自创立以来&#xff0c;Fortinet始终引领网络和安全行业的融合创新发展&#xff0c;跻身变革前沿20余载。作为创始人、董事会主席兼首席执行官&#xff0c;谢青专门就目前行业的关键发展趋势、业务发展动向以及 Fortinet 如何帮助广大用户实现可持续发展目标畅谈了其观点和看法…

一位 sealer maintainer 的心路历程

引言 在 2021 年四月左右&#xff0c;我有幸在 sealer 启动初期了解到其相关工作&#xff0c;并且不久后就作为初始的几位开发同学之一&#xff0c;加入到了 sealer 的开发工作中。 本文&#xff0c;我将回顾个人参与 sealer 开源项目的机缘巧合&#xff0c;参与过程中的挑战…

龙蜥社区开源 coolbpf,BPF 程序开发效率提升百倍

引言 BPF 是一个新的动态跟踪技术&#xff0c;目前这项技术正在深刻的影响着我们的生产和生活。BPF 在四大应用场景发挥着巨大作用&#xff1a; 系统故障诊断&#xff1a;它可以动态插桩透视内核。网络性能优化&#xff1a;它可以对接收和发送的网络包做修改和转发。系统安全…

线上故障突突突?如何紧急诊断、排查与恢复

概述 稳定性大于一切&#xff0c;因此我们需要有更有效的方式避免线上故障。在发生故障不可避免的假设下&#xff0c;我们需要能够快速修复&#xff0c;减少线上影响。基于以上这些想法&#xff0c;我们提出了 1-5-10 的快恢目标&#xff0c;所谓 1-5-10 的目标就是是要我们对…

巧用 API 网关构建大型应用体系架构

近期阿里云重磅发布了BizWorks一体化的云原生应用的开发和运营平台&#xff0c;内置阿里巴巴业务中台构建的最佳技术实践。BizWorks提供的产品能力&#xff0c;普遍适用于企业云原生应用高效开发以及企业业务能力沉淀和复用的场景。BizWorks提供业务架构师一整套的可视化业务建…

可观测|时序数据降采样在 Prometheus 实践复盘

基于 Prometheus 的监控实践中&#xff0c;尤其是在规模较大时&#xff0c;时序数据的存储与查询是其中非常关键&#xff0c;而且问题点较多的一环。如何应对大数据量下的长周期查询&#xff0c;原生的 Prometheus 体系并未能给出一个令人满意的答案。对此&#xff0c;ARMS Pro…

倒计时1天!中国移动算力网络创新成果即将发布!

数字时代&#xff0c;随着计算机技术的普及&#xff0c;电脑及相关电子产品日新月异&#xff0c;给人们日常生活带来了翻天覆地的变化。多样化的电脑功能提高了各项事务协同管理的便捷性&#xff0c;电脑游戏也极大地丰富了人们的娱乐生活。未来电脑又会使人们的办公模式、娱乐…

托管式服务网络:云原生时代的应用体系架构进化

背景 回顾下应用服务架构体系的演进。从服务调用方与提供方的处理方式来看, 可以分为 3 个阶段。 第一个阶段是集中式负载均衡, 也就是说服务调用方是通过一个外部的负载均衡路由到对应的服务提供方。其优势显而易见, 对应用本身无侵入, 可以支持多语言多框架来开发实现应用本…

深度|为什么一定要从DevOps走向BizDevOps?

数字经济时代&#xff0c;数字化转型成为社会的普遍共识和行动。越来越多的业务运行在数字化基座之上&#xff0c;软件系统正成为业务创新的价值核心和创新引擎。在这一趋势下&#xff0c;软件产业面临着许多新挑战和新机遇&#xff1a;一方面&#xff0c;万物互联下软件系统规…

科普达人丨一文看懂阿里云的秘密武器“神龙架构”

在一台电脑中&#xff0c;我们把CPU和硬盘比作一家公司的加工厂和仓库&#xff0c;那么两个部门的任务就是处理数据和存储数据。 但是因为土地价格和劳动力价格差异较大等因素&#xff0c;需要将两个部门分别建在不同的地方&#xff0c;这也就是在云上的情况&#xff0c;也就是…

卓越工程实践之—前端高质量单测

高单测等于高质量&#xff1f; 笔者负责的npm包是 ICBU信天翁低代码平台渲染引擎&#xff0c;160应用 600页面基于该引擎开发&#xff0c;内网日npm下载 1K。经过不懈努力&#xff08;CV&#xff09;&#xff0c;终于把单测提到了95%。 然而&#xff0c;虽然在覆盖率上获得了…

中国移动云电脑重磅发布,又一场革命到来!

12 月 11 日&#xff0c;2022 中国移动全球合作伙伴大会产业链创新暨算力网络分论坛顺利举办。会上&#xff0c;中国移动基于算力网络战略下的扛鼎力作——中国移动云电脑重磅发布&#xff01;中国移动云能力中心总经理方力表示&#xff1a;“它将会成为中国移动算力网络对外输…

PolarDB-X 如何做分布式数据库热点分析

背景 PolarDB-X是一款计算存储分离的分布式数据库&#xff0c;分布式的处理能力是PolarDB-X的核心特性之一&#xff0c;单个数据库实例的多个计算节点会均摊全部的SQL流量&#xff0c;这样就可以通过节点的扩缩容来快速满足不同的流量峰值场景。 在PolarDB-X 1.0时代&#xff…

说说关系型数据库与Serverless

它是站在海岸遥望海中已经看得见桅杆尖头了的一只航船&#xff0c;它是立于高山之巅远看东方已见光芒四射喷薄欲出的一轮朝日&#xff0c;它是躁动于母腹中的快要成熟了的一个婴儿。-- 星星之火&#xff0c;可以燎原一、关于Serverless 看到如今Serverless在云计算行业喷薄欲出…