用pv操作描述如下前驱图_Java数据结构和算法(一)图的基本介绍和存储形式

本文主要探讨了图结构在Java中的重要性,它能有效表示现实世界中的多对多关系,如社交网络等。图由节点和边构成,分为无向图和有向图,以及带权图。图的表示方式包括邻接矩阵和邻接表,其中邻接表因其空间效率更高而被广泛使用。后续文章将介绍基于图结构的优先遍历算法。
摘要由CSDN通过智能技术生成

   从今天开始,我跟大家一起仔细学习Java的数据结构和算法,首先是进行图结构的学习,因为图结构之前已经做过很多介绍,比较清晰。

 图是描述现实世界各类复杂系统的一种普遍适用的模型,具有很强的表述能力。在现实世界中,很多应用将数据和数据之间的关系表示为一个图结构,如社交网络、车载网络、协作网络、电子商务网络、通信网络、生物蛋白质网络等。那么我们为什么要用图结构呢,原因有以下几点:

  第一,线性表局限于一个直接前驱和一个直接后继的关系。第二,常用的树也同样只能有一个直接前驱,也就是我们所说的父结点。因此,当我们需要表示多对多的关系时,我们就用到了图。

 图是一种数据结构,其中结点可以具有零个或多个相邻元素,两个结点之间的连接称为边。

13824b9b1083662d168a6e1848503474.png

如图所示,A,B,C,D,E为五个结点,五个结点之间的连接称为边。

图的常用概念:

  1. 结点(vertex,node)

  2. (edge)

  3. 路径:D到C的路径:(D-B-C和D-A-B-C)

  4. 无向图:结点之间的连接没有方向,如A-B,既可以是从A到B,也可以是从B到A

  5. 有向图:结点之间的连接有方向,如A-B,只能是从A到B,不可以是从B到A

  6. 带权图:边带权值的图称为带权图,也就是平时所说的网。

385138e10bcb999a9b95118eca208937.png

  如图便为带权图,连接上的权值代表两地之间的距离。

图的表示方式:

  重点来说一下图的表示方式,以便在以后的文章中使用,图的表示方式有两种,第一种是二维数组表示(邻接矩阵),第二种则是使用链表表示(邻接表)。

  首先说一下第一种表示方式,邻接矩阵:

  邻接矩阵时表示图形中结点之间相连关系的矩阵,对于n个结点的图而言,矩阵的行(row)和列(column)表示的是1到n个结点,举个例子:

046ea0b9c8aaf7df8824b8d8dd7f1b31.png

  左侧为一个图结构,右侧为改图结构转换而成的邻接矩阵的形式,上方和左侧的数字代表结点标号,如果结点之间有直接相连的关系,那么在邻接矩阵中,则将值置为1,若结点之间没有直接相连的关系,则将值置为0。

  这种方式比较容易理解,不过这种邻接矩阵也存在缺点:

  第一,邻接矩阵需要为每个结点都分配n个边的空间,因为图结构形成的矩阵必须为正方形,因此有很多表都是不存在的,会造成一定的空间上的损失,因此我们可以使用第二种表示方式来解决这个问题,邻接表。

  邻接表的实现只关心存在的边,不关心不存在的边,因此没有空间上的损失和浪费,邻接表由数组加链表组成。

  下面举个例子来看一下:

ca42ab47ce0e1d30926e89da6e370502.png

  同样的图结构,如果使用邻接矩阵,我们会发现矩阵中有很多的零,这些都会造成空间上的浪费,而邻接表就没有这个问题,我们首先同样使用数组,如右图的左侧,0到5依然表示结点,而每个结点的邻居都采用链表的形式,5个结点就用5条链表,之后用数组将它们管理起来,用数组加链表来表示图结构:

f5b93aac3bdc5a6f23517960a7f6d41c.png

图的基本介绍就到这里,接下来的文章会讲一些基于图结构的优先遍历的算法,谢谢大家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值