【数据结构(28)】6.4 图的存储结构

这篇具有很好参考价值的文章主要介绍了【数据结构(28)】6.4 图的存储结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  • 由于图的结构比较复杂,任意连个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,即图没有顺序存储结构,但是可以借助二维数组来表示元素之间的关系,即邻接矩阵表示法
  • 另一方面,由于图的任意两个顶点减都可能存在关系,因此,用链式存储表示图是很自然的事情,图的链式存储方式有多种,有邻接表、十字链表、邻接多重表

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

重点介绍

  • 邻接矩阵(数组)表示法。
  • 邻接表(链式)表示法。

一、邻接矩阵(数组)表示法

建立一个顶点表记录各个顶点的信息)和一个邻接矩阵表示各个顶点之间的关系

  • 假设图 A = (V,E) 有 n 个顶点,则:

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 图的邻接矩阵是一个二维数组 A.arcs[n][n],定义为:

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

1. 无向图的邻接矩阵

图有 n 个顶点,这个邻接矩阵就用 n x n来表示。
因为要描述任意两个顶点之间的关系,任意两个顶点都需要描述它们两个之间有没有边。

下图有五个顶点,那么就需要一个 5x5的方阵。

  • 如果两个顶点之间存在邻接(有边)关系,那么邻接矩阵的值就是 1,反之为 0。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 先观察 V1,V1到V2、V4有边记为1,其余顶点没有边记为0。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 观察 V2,V2 到 V1、V3、V5 都有边记为1,其余记为0。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 之后再观察 V3、V4、V5 到其余各顶点的情况,最后就得到了这个图的邻接矩阵

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

1.1 无向图邻接矩阵的特点

  1. 对角线上的值都是 0
    • 因为对角线上都是每一个顶点和自身之间的关系,顶点没有到自身的边。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  1. 无向图的邻接矩阵是个对称矩阵
    • 无向图的某两个顶点之间存在边,V1和V2之间存在边,是邻接关系。同理V2和V1之间也存在着边,也是邻接关系。
    • 两个顶点之间如果有边,这两个顶点之间互为邻接关系

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  1. 顶点 i 的 = 第 i 行(列)中为 1的个数。
    • 如:V1 所在的那一行有两个1,所以V1的度(与该顶点相关联的边的数量)为2。

特别完全图的邻接矩阵中,对角元素为 0,其余为1

2. 有向图的邻接矩阵

  • 首先,矩阵有几行几列任然取决于顶点的个数。
  • 在有向图中两个顶点之间的关系是有向的,顶点之间的边称作

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

矩阵表示

如果存在着由当前顶点发出的弧,就在邻接矩阵当中记录一个1。没有发出弧的顶点在邻接矩阵中的值全为0。

  1. V1 顶点出发,发出了两条弧,一条弧到 V2,一条弧到 V3,那么就在 V1 行的 V2 列和 V3 列记录一个1,其余记为 0。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  1. V2 顶点没有发出任何弧,那么从 V2 顶点到其他所有顶点的邻接矩阵的值都为0。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  1. 剩下的 V3 只发出来一条到 V4 的弧,V4 只发出了一条到 V1 的弧。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

在有向图的邻接矩阵中

  • i 行含义:以结点为 Vi 为尾的弧(即出度边)。
  • i 列含义:以结点 Vi 为头的弧(即入度边)。

2.1 有向图邻接矩阵的特点

  1. 有向图的邻接矩阵可能是不对称的。
  2. 顶点的出度 = 第 i 行元素之和。顶点的入度 = 第 i 列元素之和
    • V1 的出度就是看矩阵的第一有多少1。
    • V1 的入度就是看矩阵的第一有多少1。
  3. 顶点 i 的度 = 第 i 行元素之和 + 第 i 列元素之和
    • 例如V1的度就是V1所在行的两个1加上V1所在列的一个1相加为,V1的度就是3。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

3. 网(有权图)的邻接矩阵

网当中的边带有一个有特殊意义的值,这个值称为权值

将网的邻接矩阵的值定义为:

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 如果两个顶点之间存在着 边/弧,就在矩阵当中记录这两个顶点之间的边的权值
  • 如果两个顶点之间不存在 边/弧,就在矩阵当中记录 ∞

举个栗子

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  1. 从 V1 出发的弧到各个顶点之间的权值记录为

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  1. 从 V2 出发的弧到其余顶点的权值。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  1. 以此类推其余顶点到其他各个顶点的值

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

4. 采用邻接矩阵创建无向网

邻接矩阵的存储表示

  • 两个数组分别存储顶点表(一维数组)和邻接矩阵(二维数组)。

形式定义

//图的邻接矩阵存储表示
#define MaxInt 32767 //表示极大值,即 ∞
#define MVNum 100   //最大顶点数

typedef char VerTexType;//假设顶点的数据类型为字符型
typedef int ArcType;//假设边的权值为整型

typedef struct
{
		VerTexType vexs[MVNum];//顶点表
		ArcType arcs[MVNum][MVNum];//邻接矩阵
		int vexnum;//图的当前点数
		int arcnum;//图的当前边数
	
}AMGraph;
  • 无向网都搞定了的话,建立无向图、有向图、有向网只需要稍稍改动就可以了。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

算法步骤

  1. 输入总顶点数和总边数
  2. 依次输入点的信息存入顶点表中。
  3. 初始化邻接矩阵,使每个权值初始化为极大值。
  4. 构造邻接矩阵。依次输入每条边依附的顶点和其权值,确定两个顶点在图中的位置之后,使相应的边赋予相应的权值,同时使其对城边赋予相同的权值。

算法描述

//采用邻接矩阵表示法,创建无向网 G
Status CreatUDN(AMGrph &G)
{
		int i,j,k;
		
		cin >> G.vexnum >> G.arcnum;//输入总顶点数,总边数

		//依次输入顶点的信息
		for(i = 0;i < G.vexnum;i++)
		{
				cin >> G.vexs[i]);
		}	

		//初始化邻接矩阵,边的权值
		for(i = 0;i < G.vexnum;i++)
		{
				for(j = 0;j < G.vexnum;j++)
				{
						G.arcs[i][j] = MAXInt;每个值都先置为极大值
				}
		}		

		//构造邻接矩阵
		for(k = 0;k < G.arcnum;k++)
		{
				cin >> v1 >> v2 >> w;//输入一条边依附的顶点及权值
				//确定 v1和v2 在 G 中的位置,即顶点数组的下标
				i = LocateVex(G,v1);
				j = LocateVex(G,v2);
				G.arcs[i][j] = w;//边<v1,v2>的权值置为 w
				G.arcs[j][i] = G.arcs[i][j];//置<v1,v2>的对称边的权值为 w
		}
		return 0;
}

//补充算法,在图中查找顶点
int LocateVex(AMGraph G,VertexType u)
//在图 G 中查找顶点 u ,存在则返回顶点表中的下标,否则返回-1
{
		int i;
		for(i = 0;i <g.vexnum;i++)
		{
				if(G.vexs[i] == u)
				{
						return i;
				}
		}
		return -1;
}

算法分析

  • 该算法的时间复杂度O(n2)
  • 若要建立无向图,只需要对上述算法做两处改动:
    • 一是初始化邻接矩阵时,将边的权值均初始化为 0。
    • 二是构造邻接矩阵时,将权值 w 改为常量值 1 即可。

5. 邻接矩阵的优缺点

优点

  1. 直观、简单、好理解。
  2. 便于判断啊两个顶点之间是否有边,即根据 A[i][j] = 0 或 1来判断。
  3. 方便找任一顶点的所有 邻接点(有边直接相连的的顶点)。
  4. 便于计算各个顶点的度。
    • 无向图:对于行(或列)非 0 元素的个数;
    • 有向图:对应非 0 元素的个数是“出度”;对应列 非 0 元素的个数为“入度”(行出列入)。

缺点

  1. 不便于增加和删除顶点。
  2. 不便于统计边的数目,需要扫描邻接矩阵所有元素才能统计完毕,时间复杂度O(n2)
  3. 空间复杂度高。
    • 如果是有向图n 个邻接矩阵需要 n2 个单元存储边。
    • 如果是无向图:因其邻接矩阵时对称的,所以对规模较大的邻接矩阵可以采用压缩存储的方式,仅存储下三角(或上三角)的元素,这样需要 n(n-1)/2个单元即可。

二、邻接表(链式)

  • 邻接表是图的一种链式存储结构。
    • 在邻接表中,对图中每个顶点啊 Vi 建立一个单链表,把与 VI 相邻接的顶点放在这个链表中。
    • 邻接表中每个单链表的第一个结点存放有关顶点的信息,把这一个结点看成链表的表头,其余结点存放有关边的信息,这样邻接表便由两部分组成:表头结点表和边表

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

表头结点表

由顶点构成的一维数组称为表头结点表

  • 表头结点包括数据域 (data)链域(firstarc)

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 数据域用来存储顶点 Vi 的名称或其他有关信息。
  • 链域是用来指向链表中的第一个结点(即与顶点 Vi 邻接的顶点)。

边表

由表示图中顶点间关系的 2n 个边链表组成

  • 边链表中包含邻接点域 (adjvex)链域 (nextarc)

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 邻接点域(adjvex): 存放与 Vi 邻接的顶点在标表头数组中的下标。
    • 如: V1 的下一个邻接的顶点是位于数组下标 3 的 V4 顶点,然后 V1 顶点还与 位于下标 1 的 V2 有一条边。
  • 链域(nextarc):链域指示与顶点 Vi 邻接的下一条边的结点。

1. 无向图的邻接表

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 图 G 中有 5 个顶点,一维数组就开辟五个空间存储这些顶点。
  • 每个元素空间还有一个指针,用来指向与该顶点邻接的第一个邻接点。
  • 因为 下标 3 的 V4 是 V1 的邻接点,下标为 1 的 V2 也是 V1 的邻接点,所以 3、1 的位置是可以互换的。

无向图邻接表的特点

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 邻接表不唯一(与某个顶点连接的边的顺序是可变的)。
  • 无向图中有 n 个顶点,e 条边。
    • 则其邻接表需要 n 个头结点和 2e 个表结点。
    • 所以无向图邻接表需要 O(n + 2e) 的存储空间,适合存储稀疏图
  • 无向图中顶点 Vi 的度为 第 i 个单链表中的结点数。
    • 每个顶点有多少个表结点,则和这个顶点关联的边就有几个。
    • 如:V1 有 2 个表结点,所以和V1 关联的边有两条,V1 的度为2

2. 有向图的邻接表

2.1 邻接表

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 有向图中,只需要保存以当前顶点为弧尾的这一条边(每条弧只保存一次,只保存发出的弧)。
  • 没有发出弧的顶点的头结点表的链域就置为NULL。

有向图邻接表的特点

  • 顶点 Vi 的 出度为第 i 个单链表中的结点个数。
  • 顶点 Vi 的入度为整个单链表中邻接点域值是 i-1 的结点个数。
    • 如:想求V1的入度,就得去找邻接点域是1-1=0的结点有多少个。

2.2 逆邻接表

  • 既然可以用每个结点来存储顶点的出度边,那么当然也能反过来存入度边。
  • 逆邻接表中,单链表当中的结点是入度边

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

有向图逆邻接表的特点

  • 顶点 Vi 的入度为第 i 个单链表中的结点个数。
  • 顶点 Vi 的出度为整个单链表中邻接点域是是 i-1 的结点个数。

练习:已知某网的邻接(出边)表,请画出该网络。
从出边可以得知,这是个有向网

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 每一个单链表都是一个以当前顶点为弧尾。
    • 如:以顶点1为弧尾的出度弧有两条,分别邻接 2 顶点和 5 顶点。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 依次找到所有的顶点出发的到其他顶点的弧,有向网就画出来了。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

3. 图的邻接表存储表示

顶点的结点结构定义

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

//顶点结构定义
typedef struct VNode 
{//顶点的结构包含两个成员
		
		VerTexType data;//顶点的数据域,用来存储顶点信息
		ArcNode* firstarc;//指向边结点的指针
		
}VNode,AdjList[MVNum];//AdjList 表示邻接表类型
//说明:例如,AdjList v; 相当于:VNode v[MVNum]

弧(边)的结点结构定义

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

//边结点的结构定义
#define MVNum 100 //最大顶点数
typedef sturct ArcNode //边结点
{
		int adjvex;//指向相邻的邻接点位置的下标
		struct ArcNode* nextarc;//指向自身结点结构的指针
		OtherInfo info;//和边相关的信息,如:权值
		
}ArcNode;

图的结构定义

typedef struct
{
		AdjList vertices;//邻接表类型的数组,存储所有的顶点
		int vexnum;//图的当前顶点数
		int arcnum;//图的当前弧数

}ALGraph;

邻接表操作举例

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

4. 采用邻接表表示法创建无向图

算法步骤

  1. 输入总顶点数总边数
  2. 建立顶点表
    • 依次输入点的信息存入顶点表中。
    • 使每个表头结点的指针域初始为NULL
  3. 创建邻接表
    • 依次输入每条边连接的两个顶点。
    • 查找这两个顶点的序号 i 和 j ,建立边结点。
    • 将此边结点分别插入到 Vi 和 Vj 对应的两个边链表的头部。

算法描述

//采用邻接表表示法,创建无向图 G
Status CreateUDG(ALGraph &G)
{
		cin >> G.vexnum >> G.arcnum;//输入总定点数,总边数
		
		for(i = 0;i < G.vexnum;i++)//输入各点,构造表头结点表
		{
				cin >> G.vertices[i].data;//输入顶点值
				G.vertices[i].firstarc = NULL;/初始化表头结点的指针域为 NULL
				
		}
		for(k = 0;k < G.arcnum;k++)//输入各边,构造邻接表,数组中有几个顶点就循环多少次
		{
				cin >> v1 >> v2;//输入一条边连接的两个顶点
				
				//确定 V1 和 V2 在G中的位置,即顶点G.vertices中的序号	
				i = LocateVex(G,v1);
				j = LocateVex(G,v2);
				
				p1 = nex ArcNode;//生成一个新的边结点*p1
				p1->adjvex = j;//邻接带你序号为j
				
				//将新结点*p1插入到顶点Vi的边表头部
				p1->nextarc = G.vertices[i].firstarc;
				G.vertices[i].firstarc = p1;

				p2 = nex ArcNode;//生成另一个对称的新的边结点*p2
				p2->adjvex = i;//邻接点序号为i

				//将新结点*p2插入到顶点Vj的边表头部
				p2->nextarc = G.vertices[j].firstarc;
				G.vertices[j].firstarc = p2;
		}
		
		return OK;
}

算法分析

  • 该算法的时间复杂度O(n+e)

5. 邻接表表示法的优缺点

优点

  1. 便于增加和删除顶点。
  2. 便于统计边的数目,按顶点表顺序扫描所有边表即可得到边的数目,其时间复杂度O(n+e)
  3. 空间效率高 对于一个具有 n 个顶点 e 条边的图 G:
    • 若 G 是无向图:则在其邻接表表示中有 n 个顶点表结点和 2e 个边表结点。
    • 若 G 是有向图:则在它的邻接表表示或逆邻接表表示中均有 n 个顶点表结点和 e 个边表结点

缺点

  1. 不便于判断顶点之间是否有边,要判定 Vi 和 Vj 之间是否有边,就需要扫描第 i 个边表,最坏的情况下要耗费 O(n) 的时间。
  2. 不便于计算各个顶点的度:
    • 对于无向图:在邻接表表示中顶点 Vi 的度是第 i 个边表中的结点个数。
    • 对于有向图:在第 i 个边表上的结点个数是顶点 Vi 的出度,但是求 Vi 的入度比较困难。
      • 有向图采用逆邻接表表示,则与邻接表表示相反,求顶点的入度容易,求出度难。

6. 邻接矩阵与邻接表示法的关系

联系

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数

  • 对于邻接矩阵:顶点 Vi 所在的第 i 行有几个 1,就表示顶点 Vi 有几条边。

  • 对于邻接表:顶点 Vi 的边结点有几个,则表示 Vi 有几条边。

区别

  • 对于任一确定的无向图,邻接矩阵唯一的(行列号与顶点编号一直),但邻接表不唯一(链接次序与顶点编号无关)。
  • 邻接矩阵的空间复杂度O(n2),而邻接表的空间复杂度O(n+e)

用途

  • 邻接矩阵多用于稠密图;而邻接表多用于稀疏图(边比较少)。

三、十字链表

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 十字链表是有向图的另一种链式存储结构。可以看成是将有向图的邻接表以及逆邻接表合起来得到的一种新的链表。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 同时有向图中的每个顶点在十字链表中对应有一个结点,叫做顶点结点,用来存放原来的第一个出、入度边。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 有向图中的每一条弧对应十字链表中的一个弧结点

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

补充

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  1. 顶点结点的第二个元素指向该顶点的入度弧,第三个元素指向该顶点的出度弧
    • 因此顶点结点的第二个元素会指向箭头指向该顶点的那条弧
    • 因此顶点结点的第三个元素会指向箭头来自该顶点的那条弧
  2. List item
  3. 一个弧结点就代表着一条弧。
    • 第一个元素(tailvex)代表这个弧来自于哪个顶点。
    • 第二个元素(headvex)代表这条弧指向哪个顶点。
    • 第三个元素(hlink)指向下一个指向同一个顶点的弧。
    • 第四个元素(tlink)指向下一条同一个顶点发出的弧。

四、邻接多重表

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

邻接表

  • 优点:容易求得顶点和边的信息,
  • 缺点:某些操作不方便(如:删除一条边需找表示此结边的两个结点)。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

邻接多重表

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

邻接多重表中,每一条边用一个边结点表示。

  • 这样一个边结点就存储了从 0 号位置的 V1 到 1号位置的 V2 之间的边。
  • 下次就不用再记录从 V2 到 V1 之间的边了,直接使用这个边结点即可。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 从 V1 到 V4 之间还有一条边,继续用一个边结点记录下来。这两条边都是从 0 号位置的 V1 开始的。
    • 想找与 V1 相关的边就只需要找到第一条边就行了。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 之后再找与 V2 相关联的边,V2 - V1 这条边已经有了,不需要再找一次了,直接拿来用,去找其余和 V2 有关联的边。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++

  • 依次类推找到所有与其余顶点相关联的边。

图的存储结构,数据结构 - 理论版,数据结构,算法,c++文章来源地址https://www.toymoban.com/news/detail-775831.html

到了这里,关于【数据结构(28)】6.4 图的存储结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【YOLOv8模型网络结构图理解】

    YOLOv8的配置文件定义了模型的关键参数和结构,包括类别数、模型尺寸、骨干(backbone)和头部(head)结构。这些配置决定了模型的性能和复杂性。 下面是YOLOv8的配置文件和参数的解释: Backbone主干网络 是模型的基础,负责从输入图像中提取特征。这些特征是后续网络层进

    2024年03月26日
    浏览(50)
  • 深度学习 yolov5等结构图

    今天整理文件时看到自己之前用PPT画的一些结构图,可能也许会有人用得上,就上传上来吧哈哈哈别说这些图画起来还挺费时的,放上PPT版链接可以根据自己的需求更改。 如果有时间的话还是自己动手画一画,画的过程也可以加深对网络结构的理解。 PPT版网盘链接:提取码

    2023年04月24日
    浏览(41)
  • 数据结构--图的存储结构

    第九话  数据结构之图的存储 文章目录 一、了解什么是图 二、图的定义和基本术语 三、存储结构之邻接矩阵 1.邻接矩阵的介绍 2.邻接矩阵的创建 3.主函数中实现 四、存储结构之邻接表 1.邻接表的介绍 2.邻接表的创建 3.在主函数中实现 五、总结 一切尽在图结构 图的应用非

    2024年02月07日
    浏览(41)
  • 数据结构—图的存储结构

    回顾:数据的逻辑结构 集合——数据元素间除 “同属于一个集合” 外,无其他关系。 线性结构——一个对一个,如线性表、栈、队列 树形结构——一个对多个,如树 图形结构——多个对多个,如图 6.1图的定义和术语 无向图 :每条边都是 无 方向的; 有向图 :每条边都是

    2024年02月14日
    浏览(29)
  • 16-数据结构-图的存储结构

    简介:主要为图的顺序存储和链式存储。其中顺序存储即邻接矩阵的画法以及代码,邻接矩阵又分为有权图和无权图,区别就是有数据的地方填权值,无数据的地方可以填0或者∞,而有权图和无权图,又细分为有向图和无向图。无向图为对称矩阵,因为没有方向可言,出度入

    2024年02月09日
    浏览(28)
  • 一些HTTP、TCP、IP、以太报文结构图

    都是我在学习时候整理的一些报文结构,单独的各图例如下: 模型、URL HTTP 报文 IP 报文 以太网报文 如果图中有错误或希望更多的图例,评论或私聊告诉我就好,我之后再完善上

    2024年01月17日
    浏览(35)
  • yolov7论文学习——创新点解析、网络结构图

    1、提出了E-ELAN,但是只在yolov7-e6e中使用到。 2、yolov7基于拼接模型的缩放方法,在yolov7x中使用到。 3、将重参数化卷积应用到残差模块中或者用到基于拼接的模块中去。RepConvN 4、提出了两种新的标签分配方法 1、 ELAN yolov7使用大量的ELAN作为基础模块。 这么多堆叠其实对应了

    2024年01月17日
    浏览(33)
  • 【数据结构】图的定义、存储

    对王道数据结构选择题做错和不清楚的题的简单纠错 一个有n个顶点和n条边的无向图一定是 有环的 一个无向图有n个顶点和n-1条边,可以使它连通单没有环,若再加一条边,则会形成环 若图中顶点数为n,则它的生成树有n-1条边,去掉一条边变成非连通图;加上一条边变成一

    2024年02月08日
    浏览(38)
  • 数据结构--5.0.1图的存储结构

    目录 一、邻接矩阵(无向图)  二、邻接矩阵(有向图) 三、邻接矩阵(网) 四、邻接表(无向图) 五、邻接表(有向图)   ——图的存储结构相比较线性表与树来说就复杂很多 ——对于线性表来说,是一对一的关系,所以用数组或者链表均可简单存放。         树结构

    2024年02月10日
    浏览(36)
  • yolov5s-6.0网络模型结构图

    因为在6.0上做的了一些东西,所以将6.0得网络模型画了出来,之前也画过5.0的网络模型,有兴趣的小伙伴可以看下。 yolov5s-5.0网络模型结构图_zhangdaoliang1的博客-CSDN博客_yolov5s模型结构 看了很多yolov5方面的东西,最近需要yolov5得模型结构图,但是网上的最多的是大白老师的,

    2023年04月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包