06_图(Graph)

图的定义

(Graph)是由顶点的有穷非空集合和顶点之间的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点集合,E是图G中边的集合。

对于图的定义,需要注意的地方

  • 线性表中把数据元素叫元素,树中将数据元素叫结点 ,在图中数据元素,则称之为顶点(Vertex)
  • 在图结构中,不允许没有顶点
  • 线性表中,相邻的数据元素之间具有钱性关系,树结构中,相邻两层 的 结点具有层次关系,而圈中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示, 边集可以是空的。

各种图定义

  • 无向边:若顶点 V i V_i Vi V j V_j Vj,之间的边没有方向,则称这条边为无向边( Edge) ,用无序偶对( V i V_i Vi V j V_j Vj ) 来表示。

    在这里插入图片描述

    无向图 G 1 G_1 G1 G 1 = ( V 1 , E 1 ) G_1=(V_1,{E_1}) G1=(V1,E1),其中顶点集合 V 1 V_1 V1={A,B,C,D} ;边集合 E 1 E_1 E1={ ( A,B) ,(B,C) , (C,D),( D,A) , ( A,C) }

  • 有向边:若从顶点 V i V_i Vi V j V_j Vj的边有方向,则称这条边为有向边,也称为弧( Arc )。用有序偶< V i V_i Vi V j V_j Vj >来表示, V i V_i Vi称为弧尾( Tail ) , V j V_j Vj称为弧头( Head) 。

    在这里插入图片描述

    连接顶点 A 到 D 的有向边就是弧,A 是弧尾,D 是弧头, <A, D>表示弧,注意不能写成<D, A>。

    向图 G 2 G_2 G2 G 2 = ( V 2 , E 2 ) G_2=(V_2,{E_2}) G2=(V2,E2),其中顶点集合 V 2 V_2 V2={A,B,C,D} ;边集合 E 2 E_2 E2={ <A,D> ,<B,C> , <C,A>, < B,A> }

    无向边用小括号"()'" 表示,而有向边则是用尖括号"<>"表示。

在图中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。

在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图 。含有n个顶点的无向完全图有 n ( n − 1 ) / 2 n(n-1)/2 n(n1)/2条边

在这里插入图片描述

在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。

含有 n 个顶点的有向完全图有 n ( n − 1 ) n(n-1) n(n1) 条边

在这里插入图片描述

有很少条边或弧的图称为稀疏圈, 反之称为稠密图 。

假设有两个图 G = ( V { E } ) G=(V\{E\}) G=(V{E}) G ’ = ( V ’ { E ’ } ) G’=(V’\{E’\}) G=(V{E}) ,如果 V ’ ⊆ V V’\subseteq V VV E ’ ⊆ E E’\subseteq E EE ,则称 G ’ G’ G G G G 的子图(Subgraph)

图的顶点和边的关系

对于无向图 G = ( V { E } ) G=(V\{E\}) G=(V{E}),如果边 ( v , v ′ ) ∈ E (v,v')\in E (v,v)E,则称顶点 v v v v ′ v' v互为邻接点(Adjacent),即 v v v v ′ v' v邻接。边 ( v , v ′ ) (v,v') (v,v)依附( incident) 于顶点 v v v v ′ v' v ,或者说边的 与顶点 v v v v ′ v' v相关联 。 顶点 v v v的度(Degree ) 是和 v v v相关联的边的数目,记为 T D ( v ) TD(v) TD(v)

无向图 G = ( V { E } ) G=(V\{E\}) G=(V{E})中从顶点 v v v到顶点 v ′ v' v的路径(Path)是一个顶点序列 ( v = v i , 0 , v i , 1 , . . . , v i , m ) (v=v_{i,0},v_{i,1},...,v_{i,m}) (v=vi,0,vi,1,...,vi,m),其中 ( v i , j − 1 , v i , j ) ∈ E , 1 ≤ j ≤ m (v_{i,j-1},v_{i,j}) \in E , 1 \leq j \leq m (vi,j1,vi,j)E,1jm

对于有向图 G = ( V { E } ) G=(V\{E\}) G=(V{E}),如果弧 < v , v ′ > ∈ E <v,v'>\in E <v,v>∈E,则称顶点 v v v邻接到顶点 v ′ v' v,顶点 v ′ v' v邻接至顶点 v v v。弧 < v , v ′ > <v,v'> <v,v>与顶点 v v v v ′ v' v相关联 。 以顶点 v v v为头的弧的数目称为 v v v的入度(InDegree),记为 I D ( v ) ID(v) ID(v) 。以顶点 v v v为尾的弧的数目称为 v v v的出度(OutDegree),记为 O D ( v ) OD(v) OD(v)

有向图 G = ( V { E } ) G=(V\{E\}) G=(V{E}),路径是有向的,顶点序列应满足 < v i , j − 1 , v i , j > ∈ E , 1 ≤ j ≤ m <v_{i,j-1},v_{i,j}> \in E , 1 \leq j \leq m <vi,j1,vi,j>∈E,1jm

路径长度是路径上的边或弧的数目。

第一个顶点到最后一个顶点相同的路径称为回路或环(Cycle)。 序列中顶点不重复出现的路径称为简单路径 。 除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单回路或简单环。

连通图相关术语

在无向图 G G G中,如果从顶点 v v v到顶点 v ′ v' v又路径,则称 v v v v ′ v' v是连通的。如果对于图中任意两个顶点 v 1 、 v j 、 ∈ E v_1、v_j、\in E v1vjE v i v_i vi v ′ v' v都是连通的,则称 G G G是连通图(Connected Graph)。

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

  • 要是子图
  • 子图要是连通的
  • 连通子图包含有极大顶点数
  • 具有极大顶点的连通子图包含依附于这些顶点的所以边

在有向图 G G G中,如果对于每一对 v i 、 v j ∈ V 、 v i ≠ v j v_i、v_j \in V、v_i \neq v_j vivjVvi=vj,从 v i v_i vi v j v_j vj v j v_j vj v i v_i vi都存在路径,则称 G G G是强连通图。有向图中的极大强连通子图称做有向图的强连通分量。

图的存储结构

邻接矩阵

图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

设图 G 有 n 个顶点,则邻接矩阵是一个 n X n 的方阵,定义为:
a r c [ i ] [ j ] = { 1 ,若 ( v i , v j ) ∈ E 或者 < v i , v j > ∈ E 0 ,反之 arc[i][j] = \begin{cases}1, 若(v_i,v_j) \in E 或者<v_i,v_j> \in E \\0, 反之 \end{cases} arc[i][j]={1,若(vi,vj)E或者<vi,vj>∈E0,反之

无向图

在这里插入图片描述

顶点数组为 v e r t e x [ 4 ] = { v 0 , v 1 , v 2 , v 3 } vertex[4] =\{v_0,v_1,v_2,v_3\} vertex[4]={v0,v1,v2,v3} ,边数组 arc[4][4] 为上图中的矩阵,对于矩阵的主对角钱的值,即arc[0][0]、arc[1][1]、全arc[2][2]、arc[3][3]为 0 是因为不存在顶点到自身的边。arc[0][1]=1 是因为 v 0 v_0 v0 v 1 v_1 v1 的边存在,而 arc[1][3] =0 是因为 v 1 v_1 v1 v 3 v_3 v3的边不存在。并且由于是无向图, v 1 v_1 v1 v 3 v_3 v3的边不存在,意味着 v 3 v_3 v3 v 1 v_1 v1的边也不存在。所以无向固的边数组是一个对称矩阵。

  1. 判定任意两顶点是否有边无边就非常容易
  2. 某个顶点的度,其实就是这个顶点 v i v_i vi在邻接矩阵中第i行(或者i列)的元素和
  3. 求顶点 v i v_i vi的所有邻接点就是将矩阵中第i行元素扫描一遍,arc[i][j]为1的就是邻接点
有向图

在这里插入图片描述

顶点数组为 v e r t e x [ 4 ] = { v 0 , v 1 , v 2 , v 3 } vertex[4] =\{v_0,v_1,v_2,v_3\} vertex[4]={v0,v1,v2,v3} ,弧数组 arc[4][4] 为上图中的矩阵。主对角线上数值依然为0。但因为是有向图,所以矩阵并不对称。

有向图讲究入度和出度,顶点 v 1 v_1 v1的入度为1,正好是第 v 1 v_1 v1列各数之和,顶点 v 1 v_1 v1的出度为2,即第 v 1 v_1 v1行的各个数之和。

网的概念,也就是每条边上带有权的图叫做网。
a r c [ i ] [ j ] = { W i j ,若 ( v i , v j ) ∈ E 或者 < v i , v j > ∈ E 0 ,若 i = j ∞ ,反之 arc[i][j]=\begin{cases}W_{ij},若(v_i,v_j)\in E 或者<v_i,v_j> \in E \\0,若i=j\\ \infty ,反之 \end{cases} arc[i][j]= Wij,若(vi,vj)E或者<vi,vj>∈E0,若i=j,反之
这里的 W i j W_{ij} Wij表示 ( v i , v j ) (v_i,v_j) (vi,vj)或者 < v i , v j > <v_i,v_j> <vi,vj>上的权值。 ∞ \infty 表示一个计算机允许的大于所以边上权值的值。

在这里插入图片描述

邻接表

邻接矩阵是不错的一种图存储结构,但对于边数相对顶点较少的图,这种结构是存在对存储空间的极大浪费的。

邻接表的处理办法:

  • 图中顶点用一个一维数组存储,当然,顶点也可以用单链表来存储,不过数组可以较容易地读取顶点信息,更加方便。另外,对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的指针,以便于查找该顶点的边信息。
  • 图中每个顶点 v i v_i vi 的所有邻接点构成一个线性表,由于邻接点的个数不定,所以用单链表存储,无向图称为顶点 v i v_i vi 的边表,有向图则称为顶点 v i v_i vi 作为弧尾的出边表。

在这里插入图片描述

若是有向图,邻接表结构是类似的。但要注意的是有向图由于有方向,我们是以顶点为弧尾来存储边表的,这样很容易就可以得到每个顶点的出度。也有时为了便于确定顶点的人度或以顶点为弧头的弧。我们可以建立一个有向图的逆邻接表,即对每个顶点 v i v_i vi 都建立一个链接为 v i v_i vi 为弧头的表 。

在这里插入图片描述

此时我们很容易就可以算出某个顶点的入度或出度是多少,判断两顶点是否存在弧也很容易实现。

十字表

把邻接表与逆邻接表结合起来就是十字表

重新定义顶点表结点结构

datafirstinfirstout

其中 firstin 表示入边表头指针,指向该顶点的入边表中第一个结点,ftrstout 表示出边表头指针,指向该顶点的出边表中的第一个结点。

重新定义的边表结点结构

tailvexheadvexheadlinktaillink

其中tailvex 是指弧起点在顶点表的下标,headvex 是指弧终点在顶点表中的下标,headlink 是指入边表指针域,指向终点相同的下一条边,taillink是指边表指针域,指向起点相同的下一条边。如果是网,还可以再增加一个 weight 域来存储权值。

在这里插入图片描述

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

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

相关文章

国产操作系统上安装软件包及环境管理系统Conda _ 统信 _ 麒麟

原文链接&#xff1a;国产操作系统上安装软件包及环境管理系统Conda | 统信 | 麒麟 Hello&#xff0c;大家好啊&#xff01;今天我们将讨论如何在国产操作系统上安装Conda。Conda是一款开源的软件包管理和环境管理系统&#xff0c;可以轻松管理多个数据科学和机器学习环境&…

鸿蒙应用开发DevEco Studio工程目录模块介绍

面向开发者&#xff0c;HarmonyOS 推出了 DevEco Studio 和 Dev Device Tool 两款开发工具&#xff0c;前者目前迭代至 3.1 版本&#xff08;对外开放版本&#xff09;&#xff0c;用于开发 HarmonyOS 应用&#xff1b;后者用于开发智能设备 应用的工程主体结构如上图 在这里我…

05.线程

进程有哪些缺陷&#xff1f; 1.创建的代价较高 进程是OS进行资源分配的基本单位&#xff0c;也就是说创建进程是需要分配资源的&#xff0c;所以创建代价很高 2.通信不方便 进程之间要想进行通信必须借助第三方资源&#xff08;管道、内存映射、消息队列&#xff09; 线程的优…

Java开发工具Idea的下载与激活

一&#xff0c;官网下载Idea 建议从官网下载&#xff0c;安全、可靠。 1&#xff0c;点击此处进入官网下载 2&#xff0c;进入官网之后点击[Support]&#xff0c;点击浮窗左侧[Download and Install] 3&#xff0c;跳入如下新界面&#xff0c;点击Download进入下载界面 4&am…

汇昌联信数字:拼多多如何开个人店铺?有哪些教程?

在互联网经济飞速发展的当下&#xff0c;电子商务平台如雨后春笋般涌现&#xff0c;其中拼多多以其独特的社交电商模式迅速崛起&#xff0c;吸引了大批商家和个人卖家入驻。如果你正考虑在拼多多开设个人店铺&#xff0c;那么了解开店流程和相关教程就显得尤为重要。以下是关于…

水面垃圾监测识别摄像机

随着城市化进程的加快和旅游业的兴起&#xff0c;水域环境污染问题日益突出&#xff0c;水面垃圾成为环境保护的重要问题。为有效监测和清理水面垃圾&#xff0c;水面垃圾监测识别摄像机应运而生。水面垃圾监测识别摄像机利用高清晰度摄像头和智能识别算法&#xff0c;能够实时…

大语言模型LLM原理篇

大模型席卷全球&#xff0c;彷佛得模型者得天下。对于IT行业来说&#xff0c;以后可能没有各种软件了&#xff0c;只有各种各样的智体&#xff08;Agent&#xff09;调用各种各样的API。在这种大势下&#xff0c;笔者也阅读了很多大模型相关的资料&#xff0c;和很多新手一样&a…

STL-Setmap

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;我们将进入到CSTL 的学习。STL在各各C的头文件中&#xff0c;以源代码的形式出现&#xff0c;不仅要会用&#xff0c;还要了解底层的实现。源码之前&#xff0c;了无秘密。 STL六大组件 Container通过Allocator取得数据储存…

【XR806开发板试用】试用SWD+Jlink调试

XR806开发板&#xff0c;只能使用编写代码&#xff0c;然后通过UART下载&#xff0c;没法在线debug&#xff0c; 效率会差很多&#xff0c;官方没有提供这一方面的资料。 先查CPU&#xff0c; 官方介绍是arm-china的MC1&#xff0c;通过armv8 Architecture refenence manual资料…

利用106短信群发平台能否提升沟通效率?

利用106短信群发平台确实能够显著提升沟通效率&#xff0c;具体体现在以下几个方面&#xff1a; 1.快速传递信息&#xff1a;106短信群发平台能够实现信息的快速传递。一旦设置好发送内容和接收群体&#xff0c;短信便能在瞬间发送至大量用户。这种即时性确保了信息的迅速传达…

Gitlab:从其它项目组里导入一个项目

1.首先获取原项目的http地址 http://ip/projectGroup/ProjectX.git其中&#xff0c;ip 为公司gitlab内网地址。 2.进入目的项目组进行创建 首先&#xff0c;需要拥有一个该组拥有者权限的账号&#xff0c;才能进行后续的操作。 2.1.点击创建项目按钮 2.2.选择导入项目 其中…

11.买卖股票的最佳时机Ⅰ

文章目录 题目简介题目解答解法一&#xff1a;一次遍历代码&#xff1a;复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 买卖股票的最佳时机面试题Ⅰ 相关的讲解&#xff01;&#x1f600; 题目简介 题目解答 解法一&#xff1a;一次遍历…

怎么让电脑耳机和音响都有声音

电脑耳机音响不能同时用没声音怎么办 一般来说&#xff0c;重新开机后问题能够得到解决。右击“我的电脑”---“属性”---“硬件”---“设备管理器”&#xff0c;打开“声音、视频和游戏控制器”有无问题&#xff0c;即看前面有没有出现黄色的“”。 如果您的 电脑 耳机能正常…

【Linux系统编程】第十六弹---冯诺依曼体系结构与操作系统

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、冯诺依曼体系结构 2、操作系统原理 2.1、什么是操作系统&#xff1f; 2.2、用图解释操作系统 2.3、理解操作系统 总结 …

路由器、交换机和网卡

大家使用VMware安装镜像之后&#xff0c;是不是都会考虑虚拟机的镜像系统怎么连上网的&#xff0c;它的连接方式是什么&#xff0c;它ip是什么&#xff1f; 路由器、交换机和网卡 1.路由器 一般有几个功能&#xff0c;第一个是网关、第二个是扩展有线网络端口、第三个是WiFi功…

在做题中学习(55):一维前缀和模板

【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) 题目解释&#xff1a; 注意&#xff1a;下标从1开始的。 l 和 r就是对这n个整数去取一个区间&#xff0c;例如示例一&#xff1a; (1,2) 区间 就是算出1 2 4 中 1&#xff0c;2下标对应值的和&#xff0c;12 3 同理,(2,3) …

SHAP分析+立方样条拟合的展示可能的交互作用

SHAP分析立方样条的拟合展示可能的交互作用 SHAP分析的另一个特点就是对交互作用的分析&#xff0c;计算交互作用的SHAP值&#xff0c;绘制相关的交互作用图表&#xff0c;但是仅局限于xgboost模型&#xff0c;其它的模型不能单独计算相互作用的SHAP值&#xff0c;也就不能绘制…

React 第二十九章 React 和 Vue 描述页面的区别

面试题&#xff1a;React 和 Vue 是如何描述 UI 界面的&#xff1f;有一些什么样的区别&#xff1f; 标准且浅显的回答&#xff1a; React 中使用的是 JSX&#xff0c;Vue 中使用的是模板来描述界面 前端领域经过长期的发展&#xff0c;目前有两种主流的描述 UI 的方案&#xf…

读写备份寄存器BKP与实时时钟RTC

文章目录 读写备份寄存器接线图代码 RTC实时时钟接线图代码 读写备份寄存器 接线图 即接个3.3v的电源到VBT引脚 代码 代码效果&#xff1a;第一次写入备份寄存器&#xff0c;下载程序后再注释掉&#xff0c;再进行下载&#xff0c;之前写入的数据还会保存在备份寄存器中&am…

QQ无人直播秘籍:24小时自动化短剧,边睡边赚,月入过万实战分享!

在如今经济大环境如此糟糕的时代&#xff0c;寻找一种简单、有效的方式来实现日入1000的梦想成为了许多人的追求。而QQ短剧24小时无人直播项目&#xff0c;则是一个备受瞩目的赚钱机会。借助腾讯官方流量扶持&#xff0c;这个项目不仅能够让创业者轻松入门&#xff0c;还能够实…