美文网首页
图及其应用场景

图及其应用场景

作者: 文景大大 | 来源:发表于2020-11-04 08:00 被阅读0次

一、图的一些基本概念

图是一种非线性的数据结构,具有如下一些基本概念:

  • 图中的各个元素称之为顶点;
  • 顶点和其它任意顶点之间的关联关系称之为边;
  • 一个顶点的边的数量称之为度;
  • 图可以分为无向图和有向图,微信中的朋友关系就是一种无向图,微博中的关注与被关注的关系就是一种有向图;
  • 在有向图中,指向当前顶点的边的个数称之为入度,由当前顶点指出去的边的个数称之为出度;
  • 图中每条边都有权重的就是带权图,QQ亲密度关系的表示就是一种带权无向图;

二、图的存储

2.1 邻接矩阵

本质上是一个超大的二维数组A,在无向图中,如果顶点i和j之间有边,那么A[i][j]A[j][i]就置为1;在有向图中,如果顶点i指向顶点j,那么A[i][j]就置为1;对于带权图,数组相应位置存放的就是权重数值。

三种图的邻接矩阵存储法

优点:实现起来比较简单,使用过程中也比较直观。当要判断某两个顶点是否有关系的时候,直接利用数组的随机访问特性就能很高效率地得到答案。

缺点:比较浪费存储空间。比如在无向图中,顶点i和顶点j之间有关系,其实只要存储A[i][j]即可,存储空间浪费了一半;还有如果遇到稀疏图,比如顶点很多,但是有边的就只有几个,那么二维矩阵数组中将会出现大量的0。

2.2. 邻接表

采用数组加上链表的形式,有点类似于散列表中的链表法。数组中存放的是每一个顶点,每个顶点对应的链表中存放的是该顶点指向的顶点。

有向图的邻接表存储法

优点:比较省空间。

缺点:查询效率比较慢,特别是当链表很长的时候,可能要借助平衡二叉树(红黑树)的优化方案来提速;

三、图的搜索算法

搜索算法的目的是为了求解一个顶点到另外一个顶点的路径。

3.1 广度优先搜索

直观地讲,广度优先搜索就是一种地毯式地层层推进搜索策略,先查找距离当前顶点最近的,然后逐步推向最外层的。

广度优先搜索过程示意图

3.2 深度优先搜索

直观地讲,深度优先搜索就是一种走迷宫式地一条路走到黑的搜索策略,就是先从当前顶点开始选择一条路一直走到头为止,然后退回一步,继续寻找其它路径。

深度优先搜索过程示意图

3.3 A*算法

A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。笔者曾经将上海地铁站所有站点都录入数据库,然后借助该算法求解A站到B站的最短路径,并输出中途经过的所有站点名称。

四、总结

广度和深度优先搜索算法既可以作用于无向图,也可以作用于有向图,但它们是比较暴力的搜索算法,仅适用于图不是很大的场景。

在实现上,广度优先搜索算法需要借助队列来实现,深度优先搜索算法是使用了回溯的算法思想,可以使用递归来实现,即使用栈来实现。

相关文章

  • 图及其应用场景

    一、图的一些基本概念 图是一种非线性的数据结构,具有如下一些基本概念: 图中的各个元素称之为顶点; 顶点和其它任意...

  • SQLite及其应用场景

    SQLite是一个库(Software Library)文件数据库:它可以将数据库的所有表、索引、 视图等存储一个...

  • Zookeeper及其应用场景

    Overview ZooKeeper(简称ZK)是一个分布式的,开放源码的分布式应用程序协调服务,是Google的...

  • 2018-10-25 Activity的四种启动模式及其应用场景

    Activity的四种启动模式及其应用场景 这个就配图了 就是这个简短的几句话基本可以完全理解的 standard...

  • 03-UI进阶(7)

    0619-Quartz2D演练 1. 五种上下文及其输出目标 2. 应用场景 图片水印:防止盗图等 图片裁剪:比如...

  • DBFlow—目前最好用的安卓数据库,DBFlow使用详解

    声明:本文章独家由公众号终端研发部原创发文 数据库DBFlow应用场景及其分析 先上一张效果图 dbflow定义 ...

  • 深入了解Zookeeper核心原理

    之前的文章[Zookeeper基础原理&应用场景详解]中将Zookeeper的基本原理及其应用场景做了一个详细的介...

  • 各种指数及其应用场景

    头条指数 头条指数是什么? 头条指数是今日头条算数中心推出的一款数据产品。作为内容生产、传播、营销、舆情监控的重要...

  • CopyOnWrite 思想及其应用场景

    CopyOnWrite(写入时复制)思想 CopyOnWrite(简称COW,中文意思是:写入时复制)就是在进行写...

  • 位运算及其应用场景

    概念理解 按位与 & :全1为1,有0为0 假设 1:true,0:false,联想Java中的&&运算符,只有两...

网友评论

      本文标题:图及其应用场景

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