好的,下面是一份图论基础和表示学习笔记的markdown文档,希望对您有帮助:

图论基础和表示学习笔记

图的概念

图(Graph)是一种非常重要的数据结构,它可以用来描述各种实际问题中的“物体”以及它们之间的“关系”。在图中,我们用“顶点”(Vertex)来代表每个物体,用“边”(Edge)来表示这些物体之间的关系。

通常我们会用一个集合 VV 来表示这些顶点,用一个集合 EE 来表示这些边,因此图 GG 可以表示为 G=(V,E)G=(V,E)。此外,我们还可以通过以下方式来表示图:

邻接矩阵

邻接矩阵是将图中的顶点按照某种顺序排列,然后用一个矩阵来表示它们之间的关系。设 GG 是一个具有 nn 个顶点的图,那么它的邻接矩阵可以表示为一个 n×nn \times n 的矩阵 AA,其中 Ai,j=1A_{i,j}=1 表示顶点 ii 和顶点 jj 之间有一条边,否则 Ai,j=0A_{i,j}=0

邻接表

邻接表则是以每个顶点为中心,将与之相关联的边存储在一个链表中,然后再将这些链表按照某种方式连接起来。具体来说,我们可以用一个长度为 nn 的数组 AdjAdj 来表示图 GG 的邻接表,其中 Adj[i]Adj[i] 表示与顶点 ii 相连的边所构成的链表。

图的遍历

在对图进行处理时,经常需要对整个图进行遍历,以便于查找特定的信息或者处理一些问题。常见的图遍历算法有深度优先搜索(Depth First Search, DFS)和广度优先搜索(Breadth First Search, BFS)。

深度优先搜索

深度优先搜索一般使用递归的方式进行实现,具体步骤如下:

  1. 从图中任意一个顶点开始。
  2. 访问该顶点,并标记为“已访问”。
  3. 递归遍历该顶点的所有未访问的邻居顶点,并重复步骤 2 和步骤 3。

广度优先搜索

广度优先搜索则是利用队列(Queue)来实现,具体步骤如下:

  1. 从图中某个顶点开始。
  2. 将该顶点加入到队列中,并标记为“已访问”。
  3. 重复以下步骤,直到队列为空:
    • 弹出队列首部的一个顶点。
    • 访问该顶点,并将它所有未访问的邻居顶点加入到队列中。

图表示学习

图表示学习(Graph Representation Learning)是近年来出现的一种机器学习技术,它的目的是将图中的每个顶点转换为一个低维向量,以便于进行后续的分类、聚类等任务。常用的图表示学习方法有以下几种:

DeepWalk

DeepWalk 是一种基于随机游走的无监督算法,其核心思想是利用随机游走的方式来模拟“人”在图中的行走,然后通过计算上下文语义的方式来对每个节点进行向量化。

Node2Vec

Node2Vec 是一种可以控制随机游走行为的无监督算法,其核心思想是考虑每个节点的“邻域结构”,然后根据其邻域结构中不同节点之间的相对距离来生成随机游走序列,最后再用 SkipGram 等算法来学习每个节点的向量表达。

GraphSAGE

GraphSAGE 是一种图卷积神经网络(Graph Convolutional Network, GCN)的变体,其核心思想是将一个节点的向量定义为其邻居节点的表示的聚合结果,然后将这些向量作为输入进行下一步的分类或聚类任务。

以上就是图论基础和表示学习笔记的内容,希望能够对您有所帮助。