美文网首页
数据结构与算法--图

数据结构与算法--图

作者: zhujunhua | 来源:发表于2020-12-29 17:48 被阅读0次

涉及图的算法有很多,也非常复杂,比如图的搜索、最短路径、最小生成树、二分图等等。

如何理解“图”(Graph)?

树中的元素我们称为节点,图中的元素我们就叫做顶点(vertex)
图中的一个顶点可以与任意其他顶点建立连接关系,我们把这种建立的关系叫做边(edge)
顶点的度(degree),就是跟顶点相连接的边的条数。
边有方向的图叫做“有向图”,边没有方向的图就叫做“无向图”
无向图中有“度”这个概念,表示一个顶点有多少条边。在有向图中,我们把度分为入度(In-degree)出度(Out-degree)
顶点的入度,表示有多少条边指向这个顶点;顶点的出度,表示有多少条边是以这个顶点为起点指向其他顶点。
带权图(weighted graph),每条边都有一个权重(weight)

图的存储方法

存储方法:邻接矩阵(Adjacency Matrix)

图最直观的一种存储方法就是,邻接矩阵(Adjacency Matrix)
邻接矩阵的底层依赖一个二维数组。对于无向图来说,如果顶点 i 与顶点 j 之间有边,我们就将 A[i][j]和 A[j][i]标记为 1;对于有向图来说,如果顶点 i 到顶点 j 之间,有一条箭头从顶点 i 指向顶点 j 的边,那我们就将 A[i][j]标记为 1。同理,如果有一条箭头从顶点 j 指向顶点 i 的边,我们就将 A[j][i]标记为 1。对于带权图,数组中就存储相应的权重。

邻接矩阵存储.png
用邻接矩阵来表示一个图,虽然简单、直观,但是比较浪费存储空间
如果我们存储的是稀疏图(Sparse Matrix),也就是说,顶点很多,但每个顶点的边并不多,那邻接矩阵的存储方法就更加浪费空间了。比如微信有好几亿的用户,对应到图上就是好几亿的顶点。但是每个用户的好友并不会很多,一般也就三五百个而已。如果我们用邻接矩阵来存储,那绝大部分的存储空间都被浪费了。
邻接矩阵存储方法的优点:
  • 首先,邻接矩阵的存储方式简单、直接,因为基于数组,所以在获取两个顶点的关系时,就非常高效。
  • 其次,用邻接矩阵存储图的另外一个好处是方便计算。
    这是因为,用邻接矩阵的方式存储图,可以将很多图的运算转换成矩阵之间的运算。

存储方法:邻接表(Adjacency List)

邻接表存储.png

在基于链表法解决冲突的散列表中,如果链过长,为了提高查找效率,我们可以将链表换成其他更加高效的数据结构,比如平衡二叉查找树等。邻接表长得很像散列。所以,我们也可以将邻接表同散列表一样进行“改进升级”。
我们可以将邻接表中的链表改成平衡二叉查找树。实际开发中,我们可以选择用红黑树。这样,我们就可以更加快速地查找两个顶点之间是否存在边了。当然,这里的二叉查找树可以换成其他动态数据结构,比如跳表、散列表等。除此之外,我们还可以将链表改成有序动态数组,可以通过二分查找的方法来快速定位两个顶点之间否是存在边。

存储方法总结:
邻接矩阵存储方法的缺点是比较浪费空间,但是优点是查询效率高,而且方便矩阵运算。
邻接表存储方法中每个顶点都对应一个链表,存储与其相连接的其他顶点。尽管邻接表的存储方式比较节省存储空间,但链表不方便查找,所以查询效率没有邻接矩阵存储方式高。针对这个问题,邻接表还有改进升级版,即将链表换成更加高效的动态数据结构,比如平衡二叉查找树、跳表、散列表等。

极客时间--数据结构与算法之美--30 | 图的表示:如何存储微博、微信等社交网络中的好友关系?

相关文章

  • 数据结构与算法 - 查找

    数据结构与算法系列文章数据结构与算法 - 时间复杂度数据结构与算法 - 线性表数据结构与算法 - 树形结构数据结构...

  • 思维导图之数据结构+算法

    数据结构+算法 = 程序 数据结构比较 参考文章 数据结构与算法数据结构与算法(java)

  • 数据结构与算法 - 树形结构

    数据结构与算法系列文章数据结构与算法 - 时间复杂度数据结构与算法 - 线性表数据结构与算法 - 树形结构 目录 ...

  • 最新完整数据结构与算法

    最新完整数据结构与算法 P11_课程介绍 P22_数据结构与算法概述_数据结构 P33_数据结构与算法概述_算法 ...

  • 001 数据结构与算法基本概念

    数据结构与算法导图 数据结构基本术语 数据 数据元素 数据项 数据对象 数据结构 逻辑结构与物理结构 数据类型与抽...

  • 数据结构与算法

    数据结构与算法之美 数据结构与算法之美1--如何学数据结构与算法之美2--复杂度分析(上)数据结构与算法之美3--...

  • 算法与数据结构(1),List

    算法与数据结构(1),List 算法与数据结构(2),Map 算法与数据结构(3),并发结构 习惯了,深夜更新博客...

  • 数据结构与算法-目录

    数据结构与算法-目录 C语言篇 数据结构和算法-C语言篇1-绪论数据结构和算法-C语言篇2-初识算法数据结构与算法...

  • 算法与数据结构(3),并发结构

    算法与数据结构(1),List 算法与数据结构(2),Map 算法与数据结构(3),并发结构 本来已经合上电脑了,...

  • 软件、程序、算法之间的 关系与区别

    软件、程序、算法 之间的关系与区别 首先,要明白 软件 = 程序+文档 = 数据结构+算法+文档(如右图所示) 软...

网友评论

      本文标题:数据结构与算法--图

      本文链接:https://www.haomeiwen.com/subject/mkwfoktx.html