2018-03-05 16:19:46

图是计算机科学中的一个非常重要的概念,图是一种多对多的关系。从某种角度上来说树和链表都是图的一种特例。

一、图的抽象数据类型

二、表示图的方法

图是由结点和边构成的,只要能通过某种方式将结点和边的信息表示出来就可以了。以下是两种最常见的图的表示方法,值得一提的是,并不是只有这两种方法来表示图。

  • 邻接矩阵

邻接矩阵G[N][N]——N 个顶点从0 到N-1 编号。

对于无向图,邻接矩阵是对称的,所以可以只保存下三角来减少一半的空间开销。

邻接矩阵的优点:

  1. 直观、简单、好理解
  2. 方便检查任意一对顶点间是否存在边
  3. 方便找任一顶点的所有“邻接点”(有边直接相连的顶点)
  4. 方便计算任一顶点的“度”(从该点发出的边数为“出度”,指向该点的边数为“入度”)

邻接矩阵的缺点:

  1. 浪费空间:对于稀疏的图将存放大量无用的数据;
  2. 浪费时间:比如查找一个结点的邻接点,需要将所有的结点遍历一遍;
  • 邻接表

邻接表:G[N]为指针数组,对应矩阵每行一个链表,只存非0元素,也就是直接相邻的结点。一定要足够的稀疏才合算。

邻接表的特点:

  1. 方便找任一顶点的所有“邻接点”
  2. 节约稀疏图的空间(需要N个头指针 + 2E个结点(每个结点至少2 个域))
  3. 方便计算任一顶点的“度”:仅对于无向图,如果是有向图,那么只能很快的计算出度,入度的计算还是有难度的
  4. 相对于邻接矩阵,邻接表并不适合很快的查找两个结点之间是否存在边

三、图的遍历

类似于二叉树的遍历,图的遍历也有两种策略,一是深度优先,二是广度优先。

  • DFS

所谓遍历,就是将图中所有的结点访问一次,且仅一次。深度优先搜索就是每次到达一个结点,首先申明我访问过他了,避免二次访问,然后在其邻接的结点中挑选是否有还没有被访问的,访问之,重复进行该项操作,即可。

  • BFS

BFS类似于二叉树中的层序遍历,使用队列来保存将要访问的结点信息。

在遍历的过程中,还有一个特别重要的概念--连通性。

连通分量 :无向图的极大连通子图

强连通 :有向图中顶点V和W之间存在双向路径,则称V和W是强连通的。

强连通图 :有向图中任意两顶点均强连通

强连通分量 :有向图的极大强连通子图

对于不连通的图可以对每个连通分量做一次DFS(或者BFS)。

四、应用实例

问题一:解救007

问题描述:詹姆斯邦德被困在孤岛上,孤岛周围环绕的鳄鱼,他的跳跃半径已知,在其跳跃半径内,他可以跳上鳄鱼的头。试问其是否可以上岸。

问题求解:该问题中的结点有孤岛,鳄鱼和岸。请注意,这里岸也是一个结点,所谓的结点其实是一个非常抽象的概念。问题要求的其实就是在这个图中是否可以在遍历过程中遍历到岸这个结点,如果可以那么就返回TRUE。

那是否需要构造一个邻接矩阵,或者邻接表呢?答案是否定的,就像之前提到的,不是说图都要用这两种表示方法来描述,这一题中,可以直接对两个鳄鱼之间的距离进行判断,就可以得到是否存在边的信息。

问题二:六度空间

问题描述:

六度空间理论,你和任何一个陌生人之间所间隔的人不会超过六个。

现给定社交网络图,请对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。

问题求解:

按层序遍历,主要的难点就是如何保证只遍历到6层就结束。当然,有种简单的方式就是给每个结点增加一条层数信息,但是这样毫无疑问是非常消耗空间的,这里给出了一种O(1)的解决层数记录的方法,非常巧妙。

图 Graph-图的表示及其遍历的更多相关文章

  1. 算法与数据结构基础 - 图(Graph)

    图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...

  2. 关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph Learning (PGL))

    关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph Learning (PGL)) 欢迎fork本项目原始链接:关于图计算&图学习的基础知识概览:前置知识点学习 ...

  3. 纸上谈兵: 图 (graph)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 图(graph)是一种比较松散的数据结构.它有一些节点(vertice),在某些节 ...

  4. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (二)

    本文属于图神经网络的系列文章,文章目录如下: 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一) 从图(Graph)到图卷积(Graph Convolutio ...

  5. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一)

    本文属于图神经网络的系列文章,文章目录如下: 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一) 从图(Graph)到图卷积(Graph Convolutio ...

  6. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (三)

    本文属于图神经网络的系列文章,文章目录如下: 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一) 从图(Graph)到图卷积(Graph Convolutio ...

  7. 图 Graph

    本文主要内容为:图的定义以及基本术语 图的定义 图 图G的组成:由 数据元素的集合E 和 数据间的关系集合E 组成,记作:G = <V, E> 顶点 (vertex):数据元素,V就是顶点 ...

  8. ADT图及图的实现及图的应用

    图: 图中涉及的定义: 有向图: 顶点之间的相关连接具有方向性: 无向图: 顶点之间相关连接没有方向性: 完全图: 若G是无向图,则顶点数n和边数e满足:0<=e<=n(n-1)/2,当e ...

  9. JanusGraph : 图和图数据库的简介

    JanusGraph:图数据库系统简介 图(graph)是<数据结构>课中第一次接触到的一个概念,它是一种用来描述现实世界中个体和个体之间网络关系的数据结构. 为了在计算机中存储图,< ...

  10. 06. Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图

    1.基本图表绘制 plt.plot() 图表类别:线形图.柱状图.密度图,以横纵坐标两个维度为主同时可延展出多种其他图表样式 plt.plot(kind='line', ax=None, figsiz ...

随机推荐

  1. puma 配置,启动脚本

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/menxu_work/article/details/24547923 配置: puma_server ...

  2. 使用paramiko的SFTP get或put整个目录

    在<使用paramiko执行远程linux主机命令>中举例说明了执行远程linux主机命令的方法,其实paramiko还支持SFTP传输文件. 由于get或put方法每次只能传输一个文件, ...

  3. PHP面试专用笔记精简版

    [PHP笔记] 1.require 遇到即包含文件,require_once 只包含一次.require 遇到错误会终止,一般放在程序的最前面:include遇到错误会继续执行,一般放在流程控制语句中 ...

  4. hadoop-3.0.0-beta1分布式安装

    楼主是从Hadoop2.x版本过来的,在工作之余自己搭建了一套3.0的版本来耍一耍,此文章的前置环境准备工作省略.主要介绍一些和Hadoop2.x版本不同的安装之处 Hadoop版本:hadoop-3 ...

  5. boost单元测试框架

    头文件: #include <boost/test/unit_test.hpp> 编译加:-lboost_unit_test_framework 单元测试: 需要定义BOOST_TEST_ ...

  6. Java基础知识陷阱(三)

    本文发表于本人博客. 之前都讲了有关字符串的陷阱,那今天来说下关于静态这个东西,这分为静态变量.静态方法,先看下面的代码请问结果输出是什么?: class Person01{ private stat ...

  7. 关于cgi、FastCGI、php-fpm、php-cgi(复制)

    首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. web server(比如说nginx)只是内容的分发者.比如,如果请求/index.h ...

  8. C# 各种导入 Excel 文件的数据的方法总结

    在导入之前都需要将上传的文件保存到服务器,所以避免重复的写这些代码,先贴出上传文件并保存到服务器指定路径的代码. protected void btnImport_Click(object sende ...

  9. Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) B. The Meeting Place Cannot Be Changed

    地址:http://codeforces.com/contest/782/problem/B 题目: B. The Meeting Place Cannot Be Changed time limit ...

  10. 整理一些《纸书科学计算器》的小Tips

    本文最开始是在2016年的文章 Win10应用<纸书科学计算器>更新啦! 发表之后撰写的,当时那篇文章收到了不少人点赞,应用在国内市场的日下载量也突然上涨,让我感到受宠若惊,这里要感谢Wp ...