映射数据的两种常见结构是集合和图。实现一个图来映射资源的最大风险是在图中可能有环(环指的是图的一个顶点有多条路径指向另一个顶点,这就意味着遍历图是个无止境的操作)。
——《云原生基础架构.保持资源映射简单》
前言
线性结构中,除首节点没有前驱、末节点没有后继外,一个节点只有唯一的直接前驱和唯一的直接后继;树结构中,除根节点没有前驱节点外,其余的每个节点只有唯一的一个前驱(双亲)节点和多个后继(子树)节点;而在图中,任意节点间都可能有直接关系,也就是说图中一个节点的前驱和后继的数目是不限的。
图的定义
G=(V,E)
V代表图中顶点的非空有限集合,E是图中边的有限集合。
1)有向图。图中每条边都是有方向,记作<vi,vj>,表示从vi到vj有一条有向边;vi称作弧尾,vj称作弧头;
2)无向图。图中每条边都无方向,记作(vi,vj);
3)完全图。一个无向图具有n个顶点,而每个顶点与其它n-1个顶点之间都有边,则称之为无向完全图,此时其共有n(n-1)/2条边。同理n个顶点的有向完全图中边数为n(n-1),因为有向完全图每两个不同顶点之间都有两条方向相反的边;
注:任何一个顶点都可以被看作第一个顶点,巴特为了计算,给图中每个顶点赋一个序号值。
图的存储结构
1)邻接矩阵表示法
图的邻接矩阵表示法是指用一个矩阵