1. 概述

在本教程中,我们将探讨有向图无向图之间的区别,并学习在什么情况下更适合使用其中一种图结构。

我们会从图论的基本概念出发,逐步分析它们在建模实际关系时的适用性,并引入图的熵(entropy)这一信息论概念,帮助我们从信息量角度理解两种图结构的本质差异。

2. 图、边与关系

2.1. 图还是网络?

程序员经常提到“网络”这个词,但当话题转向“图”时,常常会混淆两者。实际上,在图论中,图(Graph)是网络的数学抽象,而网络是图在现实世界中的体现。

例如,我们可以将互联网或局域网建模为一个网络:每个节点是一台计算机,每条边表示它们之间的连接。这类网络具有涌现性(Emergent Behavior),即整体行为不能简单归结为个体行为的总和。

在图论中,这些概念被形式化为:

网络理论 图论
网络
节点 顶点
连接

这种术语对应关系贯穿全文,请牢记。

2.2. 图在信息论中的意义

图不仅是计算机科学中重要的数据结构,还能帮助我们研究对象之间的关系而不仅仅是对象本身。典型应用场景包括:

  • 知识表示
  • 符号推理
  • 多智能体仿真
  • 动态系统建模

此外,图在信息论中也有深入研究,尤其是图的,它是衡量图结构复杂性的重要指标。

2.3. 图与熵

图的熵通常通过邻接矩阵(Adjacency Matrix)来定义。邻接矩阵是一个 N×N 的矩阵,其中:

  • 每一行表示边的起点(tail)
  • 每一列表示边的终点(head)

邻接矩阵的元素为 0 或 1,表示是否存在从 i 到 j 的边。

我们可以通过以下步骤计算图的熵:

  1. 将邻接矩阵展平(flatten)为一个随机变量 x
  2. 使用香农熵公式计算:

$$ H(x) = -\sum_{i=1}^{N^2} {p(x_i) \cdot \log(p(x_i))} $$

图的熵越高,说明图结构越复杂、不确定性越大。这也是我们不能将有向图和无向图等同视之的根本原因。

3. 有向图

3.1. 有向图的定义

有向图(Directed Graph)中的边具有方向性,不保证对称性。也就是说,如果顶点 a 到 b 有边,不代表 b 到 a 也一定有边。

边的方向通常用箭头表示,起点为箭尾,终点为箭头。

✅ 有向图是最通用的图结构,因为它不要求边的对称性。

3.2. 常见应用场景

有向图非常适合建模方向性明确、非对称的关系。例如:

  • 家谱树(Genealogical Tree):一个人可以是某个关系中的父母,也可以是另一个关系中的子女,但不能同时互为父母与子女
  • 网页链接:A 页面可以链接到 B 页面,但 B 页面不一定反向链接 A 页面

图示如下:

network4-2

4. 无向图

4.1. 无向图的定义

无向图(Undirected Graph)要求边具有对称性。如果顶点 a 和 b 之间有边,则 a 到 b 和 b 到 a 都存在边。

这相当于说:无向图的邻接矩阵是对称的

✅ 无向图更适用于建模双向、对称的关系。例如:

  • 朋友关系:“A 是 B 的朋友”意味着“B 也是 A 的朋友”
  • 局域网连接:设备 A 与设备 B 连接,意味着 B 也连接 A

图示如下:

network4-3

4.2. 常见应用场景

无向图广泛应用于以下场景:

  • 计算机网络拓扑:设备之间是双向连接的
  • 社交网络:好友关系是双向的
  • 行人路径网络:两个交叉口之间可以双向通行

图示如下:

network comps

4.3. 对称的有向图就是无向图

我们可以通过邻接矩阵是否对称来判断一个图是否是无向图:

✅ 一个图是无向图当且仅当其邻接矩阵沿主对角线对称。

这为我们提供了一个从有向图推导出对应无向图的方法,也让我们可以进行信息论上的比较。

⚠️ 但要注意:一个无向图可能对应多个不同的有向图

图示如下:

7-2

5. 有向图与无向图的熵比较

5.1. 比较的前提条件

为了比较有向图与无向图的熵,我们假设两者具有相同的顶点集合,但边可能不同。

  • 有向图 D:边数为 e
  • 对应的无向图 U:边数在 e(D 是对称的)到 2e(D 中无反向边)之间变化

这为我们提供了一个统一的比较基础。

5.2. 熵的计算与比较

设:

  • D 的邻接矩阵对应的随机变量为 d
  • U 的邻接矩阵对应的随机变量为 u

香农熵公式如下:

$$ H(d) = - \left( \frac{e}{N^2} \cdot \log \left( \frac{e}{N^2} \right) + \left(1 - \frac{e}{N^2} \right) \cdot \log \left(1 - \frac{e}{N^2} \right) \right) $$

对于无向图:

  • 若 D 对称:H(u) = H(d)
  • 若 D 中无反向边:H(u) =

$$ H(u) = - \left( \frac{2e}{N^2} \cdot \log \left( \frac{2e}{N^2} \right) + \left(1 - \frac{2e}{N^2} \right) \cdot \log \left(1 - \frac{2e}{N^2} \right) \right) $$

下图展示了 N = 10 时,H(d) 与 H(u) 的对比:

entropy

结论是:**除了极少数情况外,H(d) ≠ H(u)**。这说明我们不能随意将有向图当作无向图处理,否则会损失信息。

6. 如何选择使用哪种图结构?

选择图结构时,应根据实际关系的性质来决定:

使用有向图的情况

  • 关系具有方向性且非对称(如“是某人的孩子”)
  • 网络稀疏,信息损失大(如网页链接)

使用无向图的情况

  • 关系对称且双向(如“是朋友”)
  • 不需要区分主客体(如社交网络、局域网连接)

同一系统可以建模为两种图的情况

  • 家庭关系:研究血缘时用有向图,研究家族归属时用无向图

7. 总结

  • 有向图边具有方向性,适合建模非对称关系
  • 无向图边是对称的,适合建模双向关系
  • 两者在信息论上具有本质差异,不能随意互换
  • 选择图结构应根据建模对象的性质决定

⚠️ 踩坑提醒:很多开发者在处理图结构时,容易忽略方向性带来的信息损失,导致模型偏差。务必根据实际业务逻辑选择合适的图结构。


原始标题:What Is the Difference Between a Directed and an Undirected Graph