数据结构--图--的小总结

2019年7月22日
22:30

(1)图的简单概念
  • 顶点(vertex):图中的数据元素,V是顶点的一个有穷非空集合

  • VR:顶点关系的集合。

  • (Arc):若<v,w>属于VR, 则<v,w>表示从v到w的一条弧,弧是有向的,边(Edge)是无向

  • 有向图(Digraph):弧<v,w>为有序对

  • 无向图(Undigraph):边(v,w)为无序对

  • 完全图(Completed graph):有0.5 * n * (n-1)条边,n为顶点个数

  • 有向完全图:有n * (n-1)条弧,n为顶点个数

  • 稀疏图(Sparse graph):有很少边或弧的图

  • 稠密图(Dense graph):有很多边或弧的图

  • (Weight):与图有关的边或弧相关的数,这些全部可以表示从一个顶点到另一个顶点的距离或者耗费

  • (Network):带权的图

  • 邻接点(adjacent):对于无向图G=(V, {E}),如果边(v,v1)属于E,则称顶点v和v1为邻接点,边(v,v1)依附于顶点v,v1,或者说边(v,v1)和顶点相关联,有e(Edge) = 0.5 * 度(Degree)

  • 入度(Indegree),出度(Outdegree),有e(Arc)= 0.5 * 【indegree(vi)+ outdegree(vi)】,注释:vi表示第i条边。

  • 路径的长度:路径上的边或者弧的数目。

  • 回路/环(Cycle):第一个顶点和最后一个顶点相同的路径

  • 简单路径:路径上的顶点不重复出现的路径

  • 简单回路/简单环:除了第一个和最后一个顶点之外,其余顶点不重复的回路。

  • 连通:在无向图G中,如果从顶点v到顶点v1有路径,则称v和v1是连通的。

  • 连通图(Connected graph):对于图中的任意两个顶点vi,vj属于V,vi和vj都是连通的,则称G是连通图。

  • 连通分量(Connected component):是无向图中的极大连通子图。如1,2,3都是G3的连通分量。

几个连通分量

  • 强连通图:有向图的连通图。

  • 强连通分量:有向图的连通分量。

  • 生成树:一个连通图(无向)的极小连通子图(无环)。
    极小连通子图:有全部的n个顶点,有n-1条边的连通子图。

(2)图的存储结构
  • 顺序映像结构:数组
  • 链式映像结构:链表

1,邻接矩阵

  • 时间复杂度O(n2+e*n)其中n2为初始化,e*n为建立变之间的关系。
  • 无向图:顶点vi的度为第i行(列)的元素之和。
  • 有向图:顶点vi的度为第i行(出度数)和第i列(入度数)元素之和。

2,邻接表

无向图:
在这里插入图片描述
有向图:
在这里插入图片描述

3,十字链表:是有向图的另一种链式存储结构

十字链表

4,邻接多重表:是无向图的另一种链式存储结构

(3)图的遍历

示例图

1,深度优先遍历(Depch_First Search):

  • 概念:从图概中的某个顶点v出发,访问此点,然后依次从v未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此图还有顶点未被访问,则选图中另一个未曾被访问的顶点作为起点,重复上述过程。
  • 结果:v1 v2 v4 v8 v5 v3 v6 v7

2,广度优先遍历(Breadth_First Search):

  • 概念:访问图中某顶点v,之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问。
  • 结果:v1 v2 v3 v4 v5 v6 v7 v8

3,生成树:连通图的极小连通子图(无环)

示例图

一个生成树为:

生成树

4,最小生成树:(prim和kruskal算法)

  • MST性质:假设N = (V, {E})是一个连通网,U是顶点集合V的一个非空子集。若(u,v)是一条具有最小权值(代价)的变,其中u∈U,v∈V-U,则必存在一颗包含边(u,v)的最小生成树。

  • prim算法:时间复杂度O(n^2),适合边稠密的图

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

  • kruscal算法:时间复杂度O(e*log e),适合边稀疏的图

    • 概念:假设连通网N = (V,{E})。则令最小生成树的初始状态为只有n个顶点而无边的非连通图T = (V,{}),图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边的顶点落在不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边。
    • 图解

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

顶点活动网(Activity On Vertex Network)AOV网(不出现环)

  • 概念:顶点表示活动,边表示活动的先后关系的有向无环图。

边表示活动网(Activity On Edge)AOE网(不出现环)

  • 概念:顶点表示活动,边表示活动的先后关系,权表示活动持续的时间。

拓扑排序

  • 概念:由某个集合上的偏序得到该集合上的全序的操作称为拓扑排序。
    即:在AOV网中,若不存在回路,则所有活动可以排成一个线性序列,使得每个活动的前驱活动都排在该活动之前,我们把此序列称作拓扑序列(Topological order),由AOV网构造托剖序列的过程称为拓扑排序。

  • 构造方法:
    (1)在有向图中选一个没有前驱的顶点且输出之。
    (2)从图中删除该顶点和所有以它为尾的弧。
    (3)重复直到所有的点均已输出。

  • 示例

在这里插入图片描述
第一次构造:
在这里插入图片描述
输出为v1。
最后依次输出为:v1,v2,v3,v4,v5,v6

最短路径

  • Dijkstra算法
    • 基本原理
      假设arcs[i][j]为顶点i和j边上的权值,即为一个邻接矩阵。
      (1)选定一个顶点vi,vi到终点的距离设为D[i]。
      (2)选中一个终点vj ∈ min{ D[j], j ∈ 剩余顶点 },使得vi -> vj最小。
      (3)在剩余的点中选择一个顶点vk,进行如下计算:
      若 D[j] + arcs[j][k] < D[i] //表示vi -> vk的距离大于vi -> vj -> vk的距离
      做如下更新:
      D[k] = D[j] + arcs[j][k]
      重复(2)(3)步骤。

    • 例图

在这里插入图片描述

D[D] = 2
D[B] = 4
D[C] = ∞
D[E] = ∞

第一次执行:
选择D,
因为

D[D] + arcs[D][B] < arcs[A][B]

故更新

D[B] = D[D] + arcs[D][B]

依次执行就可以获得到各个终点的最短路径。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值