图形数据结构和 Algorithms (例子)

⚡ 智能摘要

图数据结构是一种非线性的顶点和边的集合,其中每条边连接一对顶点。图可以模拟现实世界的网络,例如地图、社交关系和网页,并支持许多强大的算法。

  • 📐 结构体: 图 G = (V, E) 将一组顶点(节点)与一组连接它们的边(链接)配对。
  • 🔤 术语: 关键术语包括顶点、边、度、入度、出度、自环和邻接。
  • 🗂️ 表示: 图可以用邻接矩阵或邻接表存储,两者在空间占用方面各有优劣。
  • 🧭 类型: 根据结构,图可以分为有向图、无向图、加权图、循环图、无循环图、完全图、二分图等等。
  • 🌐 应用环境: Google 地图路径规划、社交网络、网站排名和资源依赖性都依赖于图。

图形数据结构和 Algorithms

数据结构中的图是什么?

图是一种非线性数据结构,由顶点和边组成,其中顶点包含信息或数据,边则起到连接一对顶点的作用。

它用于解决现实世界的问题,例如寻找到达目的地的最佳路线以及电信和社交网络的路由。用户被视为图中的节点,而连接用户的边则由导线表示。

如果将边表示为 E,将顶点表示为 V,则图 G 可以写成顶点和边的集合,例如 G(V,E).

数据结构中的图示例

以下是一个简单的图数据结构示例:

数据结构中的图示例

这是一个简单的无向图(图的一种类型)。它的顶点集为:{A, B, C, D, E, F}。两个顶点之间形成一条边。例如,A 和 B 之间有一条边连接。但是,A 和 F 之间没有任何边连接。

数据结构中的图形术语

以下是图数据结构中使用的一些重要术语:

术语描述
顶点每个数据元素都称为顶点或节点。在上图中,A、B、C、D 和 E 都是顶点。
边缘(弧)连接两个节点或顶点的链接称为边(弧)。它有两个端点,表示为(起始顶点,结束顶点)。
无向边它是双向边。
有向边它是一条单向边。
加权边缘带有值的边。
学位在图中,与一个顶点相连的边的数量称为该顶点的度。
入度连接到顶点的传入边的总数。
出度连接到顶点的传出边的总数。
自循环如果一条边的两个端点重合,则称该边为自环。
邻接如果两个顶点之间有一条边连接,则称这两个顶点相邻。

数据结构中的图类型

以下是最常见的 数据结构中的图类型:

  • 有向图
  • 无向图
  • 加权图
  • 双向图
  • 无限图
  • 空图
  • 简单图
  • 多图
  • 完整图
  • 连通图
  • 循环图
  • 有向无环图(DAG)
  • 循环图
  • 二分图
  • 欧拉图
  • 汉密尔顿图

如何在数据结构中表示图?

图通常以两种表示形式之一存储在内存中。选择哪种表示形式会影响图使用的内存量以及常见操作的运行速度。

  • 邻接矩阵: 这是一个二维 V × V 数组,其中单元格 [i][j] 为 1(或边的权重)表示顶点 i 和顶点 j 之间存在边,否则为 0。它允许 O(1) 的边查找,但占用 O(V²) 的空间,因此最适合稠密图。
  • 邻接表: 一个列表数组,其中每个顶点存储一个与其相邻顶点的列表。它使用 O(V + E) 的空间,并且对于稀疏图非常高效,这就是为什么大多数现实世界的图都使用它的原因。

您可以阅读更多相关内容。 图的邻接表和矩阵表示 教程。

图形数据结构的应用

图有很多应用场景。许多算法都使用图。以下是图的一些应用:

  • Google 地图使用图表来查找两条道路的交点并计算两点之间的距离。例如: Dijkstra算法,用于查找起点和终点之间的最短距离。
  • Facebook 使用图论来查找用户的共同好友。它的算法将每个用户视为图论中的一个节点。
  • 资源分配采用有向无环图(DAG),它会检查资源之间的依赖关系。
  • 此 Google 搜索引擎使用图表来创建网站排名。
  • 一张地图ping 该设备使用图数据结构。
  • A 路由器 其协议使用图来学习到达目的地的路径。

常见问题

图神经网络从图结构数据中学习,用于欺诈检测、推荐和药物发现。知识图谱支持人工智能问答,而深度学习框架则将每一次计算建模为一个运算图。

是的。像 GitHub Copilot 这样的 AI 助手可以根据简单的描述生成 BFS、DFS、Dijkstra 算法和拓扑排序的实现。不过,在使用代码之前,您仍然应该测试一些极端情况,例如节点不连通、图包含环路以及图为空等。

树是一种特殊的图,它是连通的且没有环,任意两个节点之间都只有一条路径。图则更一般:它可以包含环、不连通的部分以及有向边或带权边。

两种主要的遍历方法是广度优先搜索(BFS)和深度优先搜索(DFS)。BFS 使用队列逐层探索,而 DFS 使用栈或递归尽可能深入地探索,然后再返回上一层。trac王。

总结一下这篇文章: