🤖 AI文章摘要 gemini-2.0-flash-lite

这篇文章介绍了图的基本概念、分类、性质以及遍历方法。图由顶点和边组成,文章定义了度、行走路径、路径等概念。图的分类包括空图、单点图、无向图、有向图等。文章还介绍了有向图和无向图的最大边数计算方法。最后,文章讲解了广度优先遍历和深度优先遍历的实现方法,并指出需要使用队列或栈来辅助遍历,同时使用已发现数组或哈希映射来避免闭环。文章还提供了Python代码示例,展示了图的封装。

a2284c1767861df3e439fc94bf33e985

图(Graph)

对于图我们关注以下概念:

  • 度(degree): 节点连接的边数。入度(in degree),节点连接的入边数。出度(out degree),节点连接的出边数。
  • 顶点(vertex):顶点是图的基本组成部分,有时也叫节点(Node)
  • 边(edge): 边用于连接图中的两个顶点。
  • 行走路径(walk): 行走路径是一个节点序列,节点前驱后继需要有边进行连接。
  • 路径(path): 路径是一个特殊的行走路径,他不包含重复节点。

图的分类

  • 空图(Null Graph): 不包含边的图。
  • 单点图(Trivial Graph): 仅包含1个节点的图
  • 无向图(Undirected Graph): 图中的边无确定方向的图。
  • 有向图(Directed Graph):图中的边有确定方向的图。
  • 连通图(Connected Graph): 通过图中任一节点可以访问图中其他任意节点的图。
  • k-常规图(K Regular Graph): 图中任一节点的度都为k的图。若$k=v-1$则称为完全图,它包含最多的边数。
  • 环图(Cycle/Cyclic Graph): 图中所有节点包围成一个环称为环图(Cycle Graph),图中节点至少形成1个环的图称为(Cyclic Graph)有环图。
  • 二分图(Bipartite Graph): 图中节点可分为两分区,分区内节点间不通过边进行连接。
  • 加权图(Weighted Graph): 图中边进行赋权的图。

图的性质

有向图中节点数量$V_{n} = D_{out} = D_{in}$,最大边数$E_{max} = V_{n} * (V_{n} - 1)$
无向图中最大边数$E_{max} = \frac{V_{n} * (V_{n} - 1)}{2}$

图的遍历

广度优先遍历

我们可以使用队列跟踪当前顶点的所有邻接顶点。但图可能存在闭环,需要定义一个已发现数组或哈希映射,遍历邻接顶点时将未发现的顶点入队,并设置顶点为已发现。

深度优先遍历

我们可以使用跟踪当前顶点的所有邻接顶点。但图可能存在闭环,需要定义一个已访问数组或哈希映射,在访问当前顶点时先判断是否被访问,访问过后设置顶点为已访问。

图的封装