图论导引 - 第二章 - 11/08

图论导引 - 第二章 - 11/08

第二章:定义与示例 Definitions and examples

章节概述

在这一章中,我们为图论的深入研究奠定基础。第2节将第1章中的一些基本定义形式化,第3节提供了各种示例。在第4节中,我们展示如何用图来表示并解决三个来自趣味数学的问题。

定义

简单图 simple graph

一个简单图 G G G 由一个非空有限集 V ( G ) V(G) V(G) 以及一个有限集 E ( G ) E(G) E(G) 组成。我们称 V ( G ) V(G) V(G) 为 G G G 的顶点集, E ( G ) E(G) E(G) 为 G G G 的边集。

  • V ( G ) V(G) V(G) 中的元素称为顶点 vertices(或节点 nodes)
  • E ( G ) E(G) E(G) 是由 V ( G ) V(G) V(G) 中不同元素不同无序对 组成**(注意:一定是不同元素、不同无序对,与一般图进行区分)**,这些无序对称为边 edges。
    • 不同元素 指 不能有"环",即边不能指向自己。
    • 不同无序对 指 不能有"多重边",即同一对顶点不能包含多条边。
  • 一条边 { v , w } \{v,w\} {v,w} 被说成连接顶点 v v v 和 w w w,通常简记为 v w vw vw 。
  • 在简单图中,任何一对顶点的边最多只有一条。
一般图 general graph

允许有环(loop)或多重边(multiple edges)的图,叫一般图(general graph),也叫图 graph。

每个简单图都是图,但并非每个图都是简单图。

  • 环:允许顶点连接自身的边。
  • 多重边:允许两个顶点之间有多条边连接。

一个一般图 G G G 由一个非空有限集 V ( G ) V(G) V(G) 以及一个有限集合族 E ( G ) E(G) E(G) 组成。我们称 V ( G ) V(G) V(G) 为 G G G 的顶点集(vertex set), E ( G ) E(G) E(G) 为 G G G 的边集合族(edge family)。

  • V ( G ) V(G) V(G) 中的元素称为顶点 vertices(或节点 nodes)
  • E ( G ) E(G) E(G) 是由 V ( G ) V(G) V(G) 中元素的无序对组成**(注意:不一定是不同元素,也可能相同)**,这些无序对称为边。
    • 使用"集合族(family set)" 这个词是为了说明集合中允许存在多重边。
  • 一条边 { v , w } \{v,w\} {v,w} 被说成连接顶点 v v v 和 w w w,也是简记为 v w vw vw 。
  • 作者使用 "family" 一词描述会出现重复元素的集合。
    • 例如, { a , b , c } \{a,b,c\} {a,b,c} 是集合 set, ( a , a , c , b , a , c ) (a,a,c,b,a,c) (a,a,c,b,a,c) 是集合族 family
同构 Isomorphism

如果图 G 1 G_1 G1 的顶点与图 G 2 G_2 G2 的顶点之间存在一一对应关系 ,使得 G 1 G_1 G1 中任意两个顶点之间连接的边的数量 等于 G 2 G_2 G2 中相应顶点之间连接的边的数量,那么两个图 G 1 G_1 G1 和 G 2 G_2 G2​ 是同构的。

同构图的特点:

  1. 结构保持:同构图保持了图的基本结构,即顶点之间的连接关系。这意味着两个同构图在不考虑顶点标签的情况下,它们的边的连接方式是完全相同的。
  2. 顶点的重新标记:同构图允许我们对顶点进行重新标记,只要这种标记保持了图的结构不变。换句话说,即使两个图的顶点有不同的标签,只要存在一种方式将一个图的顶点映射到另一个图的顶点,使得边的关系得以保持,这两个图就是同构的。
  3. 自反性、对称性和传递性:同构关系具有自反性(一个图与自身同构)、对称性(如果图 G1 与图 G2 同构,则 G2 与 G1 同构)和传递性(如果图 G1 与图 G2 同构,且 G2 与图 G3 同构,则 G1 与 G3 同构)。
连通性 connectedness
  • 如果一个图不能被表示为两个图的并集,则这个图是连通图(connected graph)。

  • 任何非连通图都可以表示为连通图的并集(disconnected graph)。

    • 非连通图中的每个连通图称为连通分量(component)。
相邻性 Adjacency

图 G G G 中顶点 v v v 的 是与 v v v 关联的边的数量,记为 d e g ( v ) deg(v) deg(v)。

  • 通常,约定在 v v v 处的 对 v v v 的度贡献为 2(而不是 1)。
  • 度为 0 的顶点是孤立顶点(isolated vertec) ,度为 1 的顶点是端点(end-vertex)
  • 图的度序列 是按升序排列的度组成的序列,必要时可以重复。

注意,在任何图中,所有顶点度数之和是一个偶数,即边数的两倍。

这个结果主要由莱昂哈德·欧拉在1736年得出,被称为握手引理(handshaking lemma)

握手引理的一个直接推论:在任何图中,度数为奇数的顶点的数量是偶数。


子图 Subgraphs

图 G G G 的子图的每个顶点都属于 V ( G ) V(G) V(G),每条边都属于 E ( G ) E(G) E(G)​。

可以通过删除边和顶点来得到一个图的子图

  • 用 G − e G - e G−e 表示从 G G G 中删除边 e e e 后得到的图。
  • 如果 F F F 是 G G G 中的任意一组边,我们用 G − F G - F G−F 表示从 G G G 中删除 F F F 中的边后得到的图。
  • 类似地,用 G − v G - v G−v 表示从 G G G 中删除顶点 v v v 以及与 v v v 关联的边后得到的图。
  • 如果 S S S 是 G G G 中的任意一组顶点,我们用 G − S G - S G−S 表示从 G G G 中删除 S S S 中的顶点以及与其中任何一个顶点关联的所有边后得到的图。

我们也用 G \ e G \backslash e G\e 表示这样一个图:取一条边 e e e 并对其进行收缩,即移除这条边并将其两个端点 v v v和 w w w合并,使得合并后的顶点与那些原本与 v v v 或 w w w 关联的边相关联。



矩阵表示 Matrix representations

假设图的顶点数量为 n n n,边的数量为 m m m

邻接矩阵 Adjacency Matrix A A A:

  • 如果 G G G 是一个顶点标有 { 1 , 2 , ... , n } \{1,2,\ldots,n\} {1,2,...,n} 的图,那么它的邻接矩阵 A A A 是一个 n × n n×n n×n 的矩阵。 n n n 是顶点数量。
  • 行和列都代表图中的顶点。
  • 其第 ( i , j ) (i,j) (i,j)项是连接顶点 i i i 和顶点 j j j 的边的数量

关联矩阵 Incidence Matrix M M M:

  • 如果边标有 { 1 , 2 , ... , n } \{1,2,\ldots,n\} {1,2,...,n},那么它的关联矩阵 M M M 是一个 n × m n×m n×m 的矩阵。
  • 行代表图中的顶点,列代表图中的边。
  • 若顶点 i i i 与边 j j j 相关联,则其第 ( i , j ) (i,j) (i,j) 项为 1,否则为 0 。

示例 Examples

本节主要介绍一些重要类型的图

零图 Null Graphs

边集为空的图是零图。

  • 用 N n N_n Nn 表示 n n n 个顶点的零图,如图 3.1 表示为 N 4 N_4 N4。
  • 零图的每个顶点都是孤立顶点。
完全图 Complete Graphs

一个简单图 中,如果每一对不同的顶点都是相邻的 ,那么这个图是完全图

  • 用 K n K_n Kn 表示 n n n 个顶点的完全图
  • K n K_n Kn 有 n ( n − 1 ) / 2 n(n - 1)/2 n(n−1)/2 条边
    • (n-1) + (n-2) + (n-3) + ... + 3 + 2 + 1 = n*(n-1)/2 (等差数列求和)
    • 第一个顶点和其他 n - 1 个顶点有 n - 1 条边;第二个顶点除了和刚刚的第一个顶点连接外,还有 n - 2 条边;以此类推...
  • 完全图中每个顶点的度为 n − 1 n-1 n−1
环图、路径图、轮图 Cycle Graphs, path graphs and wheels
  • 度数为2的连通正则图 是一个环图。
    • 用 C n C_n Cn 表示 n n n 个顶点的环图。
    • 正则图是指图中所有顶点的度数都相同。
  • 从环图 C n C_n Cn 中移除一条边 得到的图是 n n n 个顶点的路径图 ,用 P n P_n Pn 表示。
  • 从环图 C n − 1 C_{n - 1} Cn−1中通过将每个顶点都连接到一个新顶点 v v v 得到的图是 n n n 个顶点的轮图 ,用 W n W_n Wn 表示。
正则图 Regular Graphs

每个顶点都有相同度数的图是正则图。

  • 如果每个顶点的度数为 r r r,那么这个图就叫 r r r 度正则图或 r r r 正则的。

  • 特别重要的是三次图(cubic graphs) ,即度数为 3 3 3 的正则图;**彼得森图(Petersen Graph)**就是一个三次图的例子。

  • 注意,零图 N n N_n Nn是 0 度正则图,环图 C n C_n Cn 是 2 度正则图,完全图 K n K_n Kn 是 n − 1 n - 1 n−1 度正则图。

柏拉图图 Platonic Graphs

与柏拉图立体(Platonic solids)相关的图。

柏拉图立体是五种正多面体,包括:正四面体(Tetrahedron)、正六面体(Hexahedron,即立方体)、正八面体(Octahedron)、正十二面体(Dodecahedron)、正二十面体(Icosahedron)。

二部图 Bipartite Graphs

如果一个图 G G G 的顶点集 可以被分成两个不相交的集合 ,使得同一个集合内的任意两个顶点都不相邻 (即没有边直接连接它们),而不同集合中的顶点之间则可以通过边相互连接(可能存在多重边,也允许不相连,这是与完全二部图的区别!)

更正式地说,如果一个图 G = ( V , E ) G = (V, E) G=(V,E) 可以被分为两个顶点集合 V 1 V_1 V1 和 V 2 V_2 V2,使得:

  1. V 1 V_1 V1 和 V 2 V_2 V2 是不相交的,即 V 1 ∩ V 2 = ∅ V_1 \cap V_2 = \emptyset V1∩V2=∅。
  2. V 1 V_1 V1 和 V 2 V_2 V2 的并集是整个顶点集合,即 V 1 ∪ V 2 = V V_1 \cup V_2 = V V1∪V2=V。
  3. 图中的每条边 e ∈ E e \in E e∈E 都连接了一个 V 1 V_1 V1 中的顶点和一个 V 2 V_2 V2 中的顶点。

完全二部图 Complete Bipartite Graphs:

完全二部图指一个图的顶点可以被分成两个不相交的集合,并且其中一个集合中的每个顶点都与另一个集合中的每个顶点通过边相连。

  • 用 K r , s K_{r,s} Kr,s 表示有 r r r 个黑色顶点和 s s s 个白色顶点的完全二部图。(黑色与白色仅表示属于不同集合)

  • K r , s K_{r,s} Kr,s 有 r + s r + s r+s 个顶点和 r ∗ s r*s r∗s 条边。

立方体图 Cubes

k k k 维立方体图 Q k Q_k Qk(也称超立方体图 Hypercube Graph) 是这样一个图:

  • 用长度为 k k k 的二进制序列表示顶点,每个顶点可以有 k k k 个二进制位,每位可以是 0 或 1;
    • Q k Q_k Qk 有 2 k 2^k 2k 个顶点,因为长度为 k k k 的二进制序列共有 2 k 2^k 2k 种表示。
  • 如果两个顶点的二进制表示仅有 一位 不同,则两顶点之间存在一条边。
    • 每个顶点的度数为 k k k,即 k k k 维立方体图是 k k k 度正则图,因为每个顶点都存在 k 个仅一位不同的顶点相连。
    • Q k Q_k Qk 有 k ∗ 2 k − 1 k*2^{k - 1} k∗2k−1 条边
      • 共有 2 k 2^k 2k 个顶点,每个顶点连接 k k k 条边, k ∗ 2 k k*2^k k∗2k 计算出所有顶点的度数,总度数 = 边数 * 2,故边数 = k ∗ 2 k / 2 k*2^k/2 k∗2k/2
简单图的补图 complement of a simple graph

如果 G G G 是一个具有顶点集 V ( G ) V(G) V(G) 的简单图,那么它的补图 G ‾ \overline{G} G 是具有相同顶点集 V ( G ) V(G) V(G) 的简单图,在补图中两个顶点相邻当且仅当它们在 G G G 中不相邻。

  • 完全图的补图是零图
    • 因为完全图中所有顶点都相互相邻,那么其补图中所有顶点都不相邻,符合零图的定义
  • 完全二部图的补图是两个完全图的并集
    • 由于完全二部图中不同部分顶点间的相邻关系在补图中发生反转,从而形成两个分别内部顶点全相邻的部分,即两个完全图的并集。

三个谜题 Three Puzzles

在本节介绍三个娱乐性谜题,这些谜题可以使用与图相关的概念来解决。在每个谜题中,注意使用图是如何使问题更容易理解的。

八个圆圈问题 The eight circles problem

问题:将字母 A、B、C、D、E、F、G、H 放入图 4.1 的八个圆圈中,使得没有一个字母与在字母表中紧挨着它的字母相邻。

六人聚会 Six people at a party

证明:在任何六个人的聚会上,要么有三个人彼此都认识,要么有三个人互相不认识。

在图中,用顶点表示每个人,实线边表示两个人互相认识,虚线边表示不认识证明:总是存在一个实线三角形或者一个虚线三角形

  • 实线三角形:有三个人彼此都认识
  • 虚线三角形:有三个人互相不认识

设 v v v 是任意一个顶点 ,必然有 5 条边和该顶点关联,这 5 条边可能是实线或虚线,根据 "抽屉" 原理,至少有 3 条边属于同一种类型

于是假设顶点 v v v 有 3 条实线边 ,2 条虚线边,即假设顶点 v v v 和顶点 w 、 y 、 z w、y、z w、y、z 认识,那么 w 、 x 、 y w、x、y w、x、y 三者的关系有两种可能:

① w 、 x 、 y w、x、y w、x、y 两两互相不认识 ,即三者之间都是虚线边,存在虚线三角形

② w 、 x 、 y w、x、y w、x、y 中至少有一对互相认识 ,即要么有 w 、 x w、x w、x 认识,要么有 w 、 y w、y w、y 认识,要么有 x 、 y x、y x、y​ 认识,只要有一对认识,必存在实线三角形。

综上两种情况,可以得证:总是存在一个实线三角形或虚线三角形。

四色立方体问题 The four cubes problem

**问题:**给定四个立方体,每个立方体的每个面涂上红(R)、蓝(B)、绿(G)、黄(Y)四种颜色之一,将四个立方体堆叠成一个4x1的柱体,如何堆才能使从该柱体的任意一个侧面观察,都能看到红、蓝、绿、黄四种颜色?

我们需要用图来记录每个立方体的颜色相对关系:

  • 一个立方体表示成一个图 ,图中存在四个顶点 R 、 B 、 G 、 Y R、B、G、Y R、B、G、Y 分别表示红色、蓝色、绿色、黄色;当两个颜色所在的面相对时,这两个颜色顶点被认为是相邻的,即这两个顶点之间存在一条边。如图 4.8 所示。

  • 把这四个图合并成一个新的图 G G G,如图 4.9 所示。即合并顶点,边取并集;合并后的图每条边的序号代表不同的立方体。

  • 通过找到图 G G G 的两个子图 H 1 H_1 H1 和 H 2 H_2 H2 可得到该谜题的一个解。子图 H 1 H_1 H1 告诉我们每个立方体的前面和后面 出现的是哪一对颜色 ,子图 H 2 H_2 H2 告诉我们每个立方体的左面和右面 出现的是哪一对颜色 。为此,子图 H 1 H_1 H1 和 H 2 H_2 H2 具有以下属性:

    • 每个子图恰好包含来自每个立方体的一条边

      • 这确保了每个立方体都能确定其前、后面的颜色对和左、右面的颜色对,即保证没有遗漏掉正方体。
      • 如果某个立方体在子图中没有边,那就无法确定该立方体的颜色情况。
    • 这些子图没有共同的边

      • 确保同一个颜色对不能同时出现在 "前后" 面和 "左右" 面上。
      • 因为假如有一个立方体 c u b e 1 cube_1 cube1 前后面" 红-蓝 " 配对 ,意味着其他立方体中至少有一个立方体 c u b e 2 cube_2 cube2 的前后面" 黄-绿 " 配对 才能在前后面中保证出现不同的颜色,那么该立方体 c u b e 2 cube_2 cube2 的左右面 一定是 " 红-蓝 " 配对 ,如果此时 c u b e 1 cube_1 cube1 在左右面上 重复出现了 " 红-蓝 " 配对 ,那么很可能会导致左右面上出现重复的 "红、蓝" 颜色
    • 每个子图都是 2 度正则图

      • 保证每种颜色在前后面和左右面各分别出现一次,即保证每一个侧面都要有四种颜色。
  • 通过这两个子图即可知道每个立方体的前、后、左、右面该如何摆放;如果找不到满足上述性质的子图,说明无解。

相关推荐
TENET信条17 小时前
代码随想录 day50 第十一章 图论part01
图论
闻缺陷则喜何志丹18 小时前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
TENET信条18 小时前
代码随想录 day52 第十一章 图论part03
图论
南宫生1 天前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
single5942 天前
【c++笔试强训】(第四十一篇)
java·c++·算法·深度优先·图论·牛客
_nut_2 天前
图论基础算法/DFS+BFS+Trie树
算法·深度优先·图论
南宫生2 天前
力扣-图论-70【算法学习day.70】
java·学习·算法·leetcode·图论
2401_834481992 天前
Day50 图论part01
图论
南宫生3 天前
力扣-图论-19【算法学习day.69】
java·学习·算法·leetcode·图论
南宫生3 天前
力扣-图论-15【算法学习day.65】
java·学习·算法·leetcode·图论