数据结构之图

图(Graph)是比树还要难以理解和学习的“多对多”数据结构,可以认为树也是图的一种。图的知识点众多,按照存储路径的方向分,可分为无向图和有向图,按照图的存储结构分,可分为完全图与有向完全图、连通图与强连通图、连通分量与强连通分量、无环图与有向无环图,其涉及的算法则包括克鲁斯卡尔算法、普里姆算法、迪杰斯特拉算法和弗洛伊德算法等。如下图所示为图的分类。
在这里插入图片描述

与表和树相同,图虽然有“多对多”的逻辑关系,但同样可以使用顺序存储和链式存储有效地保存数据元素:与表和树不同的是,图的顺序存储需要两个数组(包含一个二维教组),链式存储则包括邻接表、邻接多重表和十字链表等。
与表和树不同,图中存储的数据元素不叫节点,我们称其为顶点;若两个顶点直接相连,则称它们互为邻接点:两个顶点及它们中间途径的所有顶点组成的序列称为路径;用字母V表示图中顶点的集合, V R V_R VR表示图中顶点之间关系的集合。

注意:如果路径的始末点相同,则该路径为“回路”或“环”。

按存储路径方向分类

按存储路径的方向,图分为单向图和双向图。单向/双向图的区别就是看路径上有没有箭头,无箭头(双向)的图为无向图,有箭头(单向)的图为有向图。如下图所示为单向/双向图的分类。
在这里插入图片描述

1.无向图

在无向图中(如下图所示),相连的两个顶点互相建立联系,顶点的集合可表示为 V = { V 1 , V 2 , V 3 , V 4 , V 5 , V 6 , V 7 } V=\{V1,V2,V3,V4,V5,V6,V7\} V={V1,V2,V3,V4,V5,V6,V7}顶点关系的集合可表示为 V R = { ( V 1 , V 2 ) , ( V 1 , V 3 ) , ( V 2 , V 4 ) , ( V 2 , V 5 ) , ( V 4 , V 5 ) , ( V 3 , V 6 ) ( V 3 , V 7 ) , ( V 6 , V 7 ) } V_R=\{ (V1,V2),(V1,V3),(V2,V4),(V2,V5),(V4,V5),(V3,V6)(V3,V7),(V6,V7) \} VR={(V1,V2),(V1,V3),(V2,V4),(V2,V5),(V4,V5),(V3,V6)(V3,V7),(V6,V7)}
在这里插入图片描述

2. 有向图

在有向图中(如下图所示),箭头出发的顶点称为“初始点”或“弧尾”,箭头指向的顶点称为“终端点”或“弧头”,指向某一顶点的箭头数称为该顶点的“入度”(InDegree,项点V的入度可表示为 ID(V)),离开某一顶点的箭头数称为该顶点的“出度”(OutDegree,顶点V的出度可表示为 OD(V))。
在这里插入图片描述
和无向图不同,在有向图中,各个项点之同的关系是“单向”的。在无向图中,用(V1,V2)表示两个顶点间的二元关系,并将其称为“边”:在有向图中,用<V1,V2>表示两个顶点间的二元关系,并将其称为“弧”。

按存储结构分类

除了无向图和有向图之外,根据图的存储结构,图又可分为完全图与有向完全图、连通图与强连通图、连通分量与强连通分量、无环图与有向无环图,如下图所示。
在这里插入图片描述

1. 完全图与有向完全图

完全图指各顶点与其他顶点均有联系的无向图,满足该条件的有向图即为有向完全图,如下图所示。
在这里插入图片描述
在这里插入图片描述
一定要分清的是:具有n个顶点的完全图拥有 n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n1)条边,具有n个顶点的有向完全图拥有n(n-1)条弧。

2.连通图与强连通图

如果图的两个顶点之间至少存在一条路径,则称这两个顶点是连通的。如果无向图中的任意两个顶点都是连通的,则称其为连通图。同理,满足该条件的有向图即为强连通图。如下图所示为连通图与强连通图。
在这里插入图片描述
在这里插入图片描述
显而易见,完全图一定是连通图,而有向完全图一定是强连通图。

3. 连通分量与强连通分量

如果无向图不是连通图,但其最大连通子图符合连通图的定义,则称该子图为连通外量。同理,满足该条件的有问图即为强连通分量。如下图所示为连通分量与强连通分量示意图。
在这里插入图片描述
在这里插入图片描述

注意:连通分量的前提是其必须是非连通图。

4. 无环图与有向无环图

无环图就容易理解了,没有回路(环)的无向图都为无环图。同理,满足该条件的有向图即为有向无环图。如下图所示为无环图与有向无环图。

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

InstantID: Zero-shot Identity-Preserving Generation in Seconds

文章目录 IntroductionMainReference 记录由国内首创的一个好玩的小项目,图像生成领域的新进展。但我希望现阶段计算机视觉领域的研究能更聚焦在 语义分割 和 三维视觉 上,这样能更方便与机器人等产品和工业实体结合。 Introduction InstantID 是一个基…

phpstudy安装并运行redis

对于一个菜鸟来说,任何一个小步骤都可能研究半天,比如“phpstudy安装并运行redis”这一问题,解决好后第一时间记录下来,方便日后查看,也为遇到同样困难的小伙伴提供个参考! 一、phpstudy安装redis 1.打开…

部署monggodb副本集分片集群

分片技术,可以满足MongoDB数据量大量增长的需求。当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。…

不废话的将ts一篇文章写完

写在前面 网上很多写ts的教程的,但是我觉得写的太繁琐了,这里我直接将基础用法写上,包括编译后的js代码,以便于你们进行对比, 包括一些常见的报错信息,你们可以对比一下报错信息, 我尽量不废话的…

图形化编程:Scratch与6547网题库的奇妙结合

随着科技的飞速发展,编程教育逐渐成为孩子们不可或缺的技能。其中,图形化编程因其简单易懂的特性,受到了广大儿童的喜爱。Scratch,这一由麻省理工学院开发的编程工具,正是引领这一风潮的佼佼者。与此同时,6…

LeetCode202. 快乐数

202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为…

HTML5的新特性

目录 一&#xff0c;新增语义化标签 二&#xff0c;新增的多媒体标签 三&#xff0c;新增input表单 四&#xff0c;新增的表单属性 一&#xff0c;新增语义化标签 二&#xff0c;新增的多媒体标签 1&#xff0c;音频&#xff1a;<audio>.。。用MP3 <audio src…

JavaScript 基础五 对象

JavaScript 基础五 对象 1. 对象2. 对象使用① 声明语法② 对象有属性和方法组成③ 属性对象属性的增删改查操作 ④ 方法 3. 对象遍历实例 4. 内置对象① 内置对象② 内置对象Math属性方法 引入&#xff1a;保存网站用户信息&#xff0c;比如姓名、年龄、电话号码&#xff0c;用…

ENG-2,可用于监测细胞内钠离子的动态变化

Replacement of Asante NaTrium Green-2 AM钠离子指示探针&#xff0c;ENG-2&#xff0c;可用于监测细胞内钠离子的动态变化 您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;Replacement of Asante NaTrium Green-2 AM钠离子指示探针&#xff0c;ENG-2 一、基本信…

如何对视频进行翻译

下载视频和翻译软件 视频和翻译软件点击下载就行了&#xff0c;下载之后解压&#xff0c;然后把两个exe点一下。接下来如果资金充裕或者要求比较高的可以使用各个api&#xff0c;网站里有视频介绍了。 经济适用视频翻译 原理简析 首先这个软件对视频的翻译的流程大致如下&a…

使用Python的Turtle模块简单绘制烟花效果

import turtle import random# 初始化屏幕 screen turtle.Screen() screen.bgcolor("black") screen.title("烟花模拟")# 创建一个Turtle来绘制烟花 firework turtle.Turtle() firework.hideturtle() firework.speed(0) # 设置绘图速度为最快# 绘制烟花…

如何系统的自学Python?通义千问、讯飞星火、文心一言及ChatGPT的回答

如何系统的自学Python&#xff1f;来看看通义千问、讯飞星火、文心一言及ChatGPT的回答. 第一个是马老师的通义千问 系统地自学Python是一个循序渐进的过程&#xff0c;从基础语法到实践项目&#xff0c;再到专业领域的深入学习。下面是一个详细的步骤指南&#xff1a; 了解Py…

vulhub靶机activemq环境下的CVE-2015-5254(ActiveMQ 反序列化漏洞)

影响范围 Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0 远程攻击者可以制作一个特殊的序列化 Java 消息服务 (JMS) ObjectMessage 对象&#xff0c;利用该漏洞执行任意代码。 漏洞搭建 没有特殊要求&#xff0c;请看 (3条消息) vulhub搭建方法_himobrinehacken的博客-CSD…

秦始皇帝陵K0007陪葬坑文物展览与文物预防性保护的璀璨交汇

秦始皇帝陵博物院近日迎来了一场引人注目的展览——“何止秦俑——秦陵苑囿之K0007陪葬坑”。此次展览首次集中展示了K0007陪葬坑出土的别具一格的陶俑、鲜活灵动的青铜水禽等珍贵文物。然而&#xff0c;这些文物的安全展出离不开高科技的监测平台与实时终端的24小时不间断保护…

英语不太行?数模美赛必备的翻译工具!

DeepL翻译:全世界最准确的翻译&#xff08;自称&#xff09; 网址&#xff1a;https://www.deepl.com/translator 优点&#xff1a;在专有名词翻译方面很准确&#xff0c;适合学术论文,可免费全文件翻译 缺点&#xff1a;全文件翻译时格式较乱&#xff0c;不过可以用于帮助初步…

Qt第一个项目(元对象系统)

效果是这样的&#xff0c;点击boy长大一岁或者girl长大一岁 qt的文件构造都是两个头文件三个源文件&#xff0c;源文件中有个cpp文件&#xff0c;它是程序的入口&#xff0c;一个项目中只能有一个main函数 #include "widget.h"#include <QApplication>int mai…

C#用正则表达式Regex.Matches 方法检查字符串中重复出现的词

目录 一、Regex.Matches 方法 1.重载 二、Matches(String, String, RegexOptions, TimeSpan) 1.定义 2.示例 三、Matches(String, String, RegexOptions) 1.定义 2.示例 3.示例&#xff1a;用正则表达式检查字符串中重复出现的词 四、Matches(String, Int32) 1.定义…

DRV8301 踩坑记,Status1 D10 老是 Fault

波形如上&#xff1a; 看第一个时钟出来的数据&#xff08;Status1 读完自动清除&#xff1f;&#xff09;&#xff0c;因此数据是&#xff1a;0x20 输入结构体解析&#xff1a; 可以看到&#xff0c;FETHA_OC了也就是A桥上管过流了&#xff1b; 检查一下硬件看看&#xff1…

nodejs+vue+ElementUi高校创业项目申报系统w6f1g

此系统设计主要采用的是nodejs语言来进行开发&#xff0c;采用vue框架技术&#xff0c;框架分为三层&#xff0c;分别是控制层Controller&#xff0c;业务处理层Service&#xff0c;持久层dao&#xff0c;能够采用多层次管理开发&#xff0c;对于各个模块设计制作有一定的安全性…

Lazysysadmin

信息收集 # nmap -sn 192.168.1.0/24 -oN live.port Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-30 21:10 CST Nmap scan report for 192.168.1.1 (192.168.1.1) Host is up (0.00075s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nma…