数据结构与算法中的图

数据结构与算法中的图

图的定义与术语

线性结构之间,数据元素之间满足唯一的线性关系。每个数据元素(除第一个和最后一个外)只有一个****直接前趋和直接后继**
在树形结构中,数据元素之间有着明显的层次关系,并且每个数据元素只与上一层中的一个元素,(parenet node)及下一层中的多个元素(孩子节点)相关
(线性结构、树形结构、图形结构)
在图形结构中,节点之间的关系是任意的,图中的任意两个数据元素之间都有可能相关。因此说,图是一种复杂的非线性结构。

图用 G = ( V , E ) G = (V,E) G=(V,E)表示,其中:

  • V V V是顶点(vertex)的集合。
  • E E E是边(edge)的集合。
    根据图中的边是否有方向,可以分为有向图和无向图

无向图

对于一个图,若每条边都是没有方向的。则称该图为无向图
在这里插入图片描述

有向图

对于一个图,若每条边都是有方向的,则称该图为有向图
在这里插入图片描述

完全图

任意两个节点都有一条边相相连

稀疏图

很少边或弧的图,其指标为稀疏因子,若稀疏因子小于0.05,可认为是稀疏图。

密集图

有较多边或弧的图。

顶点的度

对于无向图,顶点的度表示以该顶点作为一个端点边的数目,比如上面的无向图,中顶点 V 3 V_3 V3的度 D ( V 3 ) = 3 D(V_3) = 3 D(V3)=3
对于有向图,顶点的度分为入度和出度。某一顶点的度等于其入读和出度之和

入度

入度表示以该顶点为终点的入边的数目

出度

出度以该顶点为起点的出边的数目

子图

在这里插入图片描述
在这里插入图片描述

路径

在这里插入图片描述
在这里插入图片描述
换句话说,路径都是从图上的一点出发,到图上另一点的方法
从图上的一点出发,到图上另一点的方法可能不止一个,即可能有多个路径。

回路

回路也称为环,简单来说,回路是指一条路径的终点和起点为同一个顶点。
在这里插入图片描述
无向图中,如果两个节点之间有平行边,容易让人误看作环

网络

带权重的连通图称为网
在这里插入图片描述

图的存储结构

相邻矩阵

图的相邻矩阵,或邻接矩阵,表示顶点之间的邻接关系。即有没有边。

有向图的相邻矩阵

在这里插入图片描述

无向图的相邻矩阵

在这里插入图片描述

邻接表

对于稀疏图,可以采用邻接表存储法。

  • 边较少,相邻矩阵就会出现大量的零元素
  • 相邻矩阵的零元素就会耗费大量的存储空间和时间。

顶点和边的信息如下:
在这里插入图片描述

无向图的邻接表示

无向图同一条边,在邻接表中出现两次
在这里插入图片描述
上面的图用邻接表可以表示:
在这里插入图片描述

带权图的邻接表表示

在这里插入图片描述
在这里插入图片描述

有向图的邻接表(出边表)

在这里插入图片描述
在这里插入图片描述

有向图逆邻接表(入边表)

在这里插入图片描述
在这里插入图片描述

十字链表

十字链表可以看作是邻接表和逆邻接表的结合
对应于有向图的每一条弧有一个条目:共有5个域:

  • 头 : headvex
  • 尾:tailvex
  • 下一条共尾弧:tailnextarc
  • 下一条共弧: headnextarc
  • 弧权值等info域。

顶点表目有3个域组成:

  • data 域
  • firstinarc 第一条以该顶点为终点的弧
  • firstoutarc 第一条以该顶点为始点的弧
    在这里插入图片描述
    十字链表有两组链表组成:
  • 行和列的指针序列
    每个结点都包含两个指针:
  • 同一行的后继
  • 同一列的后继
    在这里插入图片描述

图的遍历

图的遍历是给出一个图 G G G和其中的任意一个顶点 V 0 V0 V0,从 V 0 V0 V0出发系统的访问 G G G中的所有的顶点,每个顶点访问而且只访问一次。

从一个顶点出发,试探性的访问其余顶点,同时必须考虑到下列情况:

  • 从一个顶点出发,可能不能到达所有其他的顶点,如非连通图。
  • 也有可能会陷入死循环,如存在回路的图
    一般情况下,可以为每个顶点保留一个标志位:
  • 算法开始时,所有顶点的标志位置零。
  • 在遍历过程中,当某个顶点被访问时候,其标志位就会被标记为已访问。

深度优先遍历

深度优先搜索(简称DFS) 类似于树的先根次序遍历,尽可能先对纵深方向进行搜索:

** 选取一个未访问的点 v 0 v0 v0 作为源点

  • 访问顶点$ v0$
  • 递归地深搜遍历 $v0 $邻接到的其他顶点
  • 重复上述过程直至从 $v0 $有路径可达的顶点都已被访问过
  • 再选取其他未访问顶点作为源点做深搜,直到图的所有顶点都被访问过

在这里插入图片描述
深度优先遍历的顺序是:
在这里插入图片描述

广度优先遍历

*** 广度优先搜搜**,其遍历过程是:

  • 从图中的某个顶点 v0 出发
  • 访问并标记了顶点 v0 之后
  • 一层层横向搜索 v0 的所有邻接点
  • 对这些邻接点一层层横向搜索,直至所有由 v0 有路径可达的顶点都已被访问过
  • 再选取其他未访问顶点作为源点做广搜,直到所有点都被访问过
    在这里插入图片描述
    广度优先搜索的顺序是:
    在这里插入图片描述

最短路径

单源最短路径

在这里插入图片描述

迪杰斯特拉算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
算法单源最短路径迭代过程:
在这里插入图片描述
该算法是贪心法, 不适用于负权值的情况,因为权直当做最小取进来后,不会返回去重新计算,即使不存在负的回路,也可能有在后面出现的负权值,从而导致整体计算错误。

每对结点间的最短路径

Floyd算法对每对结点之间的最短路径。
用邻接矩阵adj来表示带权有向 图

基本思想

在这里插入图片描述

最小生成树

G G G的生成树是一颗包含所有顶点的树,树上的所有权值总和表示代价,那么在 G G G的所有的生成树中,代价最小的生成树,称为 G G G的最小生成树。

在这里插入图片描述

总结

不用太在意,慢慢的总结完整后,开始研究图结构及其存储,全部将其搞定都行啦的样子与打算。
不用太在意,其他的学习,要学会用可以用计算机自动计算出来‘
先助攻研读论文在说其他的样子域打算。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

big_matster

您的鼓励,是给予我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值