茶艺师学算法打卡14:图
学习笔记
图是非线性的数据结构,与树相比:
- 树的节点,在图这里是顶点(vertex)
- 树的边,在图这里是边(edge)
除了这些,图还有以下概念:
- 度(degree),用来描述与顶点相连的边数。指向顶点的边数,称之为入度;从顶点出发的边数,称之为出度
- 边有方向的图,称之为有向图;没有方向,无向图
- 边上的值,称之为权重(weight)
图的存储方法也有多种,常用的有:
- 邻接矩阵(Adjacency Matrix)简单来说就是一个矩阵,初始值为0,有连边的为1,无向图正着反着都为1(双向 == 无向),有权重的直接是权重值
- 邻接表(Adjacency List)这很像数组,数组的每一位插着链表,链表记录着顶点连向的下一个顶点。这样的邻接表默认记录着顶点出度的情况。自然就有逆邻接表,记录着顶点入度的情况
存储方法的选择是基于算法。除了考虑算法,基于数据的规模,小的可以在内存里处理,大一点的可以存硬盘,甚至是基于哈希算法的数据分片分布在不同的机器上。再大点,可以考虑使用数据库。