← 返回目录

Chapter 14: 常见图

用NetworkX绘制常见图,并了解特性

🔷 完全图•🔲 二分图•⚙️ 正则图•🌳 树•💎 柏拉图图

关于常见图类型

图论中有许多经典的图结构,每种图都有独特的性质和应用场景。 NetworkX提供了丰富的函数来创建和操作这些图。 通过可视化这些常见图,我们可以更好地理解它们的结构特征和数学性质。

本章将介绍几种常见的图类型:完全图(所有节点两两相连)、二分图(节点分为两个子集)、正则图(所有节点度数相同)、树(无环连通图)、柏拉图图(基于正多面体的图)。 这些图在计算机科学、网络分析、组合优化等领域都有重要应用。

✦
14.1

常见图类型

NetworkX中的图类型展示

NetworkX提供了多种函数来创建常见的图结构。 本节展示9种常见图类型,包括哑铃图、轮图、星图、完全图、二分图、循环图、路径图、棒棒糖图和梯子图。 每种图都有独特的结构和应用场景。

🎯 特殊结构

• 哑铃图:两个完全图通过一条边连接
• 轮图:中心节点连接循环图
• 棒棒糖图:完全图连接路径图
• 梯子图:两条平行的路径图

📊 基础图类型

• 完全图:所有节点两两相连
• 循环图:节点形成环
• 路径图:节点形成链
• 星图:中心节点连接所有其他节点

💻 NetworkX创建

nx.barbell_graph(4, 2)
nx.wheel_graph(6)
nx.star_graph(7)
nx.cycle_graph(8)
✦
14.2

完全图

每一对节点都有边相连

完全图(complete graph)是指每一对不同的节点都有一条边相连,形成了一个全连接的图。 如果一个完全图有n个节点,每个节点对应(n-1)条边,那么这个完全图将有n(n-1)/2条边。 完全图记作Kn,是一个(n-1)-正则图。补图(graph complement)的概念:两幅图有相同节点,没有相同边, 但把两幅图的边结合起来是一幅完全图。

🔷 完全图的性质

• 边数公式:|E| = n(n-1)/2
• 正则性:每个节点度数为n-1
• 连通性:任意两节点间有直接路径
• 直径:图的直径为1
• 团:最大团就是图本身

📐 补图关系

• 定义:G与G'节点相同,边互补
• 关系:G + G' = Kn
• 计算:G' = nx.complement(G)
G_complement = nx.complement(G)
✦
14.3

二分图

节点分为两个互不相交的子集

二分图(bipartite graph),也叫二部图,是指可以将图的所有节点划分为两个互不相交的子集U和V, 使得图中的每条边都连接一对不同子集中的节点。 换句话说,U中任意两个节点之间不相连,V中任意两个节点之间也不相连。完全二分图(complete bipartite graph)在二分图基础上更进一步, U中任意节点与V中任意节点均有且仅有唯一一条边相连。

🔲 二分图特征

• 节点集:V = U ∪ W,U ∩ W = ∅
• 边的性质:每条边连接U和W
• 子集内部:无边相连
• 着色性:可2-着色

💻 判断与操作

from networkx.algorithms import bipartite
bipartite.is_bipartite(G)
sets = bipartite.sets(G)
pos = nx.bipartite_layout(G, nodes)

🎯 应用场景

• 任务分配:人员与任务匹配
• 推荐系统:用户与物品
• 社交网络:用户与社区
• 生物网络:基因与疾病

🔗 多分图扩展

二分图可以推广到多分图(multi-partite graph): 节点被划分为k个子集,每条边连接不同子集中的节点。完全多分图则要求不同子集间的节点都有边相连。

G = nx.complete_multipartite_graph(3, 4, 5)

创建一个完全三分图,三个子集分别有3、4、5个节点

✦
14.4

正则图

每个节点的度都相同

正则图(regular graph)是指图中每个节点的度都相同的图。 如果一个图是正则的,那么它被称为正则图,并且其度被称为图的正则度。 特别地,如果所有节点的度都是k,那么这个图被称为k-正则图(k-regular graph)。 正则图具有高度的对称性,在网络设计、编码理论、化学分子结构等领域有重要应用。

⚙️ 正则图的性质

• 度和:∑deg(v) = nk = 2|E|
• 边数:|E| = nk/2
• 必要条件:nk必须是偶数
• 对称性:高度对称的结构
• 完全图:Kn是(n-1)-正则图
• 循环图:Cn是2-正则图

📊 构造条件

关键定理:k-正则图存在的充要条件

• 若k是偶数:任意n可构造
• 若k是奇数:需要n是偶数

原因:所有节点度数之和 = 2×边数,必须是偶数

G = nx.random_regular_graph(k, n)
✦
14.5

树

无环连通图

树(tree)是一种特殊的无环连通图。一个无向图是树,当且仅当图中的每两个节点之间存在唯一的路径, 并且图是连通的。树有许多重要性质:n个节点的树有n-1条边; 删除任意一条边,树变为不连通;增加任意一条边,树中出现环。 树在计算机科学和图论中有广泛应用,例如数据结构中的搜索树、算法中的树的遍历等。

🌳 树的性质

• 无环:不含环路
• 连通:任意两节点可达
• 边数:n个节点,n-1条边
• 唯一路径:节点间路径唯一
• 最小连通:删边即不连通

💻 NetworkX函数

nx.balanced_tree(r, h)
nx.binomial_tree(n)
nx.star_graph(n)
nx.path_graph(n)
nx.random_tree(n)

🎯 应用领域

• 数据结构:二叉搜索树、堆
• 机器学习:决策树、随机森林
• 网络:最小生成树
• 生物学:进化树、系统发育树
🌲
生命之树

地球物种分类树是一种用来组织和分类地球上生物多样性的树形结构。 这个树形结构基于物种的共同特征,将生物按照层次分类, 从大类别(域,domain)到小类别(物种,species)。 这种分类系统有助于科学家理解生物之间的亲缘关系,以及它们是如何进化和演化的。

✦
14.6

柏拉图图

基于五个正多面体的图

柏拉图图(Platonic graph)是基于柏拉图立体骨架的图。 柏拉图立体(Platonic solid),也叫正多面体,其每个面全等,均为正多边形。 五个柏拉图立体分别是:正四面体(tetrahedron)、正六面体(cube)、正八面体(octahedron)、正十二面体(dodecahedron)和正二十面体(icosahedron)。 所有柏拉图图都是平面图,可以在平面上绘制而边不交叉。

🔷 五个柏拉图图

• 正四面体图:4节点,6边
• 正六面体图:8节点,12边
• 正八面体图:6节点,12边
• 正十二面体图:20节点,30边
• 正二十面体图:12节点,30边

💻 NetworkX创建

nx.tetrahedral_graph()
nx.cubical_graph()
nx.octahedral_graph()
nx.dodecahedral_graph()
nx.icosahedral_graph()

📐 平面图

• 定义:边不交叉的图
• 判断:nx.is_planar(G)
• 平面化:nx.planar_layout(G)
• 所有柏拉图图都是平面图
• 可在平面上无交叉绘制

✨ 柏拉图立体的特性

柏拉图立体是古希腊哲学家柏拉图研究的五种正多面体。 每个正多面体的面都是全等的正多边形,并且每个顶点处相邻的面数相同。 这五种立体在几何学、晶体学、化学分子结构等领域都有重要应用。

对称性
高度对称的几何体
唯一性
只有5种正多面体
✦

本章小结

本章介绍了几种常见的图类型以及它们的性质,并探讨了如何用NetworkX完成这些图的可视化。 每种图都有独特的结构特征和应用场景,理解这些图的性质对于图论的学习和实际应用都至关重要。

📊 图类型总结

• 完全图Kn:n(n-1)/2条边,(n-1)-正则
• 二分图:节点分两组,边连接不同组
• 正则图:所有节点度数相同
• 树:n个节点,n-1条边,无环连通
• 柏拉图图:5种,基于正多面体

💡 学习要点

• 理解每种图的定义和性质
• 掌握NetworkX中相关函数的使用
• 了解不同图类型的应用场景
• 认识图的数学特征(节点数、边数、度数等)
• 培养通过可视化理解图结构的能力
💡
学习建议
• 动手实践:使用NetworkX创建各种图,观察它们的结构
• 对比分析:比较不同图类型的性质和特点
• 应用思考:思考这些图在实际问题中的应用
• 深入学习:阅读图论教材,了解更多理论知识
• 参考官方文档:NetworkX官方提供了丰富的示例和教程