关于有向图
在图论中,图可以分为无向图和有向图两种基本类型。无向图中的边没有方向,即连接两个节点的边不区分起点和终点。有向图中的边有方向,即连接两个节点的边有明确的起点和终点。
有向图在现实世界中有广泛应用:网页之间的链接、社交网络中的关注关系、任务之间的依赖关系、交通网络中的单行道等。 本章将系统介绍有向图的核心概念,并对比无向图学习。
有向图:边有方向
节点集、有向边集、阶、大小
有向图记做 GD = (V, A),其中 V 是节点集,A 是有向边集(arc/arrows)。 与无向图不同,有向图的边是节点的有序对,(a,b) ≠ (b,a)。 在有向边 (a,b) 中,a 叫做头(head),b 叫做尾(tail)。
🔄 有向 vs 无向
🎯 应用场景
出度、入度
度数的分解:入度 + 出度
有向图中,节点的入度(indegree)是指向该节点的边的数量,出度(outdegree)是从该节点出发的边的数量。 节点的度数等于入度和出度之和:deg(v) = indeg(v) + outdeg(v)。 对于整个有向图,所有节点的入度之和等于出度之和,都等于边数。
📐 度数定理
邻居:上家、下家
Predecessor 和 Successor
在有向图中,邻居的定义需要考虑边的方向。入度邻居(predecessor/上家)是指向该节点的节点,出度邻居(successor/下家)是该节点指向的节点。 这种不对称的邻居关系在社交网络、引用网络等场景中有重要应用。
💻 NetworkX 方法
🔍 对比无向图
有向多图:平行边
MultiDiGraph 允许平行有向边
与无向多图类似,有向多图(MultiDiGraph)允许在同一对节点之间存在多条有向边。 注意 a→b 和 b→a 是两条不同的边,同时 a→b 可以有多条平行边。 这在表示多条交通路线、多次交互等场景中很有用。
💻 NetworkX 代码
三元组:三个节点的16种关系
社交网络分析的基本单元
三元组(triad)由三个节点组成,根据节点之间的连接关系,共有16种可能的类型。 三元组的编码规则:前三位数字分别表示相互、非对称、空值二元组的数量; 字母表示方向,分别是向上(U)、向下(D)、循环(C)或传递(T)。 三元组分析在社交网络研究中有重要应用。
🔺 典型三元组
💻 NetworkX 函数
🎯 应用价值
NetworkX 创建图
列表、数据帧、NumPy数组三种方式
NetworkX 提供了多种创建图的方法:列表(最简单)、数据帧(可附加属性)、邻接矩阵(数学表示)。 这三种方法都支持创建有向图和无向图。 邻接矩阵揭示了图论的核心思想:图就是矩阵,矩阵就是图。
📋 列表方法
📊 数据帧方法
🔢 邻接矩阵方法
本章小结
本章系统介绍了有向图的核心概念,并与无向图进行了对比。 通过交互式组件,深入理解了有向边、入度出度、邻居关系、三元组等重要概念。