《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. 在 CUDA C/C++ kernel中使用内存
  2. linux 从命令行启动,Linux下常见服务在命令行方式的启动
  3. 《一个操作系统的实现》读书笔记连载ing……
  4. Tomat启动自动运行一个类
  5. 找最大公约数和最小公倍数(c语言实现)
  6. Redisson框架快速入门
  7. redis 思维导图
  8. 一张图看懂AI、机器学习、深度学习的关系
  9. LeetCode 1945. 字符串转化后的各位数字之和
  10. 开源开放 | Beyond 预训练语言模型,NLP还需要什么样的知识?
  11. STM32- 定时器的设定 - 二元一次方程的因素分解求解实现PWM和定时器频率的小数位 - Matlab 方法:
  12. java 5 线程 睡眠,Java线程之线程的调度-休眠
  13. 平面设计师必读的十本书
  14. tmp name php,linux环境 上传文件失败 tmp_name为空
  15. atitit.提升软件开发的效率and 质量的那些强大概念and方法总结
  16. Read_books_水煮三国
  17. matlab如何事先申明结构体数组,【matlab定义结构体数组】
  18. 德州达拉斯大学计算机录取要求,德克萨斯大学达拉斯分校申请条件(德克萨斯大...
  19. 博客园北京俱乐部置顶消息汇总(2009-03-03更新)
  20. java中怎么使用json数据_java中使用Json数据

热门文章

  1. 短视频APP开发,另类内容的媒介的新突破模式
  2. 如何在 Excel 中实现下拉多选、反选
  3. 凸透镜成像实验软件_凸透镜成像实验,你玩的远远不够!
  4. ibm邮件怎么撤回_如何快速有效的管理IBM i上电子邮件跟踪信息
  5. java 自动下载文件_java+selenium+new——无人化自动下载文件——基于firefox浏览器...
  6. 这个项目很骚气,已开源!作者脑洞也够大!!
  7. 配偶成为被执行人,你要注意哪些法律问题
  8. 【NLP】3 word2vec库与基于搜狗全网新闻数据集实例
  9. 淡雅中国风读书分享PPT模板
  10. 猫狗分类-VGG16-Finetune