《Java常用算法手册》

引言

图(Graph)结构也是一种非线性数据结构,图结构在实际生活中有非常丰富的例子,例如:通讯网络,交通网络,人际关系网络等都可以归结为图结构。图结构的组织形式要比树结构更为复杂,因此,图结构对存储和遍历等操作具有更高的要求。

区别树结构

图结构是比树结构复杂的数据结构。在树结构中,结点具有分支层次关系,每一层上的结点只能和上层中的至多一个结点相关,但可能和下一层的多个结点相关。而在图结构中,任意两个结点之间都可能相关,结点之间相邻的关系可能是任意的。

图结构

了解了树结构,如果将树结构规则进一步扩展,每个数据元素之间可以任意关联,这就构成了一个图结构。正是这种任意关联性导致了图结构中数据关系的复杂性。研究图结构的一个专门理论工具叫图论。(图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。)

图1:典型的图结构(无向图)

图2:有向图

图结构包含如下内容:

顶点(Vertex):因为图中的顶点具有相对概念,没有固定的位置

边(Edge):图中链接这些顶点的线

所有的顶点构成一个顶点集合,顶点的边构成边集合,一个完整的图结构由顶点集合和边集合组成。图结构在数学上一般记为以下形式:G =(V,E)

或者

G =(V(G),E(G))

其中,V(G)表示图结构中所有顶点的集合,顶点可以用不同的数字或者字母表示。E(G)是图结构中所有的边集合,每条边由所连接的两个顶点表示。(注意:图结构中顶点集合V(G)必须为非空,即必须包含一个顶点。而图结构中边 集合E(G)是可以为空,此时表示没有边)

图结构

1)无向图

如果一个图结构中,所有的边都没有方向性,那么这种图便成为无向图。(如上图1)则图1对应的顶点集合和边集合如下:

V(G)={V1,V2,V3,V4,V5,V6}

E(G)={(V1,V2),(V1,V5),(V2,V4),(V3,V5),(V1,V3),(V5,V6),(V4,V6)}    //每个边用圆括号区分

2)有向图

如果一个图结构中,边有方向性,那么这种图便成为有向图。典型的有向图(上图2),由于有向图的边具有方向性,这样,在表示边的时候对两个顶点有顺序要求。并且为了同无向图区分,采用尖括号表示有向边。例如:表示从顶点V3到顶点V4的一条边,而表示从顶点V4到顶点V3的一条边。则图2(有向图)对应的顶点集合和边集合如下:

V(G)={V1,V2,V3,V4,V5,V6}

E(G)={,,,,,,,,}    //每个边用尖括号表示

3)顶点的度(Degree)

连接顶点的边的数量称为该顶点的度。顶点的度在有向图和无向图中具有不同的表示。对于无向图,一个定点的度比较简单,为:连接该顶点的边的数量。D(V).例如图1:D5=3,D6=2

对于有向图,根据连接顶点的V的边的方向性,一个顶点有入度和出度。

ID(V),入度:该顶点为端点的入边的数量。

OD(V),出度:该顶点为端点的出边的数量。

因此,有向图中,一个顶点的总度是入度和出度的和。即D(V)=ID(V)+OD(V),图2:D(V3)=ID(V3)+OD(V3)=2+1=3

4)邻接顶点:图结构中一条边的两个顶点。

图1中(V1,V5)互为邻接顶点(无向图)

图2中 这条边的两个顶点:V1是V2的入边邻接顶点,V2是V1的出边邻接顶点。

5)无向完全图

每两个顶点之间,都存在一条边,那么这种图结构称为无向完全图,理论证明:其边总数为=N(N-1)/2

图3:无向完全图

6)有向完全图

在有向图中,每两个顶点都存在方向相反的两条边。理论证明:对于一个包含N个顶点的有向完全图,其总的边数为:N(N-1)

图4:有向完全图

7)子图

子图的概念类似与子集合,由于一个完整的图结构包括顶点和边,因此,一个子图的顶点和边都应该是另一个图结构的子集合。

8)路径

路径即图结构中两个顶点之间的连线,路径上边的数量称为路径的长度。两个顶点之间的路径可能经过途径多个其他顶点,两个顶点之间的路径也可能不止一条,相应的路径长度可能不一样。

图5:图结构中的一条路径

图5中,虚线部分,显示了顶点V5到V2之间的一条路径,这条路径途径顶点V4,途径的边依次为(V5,V4),(V4,V2),路径的长度为:2

图结构中的路径还可以细分如下三种形式:

简单路径:在图结构中,如果一条路径上顶点不重复出现,则称为简单路径。

环:图结构中,如果路径的第一个顶点和最后一个顶点相同,则称之为环,有时也称回路。

简单回路:图结构中,如果除第一个顶点和最后一个顶点相同,其余各顶点都不重复的回路称为简单回路。

9)连通、连通图、连通量

通过路径的概念,进一步说明图结构的连通关系:

如果图结构中两个顶点之间有路径,则称两个顶点是连通的。这里说明下连通的两个顶点可以是不相邻的,只要有路径连接即可,可以途径多个顶点。

如果无向图中任意两个顶点是连通的,那么这个图便成为连通图。如果无向图中包含两个顶点是不连通的,则这个图称为非连通图。

无向图的极大连通子图称为该图的联通分量。

理论证明,对于一个连通图,其连通分量有且只有一个,那就是该连通图自身。而对于一个分连通图,则有可能存在多个连通分量。例如,图6是一个非连通图,因为V2到V3没有路径。这个非连通图包含两个连通分量:联通分量1:(V1,V2,V5),连通分量2:(V3,V4)

图6:非连通图

连通分量1,和连通分量2

图7:连通分量1,2

10)强连通图和强连通分量

与无向图类似,在有向图中也有连通的概念,主要涉及如下内容:

如果两个顶点之间有路径,也成为这两个顶点是连通的。需要注意的是,有向图中的边是有方向的。因此,有时从Vi 到 Vj 是连通的,但是反过来却不一定连通。

如果有向图中任意两个顶点都是连通的,则称该图为强连通图。如果有向图中包含两个顶点不是连通的,则称该图为非强连通图。

有向图的极大强连通子图称为该图的强连通量。

理论上可以证明,强连通图只有一个强连通分量,即为该图自身。而对于一个非强连通图,则可能存在多个强连通图分量。例如,图8,顶点V2到顶点V3没有路径。这个非强连通图有两个强连通分量。

图8:非强连通图

11)权

在前面讲述的过程中,各个边没有赋予任何含义。在实际的应用中,往往需要将边表示成某种数值,这个数值便是该边的权(Weight)。无向图中加入权值,则称为无向带权图。有向图中加入权值,则称为有向带权图。(图9,图10)

权在实际应用中可以代表各种含义,例如,在交通图表示道路的长度,在通信网络中表示基站之间的距离,在人际关系中,表示亲密的程度。

图9:无向带权图

图10:有向带权图

12)网(Network)

网即边上带有权值的图的另一种名称。网的概念与实际应用更为贴切。

有向完全图 java_图结构(一)相关推荐

  1. 尤佳轩、何恺明等提出新型图表示法,新视角理解图结构如何影响预测性能

    选自arXiv 作者:尤佳轩.Jure Leskovec.何恺明.Saining Xie 机器之心编译 参与:小舟.杜伟 神经网络的图结构和预测性能之间有怎样的关系?近日,斯坦福尤佳轩.Jure Le ...

  2. ICML2020 | 神经网络的图结构如何影响其预测性能?

    作者 | 董靖鑫 审稿 | 程玉 今天给大家介绍的是来自斯坦福大学的Jure Leskovec课题组发表在ICML2020上的文章" Graph Structure of Neural Ne ...

  3. C++ | 数据结构 | 图结构的讲解与模拟实现 | DFS与BFS的实现

    文章目录 前言 常见概念总结 图的模拟实现 邻接矩阵和邻接表的优劣 图的模拟实现(邻接表) 广度优先遍历(BFS) 深度优先遍历(DFS) hpp代码展示 前言 在聊图的结构之前,我们可以先从熟悉的地 ...

  4. 农夫过河问题(图结构)

    [题目介绍]:  所谓农夫过河问题是指农夫带一只狼.一只羊和一棵白菜在河南岸需要安全运到北岸.一条小船只能容下他和一件物品只有农夫能撑船.问农夫怎么能安全过河.  当然,狼吃羊,羊吃白菜,农夫不能将这 ...

  5. 图结构解决农夫过河问题(二附源代码)

    [什么是图结构]:图结构就是所有数据元素都可以连接,跟树结构有很大区别. 图结构包括两大部分: 1.顶点:所有的数据元素,每个元素就是一个顶点(数字1.2.3.4.5.6). 2.边:连接两个元素之间 ...

  6. 数据结构——图结构:图

    数据结构与算法分析--目录 第一部分:数据结构 数据结构--图结构:图 图基础 \quad 图是一种比线性表和数更为复杂的数据结构.在图结构中,结点之间的关系可以是任意的,也就是说,图中的任意两个数据 ...

  7. 图结构算法学习(一)——有向图

    有向图概念基础 什么是有向图 有向图相关术语 邻接矩阵 邻接矩阵的定义 邻接矩阵表示法 无向图的邻接矩阵 有向图的邻接矩阵 有权图(网)的邻接矩阵表示法 邻接矩阵储存法 用邻接矩阵表示法创建无向网 什 ...

  8. 一步一步写算法(之图结构)

    原文:一步一步写算法(之图结构) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 图是数据结构里面的重要一章.通过图,我们可以判断两个点之间是 ...

  9. 阿尔伯塔大学博士毕业论文:基于图结构的自然语言处理

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载 机器之心整理 自然语言处理(Natural Language Processing)是人工智能的核心问题之一,旨在让 ...

最新文章

  1. CMakeLists.txt从入门到精通
  2. spark_updateStateByKey
  3. matlab 绘制圆
  4. Kotlin实战指南十五:协程泄漏
  5. tracert和traceroute使用
  6. 为什么越来越多的人消失在朋友圈?
  7. 【NOI2012】迷失游乐园【概率期望】【换根dp】【基环树】
  8. 洛谷P2016 战略游戏【树形dp】
  9. MariaDB 10之并行复制--延迟测试结果
  10. Altium Designer(九):DXF+DWG
  11. 有关scm和check style的pom.xml文件
  12. java 登录md5加密_javaMD5加密及登录验证(备忘)
  13. java框架的作用_java三大框架的作用介绍
  14. 全站仪 经纬仪 水准仪 操作演示视频教程 建筑工程测量放线7日通
  15. Signature Pad 使用
  16. jenkins添加从节点
  17. 安卓设备TF卡概率性无法识别问题
  18. 解决npm install时的一系列gyp ERR错误
  19. 解决win7(64位)Office(32位)安装64位Access驱动的方法
  20. 论文阅读——Multi-Task Learning Framework for Extracting Emoton Cause Span and Entailment in Conversations

热门文章

  1. 为什么刹车热了会失灵_刹车片过热为什么会导致刹车失灵?
  2. 全国计算机组装与维修中级工,计算机维修工职业标准
  3. Ubuntu11.10安装与使用图文教程
  4. 100个暗黑系哑光效果lr/acr预设(含预设导入教程)
  5. 使用FFMpeg API 获取摄像头的图像数据
  6. 机房监控系统标准和常见故障
  7. 独家报道:CentOS7[修改主机名以及IP对应关系]
  8. wise care 365下载|wise care 365 pro绿色便携版v5.0.1下载
  9. Altium Designer:AD绘制板边框之任意倒角
  10. ReID基础 | 表征学习和度量学习