前言
近日开始系统学习《深入浅出图神经网络》一书,将笔记记作博客,供日后参考。在学习的过程中,若本文及后文中有谬误,欢迎批评指正。
第一章 图的概述
- 为什么是图?
图被用来表示物体与物体之间的关系,如化学分子、通信网络和社交网络等。任何一个包含二元关系的系统,都可以用图来表述。
图的基本定义:
- 图的基本定义
图可以表示为顶点(Vertex)和边(Edge)的集合,记作G = (V,E)。同时,设图的顶点数为N,边数为M。 - 图的基本类型
有向图、无向图;加权图(网)、非加权图(认为权重是相同的,如都是1,可看作仅给出了顶点之间的连接关系);连通图、非连通图;二部图。
此处只有二部图较为陌生,因为它没有出现在数据结构里,但其实在离散数学中我们可以看到二部图的影子。二部图是一种十分常见的图数据图像,描述了两类对象之间的交互关系,如:用户和商品、作者与论文。
- 邻居和度
如果存在一条边连接顶点vi和vj,那么称二者为邻居(相邻点)。我们记vi的所有邻居的集合为N(vi)。以vi为端点的边数成为vi的度(degree),记作deg(vi)。则有,deg(vi) = |N(vi)|,Σvideg(vi) = 2|E|。有向图中亦存在入度和出度一说,看字面就很好理解,不做赘述。 - 子图与路径
若图G’ = (V’,E’)的顶点集和边集为图G = (V,E)的顶点集的子集和边集的子集,那么G’为G的子图。一条路径即为从顶点vi到vj需要经过的边。
图的存储与遍历:
- 邻接矩阵:使用二维数组来存储图中顶点之间边的关系。数组下标代表顶点,一般将第一维作为起点,第二维作为终点,而二维数组存储的值即为边权。除此之外,我们还需要使用一个一维数组来存储顶点的信息。
- 关联矩阵:需要两个一维数组分别存储顶点集和边集,用一个二维数组来表示关联矩阵。
- 关联矩阵和邻接矩阵的图示:如下图👇