019 《组合数学:原理、方法与应用 (Combinatorics: Principles, Methods, and Applications)》
🌟🌟🌟本文案由Gemini 2.0 Flash Thinking Experimental 01-21创作,用来辅助学习知识。🌟🌟🌟
书籍大纲
▮▮▮▮ 1. chapter 1: 预备知识 (Preliminaries)
▮▮▮▮▮▮▮ 1.1 集合论基础 (Basic Set Theory)
▮▮▮▮▮▮▮▮▮▮▮ 1.1.1 集合与元素 (Sets and Elements)
▮▮▮▮▮▮▮▮▮▮▮ 1.1.2 集合运算 (Set Operations)
▮▮▮▮▮▮▮▮▮▮▮ 1.1.3 容斥原理初步 (Inclusion-Exclusion Principle - Preliminary)
▮▮▮▮▮▮▮ 1.2 函数与映射 (Functions and Mappings)
▮▮▮▮▮▮▮▮▮▮▮ 1.2.1 函数的定义与性质 (Definition and Properties of Functions)
▮▮▮▮▮▮▮▮▮▮▮ 1.2.2 单射、满射与双射 (Injective, Surjective, and Bijective Functions)
▮▮▮▮▮▮▮ 1.3 数学归纳法 (Mathematical Induction)
▮▮▮▮▮▮▮▮▮▮▮ 1.3.1 第一数学归纳法 (First Principle of Mathematical Induction)
▮▮▮▮▮▮▮▮▮▮▮ 1.3.2 第二数学归纳法 (Second Principle of Mathematical Induction)
▮▮▮▮▮▮▮ 1.4 基本计数原理 (Basic Counting Principles)
▮▮▮▮▮▮▮▮▮▮▮ 1.4.1 加法原理 (Rule of Sum)
▮▮▮▮▮▮▮▮▮▮▮ 1.4.2 乘法原理 (Rule of Product)
▮▮▮▮▮▮▮ 1.5 排列与组合 (Permutations and Combinations)
▮▮▮▮▮▮▮▮▮▮▮ 1.5.1 排列 (Permutations)
▮▮▮▮▮▮▮▮▮▮▮ 1.5.2 组合 (Combinations)
▮▮▮▮▮▮▮▮▮▮▮ 1.5.3 多重集的排列与组合 (Permutations and Combinations of Multisets)
▮▮▮▮▮▮▮ 1.6 二项式定理 (Binomial Theorem)
▮▮▮▮▮▮▮▮▮▮▮ 1.6.1 二项式系数 (Binomial Coefficients)
▮▮▮▮▮▮▮▮▮▮▮ 1.6.2 二项式定理及其应用 (Binomial Theorem and its Applications)
▮▮▮▮▮▮▮ 1.7 多项式定理 (Multinomial Theorem)
▮▮▮▮▮▮▮▮▮▮▮ 1.7.1 多项式系数 (Multinomial Coefficients)
▮▮▮▮▮▮▮▮▮▮▮ 1.7.2 多项式定理及其应用 (Multinomial Theorem and its Applications)
▮▮▮▮ 2. chapter 2: 生成函数 (Generating Functions)
▮▮▮▮▮▮▮ 2.1 序列与生成函数 (Sequences and Generating Functions)
▮▮▮▮▮▮▮▮▮▮▮ 2.1.1 普通生成函数 (Ordinary Generating Functions - OGF)
▮▮▮▮▮▮▮▮▮▮▮ 2.1.2 指数生成函数 (Exponential Generating Functions - EGF)
▮▮▮▮▮▮▮ 2.2 生成函数的性质与运算 (Properties and Operations of Generating Functions)
▮▮▮▮▮▮▮▮▮▮▮ 2.2.1 生成函数的加法与乘法 (Addition and Multiplication of Generating Functions)
▮▮▮▮▮▮▮▮▮▮▮ 2.2.2 生成函数的微分与积分 (Differentiation and Integration of Generating Functions)
▮▮▮▮▮▮▮ 2.3 利用生成函数解决计数问题 (Using Generating Functions to Solve Counting Problems)
▮▮▮▮▮▮▮▮▮▮▮ 2.3.1 组合问题的生成函数解法 (Generating Function Approach to Combinatorial Problems)
▮▮▮▮▮▮▮▮▮▮▮ 2.3.2 整数拆分问题 (Integer Partition Problems)
▮▮▮▮▮▮▮ 2.4 递推关系与生成函数 (Recurrence Relations and Generating Functions)
▮▮▮▮▮▮▮▮▮▮▮ 2.4.1 线性递推关系 (Linear Recurrence Relations)
▮▮▮▮▮▮▮▮▮▮▮ 2.4.2 常系数线性递推关系 (Linear Recurrence Relations with Constant Coefficients)
▮▮▮▮▮▮▮ 2.5 特殊计数序列的生成函数 (Generating Functions of Special Counting Sequences)
▮▮▮▮▮▮▮▮▮▮▮ 2.5.1 斐波那契数列 (Fibonacci Sequence)
▮▮▮▮▮▮▮▮▮▮▮ 2.5.2 卡特兰数 (Catalan Numbers)
▮▮▮▮ 3. chapter 3: 容斥原理与反演 (Inclusion-Exclusion Principle and Inversion)
▮▮▮▮▮▮▮ 3.1 容斥原理 (Inclusion-Exclusion Principle)
▮▮▮▮▮▮▮▮▮▮▮ 3.1.1 容斥原理的公式及其证明 (Formula and Proof of Inclusion-Exclusion Principle)
▮▮▮▮▮▮▮▮▮▮▮ 3.1.2 容斥原理的应用 (Applications of Inclusion-Exclusion Principle)
▮▮▮▮▮▮▮▮▮▮▮ 3.1.3 错位排列问题 (Derangement Problems)
▮▮▮▮▮▮▮ 3.2 莫比乌斯反演 (Möbius Inversion)
▮▮▮▮▮▮▮▮▮▮▮ 3.2.1 偏序集与关联代数 (Partially Ordered Sets and Incidence Algebra)
▮▮▮▮▮▮▮▮▮▮▮ 3.2.2 莫比乌斯函数 (Möbius Function)
▮▮▮▮▮▮▮▮▮▮▮ 3.2.3 莫比乌斯反演公式及其应用 (Möbius Inversion Formula and its Applications)
▮▮▮▮▮▮▮ 3.3 多项式反演 (Polynomial Inversion)
▮▮▮▮▮▮▮▮▮▮▮ 3.3.1 拉格朗日反演公式 (Lagrange Inversion Formula)
▮▮▮▮▮▮▮▮▮▮▮ 3.3.2 应用于组合计数 (Applications in Combinatorial Counting)
▮▮▮▮ 4. chapter 4: 图论基础 (Graph Theory Fundamentals)
▮▮▮▮▮▮▮ 4.1 图的基本概念 (Basic Concepts of Graphs)
▮▮▮▮▮▮▮▮▮▮▮ 4.1.1 图的定义与表示 (Definition and Representation of Graphs)
▮▮▮▮▮▮▮▮▮▮▮ 4.1.2 顶点的度 (Degree of Vertices)
▮▮▮▮▮▮▮▮▮▮▮ 4.1.3 子图与图的同构 (Subgraphs and Graph Isomorphism)
▮▮▮▮▮▮▮ 4.2 特殊类型的图 (Special Types of Graphs)
▮▮▮▮▮▮▮▮▮▮▮ 4.2.1 完全图、二分图、正则图 (Complete Graphs, Bipartite Graphs, Regular Graphs)
▮▮▮▮▮▮▮▮▮▮▮ 4.2.2 路径与圈 (Paths and Cycles)
▮▮▮▮▮▮▮ 4.3 图的连通性 (Graph Connectivity)
▮▮▮▮▮▮▮▮▮▮▮ 4.3.1 连通图与连通分量 (Connected Graphs and Connected Components)
▮▮▮▮▮▮▮▮▮▮▮ 4.3.2 割点与桥 (Cut Vertices and Bridges)
▮▮▮▮▮▮▮ 4.4 树 (Trees)
▮▮▮▮▮▮▮▮▮▮▮ 4.4.1 树的定义与性质 (Definition and Properties of Trees)
▮▮▮▮▮▮▮▮▮▮▮ 4.4.2 生成树 (Spanning Trees)
▮▮▮▮▮▮▮ 4.5 平面图与图的嵌入 (Planar Graphs and Graph Embedding)
▮▮▮▮▮▮▮▮▮▮▮ 4.5.1 平面图的定义与欧拉公式 (Definition of Planar Graphs and Euler's Formula)
▮▮▮▮▮▮▮▮▮▮▮ 4.5.2 图的嵌入与交叉数 (Graph Embedding and Crossing Number)
▮▮▮▮ 5. chapter 5: 图的匹配与覆盖 (Graph Matching and Covering)
▮▮▮▮▮▮▮ 5.1 匹配 (Matching)
▮▮▮▮▮▮▮▮▮▮▮ 5.1.1 二分图的匹配 (Matching in Bipartite Graphs)
▮▮▮▮▮▮▮▮▮▮▮ 5.1.2 霍尔定理 (Hall's Marriage Theorem)
▮▮▮▮▮▮▮▮▮▮▮ 5.1.3 最大匹配算法 (Maximum Matching Algorithms)
▮▮▮▮▮▮▮ 5.2 覆盖 (Covering)
▮▮▮▮▮▮▮▮▮▮▮ 5.2.1 顶点覆盖与边覆盖 (Vertex Cover and Edge Cover)
▮▮▮▮▮▮▮▮▮▮▮ 5.2.2 最小覆盖与最大匹配的关系 (Relationship between Minimum Cover and Maximum Matching)
▮▮▮▮▮▮▮ 5.3 独立集 (Independent Set)
▮▮▮▮▮▮▮▮▮▮▮ 5.3.1 最大独立集 (Maximum Independent Set)
▮▮▮▮▮▮▮▮▮▮▮ 5.3.2 独立集与覆盖的关系 (Relationship between Independent Set and Cover)
▮▮▮▮ 6. chapter 6: 图的着色 (Graph Coloring)
▮▮▮▮▮▮▮ 6.1 顶点着色 (Vertex Coloring)
▮▮▮▮▮▮▮▮▮▮▮ 6.1.1 图的色数 (Chromatic Number of a Graph)
▮▮▮▮▮▮▮▮▮▮▮ 6.1.2 四色定理 (Four Color Theorem)
▮▮▮▮▮▮▮ 6.2 边着色 (Edge Coloring)
▮▮▮▮▮▮▮▮▮▮▮ 6.2.1 图的边色数 (Edge Chromatic Number of a Graph)
▮▮▮▮▮▮▮▮▮▮▮ 6.2.2 维辛定理 (Vizing's Theorem)
▮▮▮▮▮▮▮ 6.3 色多项式 (Chromatic Polynomial)
▮▮▮▮▮▮▮▮▮▮▮ 6.3.1 色多项式的定义与性质 (Definition and Properties of Chromatic Polynomial)
▮▮▮▮▮▮▮▮▮▮▮ 6.3.2 色多项式的计算 (Calculation of Chromatic Polynomial)
▮▮▮▮ 7. chapter 7: 区组设计 (Block Designs)
▮▮▮▮▮▮▮ 7.1 平衡不完全区组设计 (Balanced Incomplete Block Designs - BIBD)
▮▮▮▮▮▮▮▮▮▮▮ 7.1.1 BIBD 的定义与参数 (Definition and Parameters of BIBD)
▮▮▮▮▮▮▮▮▮▮▮ 7.1.2 BIBD 的构造方法 (Construction Methods of BIBD)
▮▮▮▮▮▮▮ 7.2 对称区组设计 (Symmetric Block Designs)
▮▮▮▮▮▮▮▮▮▮▮ 7.2.1 对称 BIBD 的性质 (Properties of Symmetric BIBD)
▮▮▮▮▮▮▮▮▮▮▮ 7.2.2 费舍尔不等式 (Fisher's Inequality)
▮▮▮▮▮▮▮ 7.3 循环区组设计 (Cyclic Block Designs)
▮▮▮▮▮▮▮▮▮▮▮ 7.3.1 循环 BIBD 的构造 (Construction of Cyclic BIBD)
▮▮▮▮▮▮▮▮▮▮▮ 7.3.2 应用实例 (Application Examples)
▮▮▮▮ 8. chapter 8: 拉丁方与正交拉丁方 (Latin Squares and Orthogonal Latin Squares)
▮▮▮▮▮▮▮ 8.1 拉丁方的定义与性质 (Definition and Properties of Latin Squares)
▮▮▮▮▮▮▮▮▮▮▮ 8.1.1 标准型拉丁方 (Standard Latin Squares)
▮▮▮▮▮▮▮▮▮▮▮ 8.1.2 拉丁方的计数 (Counting Latin Squares)
▮▮▮▮▮▮▮ 8.2 正交拉丁方 (Orthogonal Latin Squares - OLS)
▮▮▮▮▮▮▮▮▮▮▮ 8.2.1 OLS 的定义与存在性 (Definition and Existence of OLS)
▮▮▮▮▮▮▮▮▮▮▮ 8.2.2 欧拉猜想与麦克尼什-曼恩定理 (Euler's Conjecture and MacNeish-Mann Theorem)
▮▮▮▮▮▮▮ 8.3 应用于实验设计 (Applications in Experimental Design)
▮▮▮▮▮▮▮▮▮▮▮ 8.3.1 因子设计 (Factorial Designs)
▮▮▮▮▮▮▮▮▮▮▮ 8.3.2 农业实验设计 (Agricultural Experimental Design)
▮▮▮▮ 9. chapter 9: 有限几何 (Finite Geometry)
▮▮▮▮▮▮▮ 9.1 仿射平面 (Affine Planes)
▮▮▮▮▮▮▮▮▮▮▮ 9.1.1 仿射平面的公理系统 (Axiomatic System of Affine Planes)
▮▮▮▮▮▮▮▮▮▮▮ 9.1.2 仿射平面的构造 (Construction of Affine Planes)
▮▮▮▮▮▮▮ 9.2 射影平面 (Projective Planes)
▮▮▮▮▮▮▮▮▮▮▮ 9.2.1 射影平面的公理系统 (Axiomatic System of Projective Planes)
▮▮▮▮▮▮▮▮▮▮▮ 9.2.2 射影平面的构造 (Construction of Projective Planes)
▮▮▮▮▮▮▮ 9.3 有限域与有限几何 (Finite Fields and Finite Geometry)
▮▮▮▮▮▮▮▮▮▮▮ 9.3.1 有限域的基本概念 (Basic Concepts of Finite Fields)
▮▮▮▮▮▮▮▮▮▮▮ 9.3.2 利用有限域构造有限几何 (Constructing Finite Geometry using Finite Fields)
▮▮▮▮ 10. chapter 10: Ramsey 理论初步 (Introduction to Ramsey Theory)
▮▮▮▮▮▮▮ 10.1 Ramsey 数 (Ramsey Numbers)
▮▮▮▮▮▮▮▮▮▮▮ 10.1.1 Ramsey 定理 (Ramsey's Theorem)
▮▮▮▮▮▮▮▮▮▮▮ 10.1.2 Ramsey 数的界限 (Bounds on Ramsey Numbers)
▮▮▮▮▮▮▮ 10.2 图 Ramsey 数 (Graph Ramsey Numbers)
▮▮▮▮▮▮▮▮▮▮▮ 10.2.1 图 Ramsey 数的性质 (Properties of Graph Ramsey Numbers)
▮▮▮▮▮▮▮▮▮▮▮ 10.2.2 小 Ramsey 数的确定 (Determination of Small Ramsey Numbers)
▮▮▮▮▮▮▮ 10.3 无穷 Ramsey 理论 (Infinite Ramsey Theory)
▮▮▮▮▮▮▮▮▮▮▮ 10.3.1 无穷 Ramsey 定理 (Infinite Ramsey Theorem)
▮▮▮▮▮▮▮▮▮▮▮ 10.3.2 应用与拓展 (Applications and Extensions)
▮▮▮▮ 11. chapter 11: 概率方法 (Probabilistic Method)
▮▮▮▮▮▮▮ 11.1 概率方法的基本思想 (Basic Ideas of Probabilistic Method)
▮▮▮▮▮▮▮▮▮▮▮ 11.1.1 存在性证明 (Existence Proofs)
▮▮▮▮▮▮▮▮▮▮▮ 11.1.2 期望值方法 (Method of Expectation)
▮▮▮▮▮▮▮ 11.2 图论中的概率方法 (Probabilistic Method in Graph Theory)
▮▮▮▮▮▮▮▮▮▮▮ 11.2.1 Ramsey 数的下界估计 (Lower Bound Estimation of Ramsey Numbers)
▮▮▮▮▮▮▮▮▮▮▮ 11.2.2 随机图 (Random Graphs)
▮▮▮▮▮▮▮ 11.3 Lovász 局部引理 (Lovász Local Lemma)
▮▮▮▮▮▮▮▮▮▮▮ 11.3.1 局部引理及其应用 (Local Lemma and its Applications)
▮▮▮▮▮▮▮▮▮▮▮ 11.3.2 避免坏事件 (Avoiding Bad Events)
▮▮▮▮ 12. chapter 12: 代数组合初步 (Introduction to Algebraic Combinatorics)
▮▮▮▮▮▮▮ 12.1 群与计数 (Groups and Counting)
▮▮▮▮▮▮▮▮▮▮▮ 12.1.1 群的基本概念 (Basic Concepts of Groups)
▮▮▮▮▮▮▮▮▮▮▮ 12.1.2 伯恩赛德引理 (Burnside's Lemma)
▮▮▮▮▮▮▮▮▮▮▮ 12.1.3 波利亚计数定理 (Pólya Enumeration Theorem)
▮▮▮▮▮▮▮ 12.2 关联代数与组合恒等式 (Incidence Algebra and Combinatorial Identities)
▮▮▮▮▮▮▮▮▮▮▮ 12.2.1 关联代数的应用 (Applications of Incidence Algebra)
▮▮▮▮▮▮▮▮▮▮▮ 12.2.2 组合恒等式的代数证明 (Algebraic Proofs of Combinatorial Identities)
▮▮▮▮ 13. chapter 13: 组合优化初步 (Introduction to Combinatorial Optimization)
▮▮▮▮▮▮▮ 13.1 网络流 (Network Flow)
▮▮▮▮▮▮▮▮▮▮▮ 13.1.1 最大流最小割定理 (Max-flow Min-cut Theorem)
▮▮▮▮▮▮▮▮▮▮▮ 13.1.2 最大流算法 (Maximum Flow Algorithms)
▮▮▮▮▮▮▮ 13.2 匹配问题再探 (Matching Problems Revisited)
▮▮▮▮▮▮▮▮▮▮▮ 13.2.1 最大权匹配 (Maximum Weight Matching)
▮▮▮▮▮▮▮▮▮▮▮ 13.2.2 应用于实际问题 (Applications to Real-world Problems)
▮▮▮▮ 14. chapter 14: 高级计数技巧 (Advanced Counting Techniques)
▮▮▮▮▮▮▮ 14.1 符号方法 (Symbolic Method)
▮▮▮▮▮▮▮▮▮▮▮ 14.1.1 组合类的概念 (Concept of Combinatorial Classes)
▮▮▮▮▮▮▮▮▮▮▮ 14.1.2 符号方法的应用 (Applications of Symbolic Method)
▮▮▮▮▮▮▮ 14.2 解析组合学 (Analytic Combinatorics)
▮▮▮▮▮▮▮▮▮▮▮ 14.2.1 奇点分析 (Singularity Analysis)
▮▮▮▮▮▮▮▮▮▮▮ 14.2.2 渐近计数 (Asymptotic Counting)
▮▮▮▮ 15. chapter 15: 组合数学的应用 (Applications of Combinatorics)
▮▮▮▮▮▮▮ 15.1 计算机科学中的应用 (Applications in Computer Science)
▮▮▮▮▮▮▮▮▮▮▮ 15.1.1 算法设计与分析 (Algorithm Design and Analysis)
▮▮▮▮▮▮▮▮▮▮▮ 15.1.2 数据结构 (Data Structures)
▮▮▮▮▮▮▮ 15.2 信息论与编码理论中的应用 (Applications in Information Theory and Coding Theory)
▮▮▮▮▮▮▮▮▮▮▮ 15.2.1 纠错码 (Error-Correcting Codes)
▮▮▮▮▮▮▮▮▮▮▮ 15.2.2 数据压缩 (Data Compression)
▮▮▮▮▮▮▮ 15.3 运筹学与管理科学中的应用 (Applications in Operations Research and Management Science)
▮▮▮▮▮▮▮▮▮▮▮ 15.3.1 调度问题 (Scheduling Problems)
▮▮▮▮▮▮▮▮▮▮▮ 15.3.2 资源分配 (Resource Allocation)
1. chapter 1: 预备知识 (Preliminaries)
1.1 集合论基础 (Basic Set Theory)
1.1.1 集合与元素 (Sets and Elements)
集合论 (Set Theory) 是现代数学的基础语言,它提供了一种描述和组织数学对象的通用框架。在组合数学 (Combinatorics) 中,集合的概念尤其重要,因为我们经常需要处理各种元素的集合,并计算它们的数量、排列方式或组合形式。
集合 (Set) 的定义:
集合是由一些互不相同的对象汇集而成的整体。构成集合的对象称为元素 (Element) 或成员 (Member)。
⚝ 集合的表示方法:
▮▮▮▮⚝ 列举法:将集合的所有元素一一列举出来,并用花括号 {}
括起来。例如,自然数集合 \( \mathbb{N} \) 的前几个元素可以表示为 {0, 1, 2, 3, ...}
。
▮▮▮▮⚝ 描述法:用谓词概括集合中元素的共同性质。形式为 {x | P(x)}
,表示由所有满足性质 \( P(x) \) 的元素 \( x \) 组成的集合。例如,所有正偶数的集合可以表示为 {x | x 是正整数且 x 能被 2 整除}
。
⚝ 常用数集:
▮▮▮▮⚝ 自然数集 (Natural Numbers):\( \mathbb{N} = \{0, 1, 2, 3, ...\} \) (包含 0)
▮▮▮▮⚝ 整数集 (Integers):\( \mathbb{Z} = \{..., -2, -1, 0, 1, 2, ...\} \)
▮▮▮▮⚝ 有理数集 (Rational Numbers):\( \mathbb{Q} = \{\frac{p}{q} | p, q \in \mathbb{Z}, q \neq 0\} \)
▮▮▮▮⚝ 实数集 (Real Numbers):\( \mathbb{R} \) (包含所有有理数和无理数)
▮▮▮▮⚝ 复数集 (Complex Numbers):\( \mathbb{C} = \{a + bi | a, b \in \mathbb{R}, i = \sqrt{-1}\} \)
⚝ 元素与集合的关系:
如果 \( x \) 是集合 \( A \) 的元素,记作 \( x \in A \) (读作 “\( x \) 属于 \( A \)”)。
如果 \( x \) 不是集合 \( A \) 的元素,记作 \( x \notin A \) (读作 “\( x \) 不属于 \( A \)”)。
⚝ 集合与集合的关系:
▮▮▮▮⚝ 子集 (Subset):如果集合 \( A \) 的所有元素都是集合 \( B \) 的元素,则称 \( A \) 是 \( B \) 的子集,记作 \( A \subseteq B \) (或 \( B \supseteq A \))。
▮▮▮▮⚝ 真子集 (Proper Subset):如果 \( A \subseteq B \) 且 \( A \neq B \),则称 \( A \) 是 \( B \) 的真子集,记作 \( A \subsetneq B \) (或 \( B \supsetneq A \))。
▮▮▮▮⚝ 集合相等 (Set Equality):如果 \( A \subseteq B \) 且 \( B \subseteq A \),则称集合 \( A \) 与集合 \( B \) 相等,记作 \( A = B \)。
▮▮▮▮⚝ 空集 (Empty Set):不包含任何元素的集合称为空集,记作 \( \emptyset \) 或 {}
。空集是任何集合的子集,即对于任意集合 \( A \),都有 \( \emptyset \subseteq A \)。
示例:
设集合 \( A = \{1, 2, 3\} \),集合 \( B = \{2, 3, 4, 5\} \)。
⚝ \( 2 \in A \),\( 4 \notin A \)。
⚝ \( \{2, 3\} \subseteq A \),\( \{2, 3\} \subseteq B \)。
⚝ \( \{1, 2, 3\} \subseteq A \),\( A = \{1, 2, 3\} \)。
⚝ \( \{1\} \subsetneq A \),\( \{1\} \neq A \)。
⚝ \( A \neq B \)。
⚝ \( \emptyset \subseteq A \),\( \emptyset \subseteq B \)。
1.1.2 集合运算 (Set Operations)
集合之间可以进行各种运算,产生新的集合。常用的集合运算包括并集 (Union)、交集 (Intersection)、差集 (Difference)、补集 (Complement) 和对称差集 (Symmetric Difference)。
⚝ 并集 (Union):
两个集合 \( A \) 和 \( B \) 的并集,记作 \( A \cup B \),是由所有属于 \( A \) 或属于 \( B \) 的元素组成的集合。
\[ A \cup B = \{x | x \in A \text{ 或 } x \in B\} \]
示例:若 \( A = \{1, 2, 3\} \),\( B = \{3, 4, 5\} \),则 \( A \cup B = \{1, 2, 3, 4, 5\} \)。
⚝ 交集 (Intersection):
两个集合 \( A \) 和 \( B \) 的交集,记作 \( A \cap B \),是由所有既属于 \( A \) 又属于 \( B \) 的元素组成的集合。
\[ A \cap B = \{x | x \in A \text{ 且 } x \in B\} \]
示例:若 \( A = \{1, 2, 3\} \),\( B = \{3, 4, 5\} \),则 \( A \cap B = \{3\} \)。
⚝ 差集 (Difference):
集合 \( A \) 与集合 \( B \) 的差集,记作 \( A \setminus B \) 或 \( A - B \),是由所有属于 \( A \) 但不属于 \( B \) 的元素组成的集合。
\[ A \setminus B = \{x | x \in A \text{ 且 } x \notin B\} \]
示例:若 \( A = \{1, 2, 3\} \),\( B = \{3, 4, 5\} \),则 \( A \setminus B = \{1, 2\} \),\( B \setminus A = \{4, 5\} \)。
⚝ 补集 (Complement):
在给定的全集 (Universal Set) \( U \) 下,集合 \( A \) 的补集,记作 \( A^c \) 或 \( \overline{A} \) 或 \( U \setminus A \),是由所有属于全集 \( U \) 但不属于 \( A \) 的元素组成的集合。
\[ A^c = \{x | x \in U \text{ 且 } x \notin A\} = U \setminus A \]
示例:设全集 \( U = \{1, 2, 3, 4, 5\} \),\( A = \{1, 2, 3\} \),则 \( A^c = \{4, 5\} \)。
⚝ 对称差集 (Symmetric Difference):
两个集合 \( A \) 和 \( B \) 的对称差集,记作 \( A \triangle B \),是由所有属于 \( A \cup B \) 但不属于 \( A \cap B \) 的元素组成的集合。
\[ A \triangle B = (A \cup B) \setminus (A \cap B) = (A \setminus B) \cup (B \setminus A) \]
示例:若 \( A = \{1, 2, 3\} \),\( B = \{3, 4, 5\} \),则 \( A \triangle B = \{1, 2, 4, 5\} \)。
⚝ 集合运算的性质:
设 \( A, B, C \) 是集合,\( U \) 是全集。
① 交换律 (Commutative Laws):
\( A \cup B = B \cup A \)
\( A \cap B = B \cap A \)
② 结合律 (Associative Laws):
\( (A \cup B) \cup C = A \cup (B \cup C) \)
\( (A \cap B) \cap C = A \cap (B \cap C) \)
③ 分配律 (Distributive Laws):
\( A \cup (B \cap C) = (A \cup B) \cap (A \cup C) \)
\( A \cap (B \cup C) = (A \cap B) \cup (A \cap C) \)
④ 同一律 (Identity Laws):
\( A \cup \emptyset = A \)
\( A \cap U = A \)
⑤ 零律 (Domination Laws):
\( A \cup U = U \)
\( A \cap \emptyset = \emptyset \)
⑥ 幂等律 (Idempotent Laws):
\( A \cup A = A \)
\( A \cap A = A \)
⑦ 补余律 (Complement Laws):
\( A \cup A^c = U \)
\( A \cap A^c = \emptyset \)
\( (A^c)^c = A \)
\( U^c = \emptyset \),\( \emptyset^c = U \)
⑧ 德摩根律 (De Morgan's Laws):
\( (A \cup B)^c = A^c \cap B^c \)
\( (A \cap B)^c = A^c \cup B^c \)
1.1.3 容斥原理初步 (Inclusion-Exclusion Principle - Preliminary)
容斥原理 (Inclusion-Exclusion Principle) 是一种重要的计数技巧,用于计算若干个集合并集的大小。在组合数学中有着广泛的应用。这里我们先介绍两个集合和三个集合的容斥原理。
⚝ 两个集合的容斥原理:
对于两个有限集合 \( A \) 和 \( B \),它们的并集 \( A \cup B \) 的元素个数等于 \( A \) 的元素个数加上 \( B \) 的元素个数,再减去它们的交集 \( A \cap B \) 的元素个数。
\[ |A \cup B| = |A| + |B| - |A \cap B| \]
直观理解:当计算 \( |A| + |B| \) 时,\( A \cap B \) 中的元素被重复计数了一次,因此需要减去 \( |A \cap B| \) 以修正重复计数。
示例:
假设一个班级有 30 名学生,其中 20 人喜欢数学,15 人喜欢语文,同时喜欢数学和语文的有 10 人。问:
① 喜欢数学或语文的学生有多少人?
② 只喜欢数学的学生有多少人?
③ 只喜欢语文的学生有多少人?
④ 数学和语文都不喜欢的学生有多少人?
解:
设 \( M \) 为喜欢数学的学生集合,\( C \) 为喜欢语文的学生集合。已知 \( |M| = 20 \),\( |C| = 15 \),\( |M \cap C| = 10 \)。班级总人数 \( |U| = 30 \)。
① 喜欢数学或语文的学生人数:
\( |M \cup C| = |M| + |C| - |M \cap C| = 20 + 15 - 10 = 25 \) 人。
② 只喜欢数学的学生人数:
\( |M \setminus C| = |M| - |M \cap C| = 20 - 10 = 10 \) 人。
③ 只喜欢语文的学生人数:
\( |C \setminus M| = |C| - |M \cap C| = 15 - 10 = 5 \) 人。
④ 数学和语文都不喜欢的学生人数:
\( |U \setminus (M \cup C)| = |U| - |M \cup C| = 30 - 25 = 5 \) 人。
⚝ 三个集合的容斥原理:
对于三个有限集合 \( A, B, C \),它们的并集 \( A \cup B \cup C \) 的元素个数为:
\[ |A \cup B \cup C| = |A| + |B| + |C| - |A \cap B| - |A \cap C| - |B \cap C| + |A \cap B \cap C| \]
直观理解:先加所有单个集合的大小,再减去所有两两交集的大小,最后加上所有三个集合交集的大小。
示例:
某班级有 50 名学生,调查他们喜欢三种球类运动的情况:足球、篮球、排球。
⚝ 喜欢足球的有 30 人,喜欢篮球的有 25 人,喜欢排球的有 20 人。
⚝ 同时喜欢足球和篮球的有 15 人,同时喜欢足球和排球的有 12 人,同时喜欢篮球和排球的有 10 人。
⚝ 同时喜欢足球、篮球和排球的有 8 人。
问:至少喜欢一种球类运动的学生有多少人?
解:
设 \( F \) 为喜欢足球的学生集合,\( B \) 为喜欢篮球的学生集合,\( V \) 为喜欢排球的学生集合。
已知:\( |F| = 30 \),\( |B| = 25 \),\( |V| = 20 \),\( |F \cap B| = 15 \),\( |F \cap V| = 12 \),\( |B \cap V| = 10 \),\( |F \cap B \cap V| = 8 \)。
至少喜欢一种球类运动的学生人数为 \( |F \cup B \cup V| \)。
\[ |F \cup B \cup V| = |F| + |B| + |V| - |F \cap B| - |F \cap V| - |B \cap V| + |F \cap B \cap V| \]
\[ |F \cup B \cup V| = 30 + 25 + 20 - 15 - 12 - 10 + 8 = 46 \]
所以,至少喜欢一种球类运动的学生有 46 人。
容斥原理是组合计数中一个非常有力的工具,后续章节我们会深入探讨其更一般的形式和应用。
1.2 函数与映射 (Functions and Mappings)
1.2.1 函数的定义与性质 (Definition and Properties of Functions)
函数 (Function) 是数学中描述变量之间关系的重要概念。在组合数学中,函数常用于描述集合之间的对应关系,以及计数问题的模型构建。函数也常被称为映射 (Mapping)。
函数的定义:
设 \( A \) 和 \( B \) 是两个非空集合。一个从 \( A \) 到 \( B \) 的函数 \( f \) 是指一种对应关系,使得对于 \( A \) 中的每一个元素 \( x \),在 \( B \) 中都存在唯一的元素 \( y \) 与之对应。记作 \( f: A \rightarrow B \),其中 \( y \) 称为 \( x \) 在 \( f \) 下的像 (Image),\( x \) 称为 \( y \) 的原像 (Preimage)。通常记 \( y = f(x) \)。
⚝ 基本概念:
① 定义域 (Domain):集合 \( A \) 称为函数 \( f \) 的定义域,记作 \( Dom(f) = A \)。
② 值域 (Codomain):集合 \( B \) 称为函数 \( f \) 的值域。
③ 像集 (Image Set):集合 \( \{f(x) | x \in A\} \) 称为函数 \( f \) 的像集,记作 \( Im(f) \) 或 \( f(A) \)。像集是值域 \( B \) 的子集,即 \( Im(f) \subseteq B \)。
函数的性质:
⚝ 相等 (Equality):两个函数 \( f: A \rightarrow B \) 和 \( g: A \rightarrow B \) 相等,当且仅当对于任意 \( x \in A \),都有 \( f(x) = g(x) \)。
⚝ 复合函数 (Composition of Functions):设 \( f: A \rightarrow B \) 和 \( g: B \rightarrow C \) 是两个函数,则复合函数 \( g \circ f: A \rightarrow C \) 定义为 \( (g \circ f)(x) = g(f(x)) \) 对于所有 \( x \in A \)。
⚝ 恒等函数 (Identity Function):对于集合 \( A \),恒等函数 \( id_A: A \rightarrow A \) 定义为 \( id_A(x) = x \) 对于所有 \( x \in A \)。
⚝ 逆函数 (Inverse Function):如果存在函数 \( g: B \rightarrow A \) 使得 \( g \circ f = id_A \) 且 \( f \circ g = id_B \),则称函数 \( f: A \rightarrow B \) 是可逆的,\( g \) 称为 \( f \) 的逆函数,记作 \( f^{-1} \)。并非所有函数都存在逆函数。
1.2.2 单射、满射与双射 (Injective, Surjective, and Bijective Functions)
根据函数在映射性质上的不同特点,可以对函数进行分类,其中单射 (Injective)、满射 (Surjective) 和双射 (Bijective) 是三种重要的类型。
⚝ 单射 (Injective Function) (也称一对一函数 (One-to-one Function)):
函数 \( f: A \rightarrow B \) 是单射的,如果对于任意 \( x_1, x_2 \in A \),若 \( x_1 \neq x_2 \),则 \( f(x_1) \neq f(x_2) \)。等价地,若 \( f(x_1) = f(x_2) \),则 \( x_1 = x_2 \)。
直观理解:定义域中不同的元素映射到值域中不同的元素。
⚝ 满射 (Surjective Function) (也称映成函数 (Onto Function)):
函数 \( f: A \rightarrow B \) 是满射的,如果对于任意 \( y \in B \),都存在至少一个 \( x \in A \) 使得 \( f(x) = y \)。
直观理解:值域中的每一个元素都有原像,即像集等于值域,\( Im(f) = B \)。
⚝ 双射 (Bijective Function) (也称一一对应 (One-to-one Correspondence)):
函数 \( f: A \rightarrow B \) 是双射的,如果它既是单射的又是满射的。
直观理解:定义域和值域中的元素之间存在一一对应关系。双射函数是可逆的。
示例:
设 \( A = \{1, 2, 3\} \),\( B = \{a, b, c, d\} \),\( C = \{x, y, z\} \)。
① 函数 \( f_1: A \rightarrow B \) 定义为 \( f_1(1) = a \),\( f_1(2) = b \),\( f_1(3) = c \)。\( f_1 \) 是单射,但不是满射 (因为 \( d \in B \) 没有原像)。
② 函数 \( f_2: B \rightarrow C \) 定义为 \( f_2(a) = x \),\( f_2(b) = y \),\( f_2(c) = z \),\( f_2(d) = z \)。\( f_2 \) 是满射,但不是单射 (因为 \( f_2(c) = f_2(d) = z \),但 \( c \neq d \))。
③ 函数 \( f_3: A \rightarrow C \) 定义为 \( f_3(1) = x \),\( f_3(2) = y \),\( f_3(3) = z \)。\( f_3 \) 既是单射又是满射,所以是双射。
重要结论:
对于有限集合 \( A \) 和 \( B \),如果存在从 \( A \) 到 \( B \) 的双射函数,则 \( |A| = |B| \)。反之,如果 \( |A| = |B| \),则存在从 \( A \) 到 \( B \) 的双射函数。这为我们比较集合的大小提供了重要工具。
1.3 数学归纳法 (Mathematical Induction)
数学归纳法 (Mathematical Induction) 是一种证明关于自然数命题的有力方法。它基于自然数的良序性 (Well-Ordering Principle),在组合数学和计算机科学中有着广泛的应用,尤其是在证明递推关系、算法正确性等方面。
1.3.1 第一数学归纳法 (First Principle of Mathematical Induction)
第一数学归纳法 (First Principle of Mathematical Induction) 的步骤如下:
要证明一个关于自然数 \( n \) 的命题 \( P(n) \) 对于所有 \( n \geq n_0 \) (其中 \( n_0 \) 是一个给定的自然数) 都成立,需要完成以下两个步骤:
① 基础步骤 (Base Case):证明当 \( n = n_0 \) 时,命题 \( P(n_0) \) 成立。
② 归纳步骤 (Inductive Step):假设对于某个 \( k \geq n_0 \),命题 \( P(k) \) 成立 (称为归纳假设 (Inductive Hypothesis)),证明命题 \( P(k+1) \) 也成立。
如果基础步骤和归纳步骤都完成,则可以断定命题 \( P(n) \) 对于所有 \( n \geq n_0 \) 都成立。
示例:
证明对于所有 \( n \geq 1 \),等式 \( 1 + 2 + 3 + ... + n = \frac{n(n+1)}{2} \) 成立。
证明:
设命题 \( P(n) \) 为 \( 1 + 2 + 3 + ... + n = \frac{n(n+1)}{2} \)。
① 基础步骤:当 \( n = 1 \) 时,左边 \( = 1 \),右边 \( = \frac{1(1+1)}{2} = 1 \)。左边 = 右边,所以 \( P(1) \) 成立。
② 归纳步骤:假设对于某个 \( k \geq 1 \),\( P(k) \) 成立,即 \( 1 + 2 + 3 + ... + k = \frac{k(k+1)}{2} \)。
现在要证明 \( P(k+1) \) 也成立,即证明 \( 1 + 2 + 3 + ... + (k+1) = \frac{(k+1)(k+2)}{2} \)。
从左边出发:
\[ 1 + 2 + 3 + ... + (k+1) = (1 + 2 + 3 + ... + k) + (k+1) \]
根据归纳假设,\( 1 + 2 + 3 + ... + k = \frac{k(k+1)}{2} \),代入上式:
\[ = \frac{k(k+1)}{2} + (k+1) = \frac{k(k+1) + 2(k+1)}{2} = \frac{(k+1)(k+2)}{2} \]
这正是 \( P(k+1) \) 的右边。因此,如果 \( P(k) \) 成立,则 \( P(k+1) \) 也成立。
根据第一数学归纳法,命题 \( P(n) \) 对于所有 \( n \geq 1 \) 都成立。
1.3.2 第二数学归纳法 (Second Principle of Mathematical Induction)
第二数学归纳法 (Second Principle of Mathematical Induction),也称为强归纳法 (Strong Induction)。与第一数学归纳法略有不同,归纳假设更强。
要证明一个关于自然数 \( n \) 的命题 \( P(n) \) 对于所有 \( n \geq n_0 \) 都成立,需要完成以下两个步骤:
① 基础步骤 (Base Case):证明当 \( n = n_0 \) 时,命题 \( P(n_0) \) 成立。(有时需要验证多个基础情况,例如 \( n = n_0, n_0+1, ..., n_1 \))
② 归纳步骤 (Inductive Step):假设对于某个 \( k \geq n_0 \),命题 \( P(j) \) 对于所有 \( n_0 \leq j \leq k \) 都成立 (称为强归纳假设 (Strong Inductive Hypothesis)),证明命题 \( P(k+1) \) 也成立。
如果基础步骤和归纳步骤都完成,则可以断定命题 \( P(n) \) 对于所有 \( n \geq n_0 \) 都成立。
示例:
证明任何大于 1 的整数都可以分解为素数的乘积。
证明:
设命题 \( P(n) \) 为 “整数 \( n \) 可以分解为素数的乘积”。要证明对于所有 \( n \geq 2 \),\( P(n) \) 成立。
① 基础步骤:当 \( n = 2 \) 时,2 是素数,可以分解为素数乘积 (本身)。所以 \( P(2) \) 成立。
② 归纳步骤:假设对于某个 \( k \geq 2 \),命题 \( P(j) \) 对于所有 \( 2 \leq j \leq k \) 都成立,即假设 \( 2, 3, ..., k \) 都可以分解为素数的乘积。
现在要证明 \( P(k+1) \) 也成立,即证明 \( k+1 \) 可以分解为素数的乘积。
考虑整数 \( k+1 \)。
⚝ 情况 1:如果 \( k+1 \) 是素数,那么 \( k+1 \) 本身就是素数的乘积 (只有一个因子)。
⚝ 情况 2:如果 \( k+1 \) 是合数,那么 \( k+1 \) 可以分解为两个整数的乘积,\( k+1 = a \cdot b \),其中 \( 1 < a, b < k+1 \)。因此 \( 2 \leq a \leq k \) 且 \( 2 \leq b \leq k \)。
根据强归纳假设,\( P(a) \) 和 \( P(b) \) 都成立,即 \( a \) 和 \( b \) 都可以分解为素数的乘积。
设 \( a = p_1 p_2 ... p_r \) 和 \( b = q_1 q_2 ... q_s \),其中 \( p_i \) 和 \( q_j \) 都是素数。
则 \( k+1 = a \cdot b = (p_1 p_2 ... p_r) \cdot (q_1 q_2 ... q_s) \),\( k+1 \) 也被分解为素数的乘积。
无论哪种情况,\( P(k+1) \) 都成立。
根据第二数学归纳法,命题 \( P(n) \) 对于所有 \( n \geq 2 \) 都成立。
总结:
第一数学归纳法和第二数学归纳法都是重要的证明工具。选择使用哪种方法取决于问题的性质。通常,当证明 \( P(k+1) \) 的成立只需要用到 \( P(k) \) 的成立时,使用第一数学归纳法;当证明 \( P(k+1) \) 的成立需要用到 \( P(n_0), P(n_0+1), ..., P(k) \) 的成立时,使用第二数学归纳法。
1.4 基本计数原理 (Basic Counting Principles)
计数原理 (Counting Principles) 是组合数学的核心内容,用于解决各种计数问题。最基本的计数原理是加法原理 (Rule of Sum) 和乘法原理 (Rule of Product)。
1.4.1 加法原理 (Rule of Sum)
加法原理 (Rule of Sum):
如果完成一件事情有 \( k \) 类方法,第一类方法有 \( n_1 \) 种不同的方式,第二类方法有 \( n_2 \) 种不同的方式,...,第 \( k \) 类方法有 \( n_k \) 种不同的方式,并且这些类方法之间是互斥的(即任何一种方式只属于一类方法),那么完成这件事情共有 \( n_1 + n_2 + ... + n_k \) 种不同的方式。
集合语言描述:
如果集合 \( A_1, A_2, ..., A_k \) 两两不相交 (pairwise disjoint),即对于任意 \( i \neq j \),\( A_i \cap A_j = \emptyset \),则它们的并集 \( A_1 \cup A_2 \cup ... \cup A_k \) 的元素个数为:
\[ |A_1 \cup A_2 \cup ... \cup A_k| = |A_1| + |A_2| + ... + |A_k| \]
示例:
从北京到上海,可以乘坐火车、飞机或汽车。如果每天有 10 趟火车,30 个航班,5 班汽车,那么每天从北京到上海有多少种不同的交通方式?
解:
乘坐火车有 10 种方式,乘坐飞机有 30 种方式,乘坐汽车有 5 种方式。这三类方式是互斥的。
根据加法原理,从北京到上海共有 \( 10 + 30 + 5 = 45 \) 种不同的交通方式。
1.4.2 乘法原理 (Rule of Product)
乘法原理 (Rule of Product):
如果完成一件事情需要分成 \( k \) 个步骤,完成第一个步骤有 \( n_1 \) 种不同的方式,完成第二个步骤有 \( n_2 \) 种不同的方式,...,完成第 \( k \) 个步骤有 \( n_k \) 种不同的方式,那么完成这件事情共有 \( n_1 \times n_2 \times ... \times n_k \) 种不同的方式。
集合语言描述:
如果集合 \( A_1, A_2, ..., A_k \) 分别有 \( n_1, n_2, ..., n_k \) 个元素,那么从每个集合中各取一个元素组成有序组 \( (a_1, a_2, ..., a_k) \) 的个数为 \( n_1 \times n_2 \times ... \times n_k \)。这实际上是求笛卡尔积 (Cartesian Product) \( A_1 \times A_2 \times ... \times A_k \) 的大小。
\[ |A_1 \times A_2 \times ... \times A_k| = |A_1| \times |A_2| \times ... \times |A_k| = n_1 \times n_2 \times ... \times n_k \]
示例:
一个餐厅提供 3 种主菜、4 种配菜和 2 种饮料。如果一份套餐包含一份主菜、一份配菜和一份饮料,那么共有多少种不同的套餐组合?
解:
选择主菜有 3 种方式,选择配菜有 4 种方式,选择饮料有 2 种方式。完成一份套餐需要三个步骤。
根据乘法原理,共有 \( 3 \times 4 \times 2 = 24 \) 种不同的套餐组合。
加法原理与乘法原理的应用:
在解决计数问题时,通常需要将问题分解为若干个互斥的类别(应用加法原理),或者分解为若干个连续的步骤(应用乘法原理)。很多复杂的计数问题都是通过巧妙地组合运用加法原理和乘法原理来解决的。
1.5 排列与组合 (Permutations and Combinations)
排列 (Permutation) 和组合 (Combination) 是组合数学中最基本、最重要的概念。它们用于解决从给定集合中选取元素并进行排列或组合的问题。
1.5.1 排列 (Permutations)
排列 (Permutation) 的定义:
从 \( n \) 个不同元素中取出 \( r \) 个元素,按照一定的顺序排成一列,称为从 \( n \) 个不同元素中取出 \( r \) 个元素的排列。
⚝ 排列数 (Number of Permutations):
从 \( n \) 个不同元素中取出 \( r \) 个元素的排列数,记作 \( P(n, r) \) 或 \( A_n^r \) 或 \( {}^nP_r \)。
根据乘法原理,第一个位置有 \( n \) 种选择,第二个位置有 \( n-1 \) 种选择,...,第 \( r \) 个位置有 \( n-r+1 \) 种选择。
\[ P(n, r) = n(n-1)(n-2)...(n-r+1) = \frac{n!}{(n-r)!} \]
其中 \( n! = n \times (n-1) \times ... \times 2 \times 1 \) 是 \( n \) 的阶乘 (Factorial),规定 \( 0! = 1 \)。
特殊情况:
当 \( r = n \) 时,称为全排列 (Full Permutation),排列数为 \( P(n, n) = n! \)。
示例:
从 5 个不同的字母 a, b, c, d, e 中取出 3 个字母进行排列,有多少种不同的排列方式?
解:
\( n = 5 \),\( r = 3 \)。
\( P(5, 3) = \frac{5!}{(5-3)!} = \frac{5!}{2!} = 5 \times 4 \times 3 = 60 \) 种。
1.5.2 组合 (Combinations)
组合 (Combination) 的定义:
从 \( n \) 个不同元素中取出 \( r \) 个元素,不考虑顺序组成一组,称为从 \( n \) 个不同元素中取出 \( r \) 个元素的组合。
⚝ 组合数 (Number of Combinations):
从 \( n \) 个不同元素中取出 \( r \) 个元素的组合数,记作 \( C(n, r) \) 或 \( \binom{n}{r} \) 或 \( {}^nC_r \),读作 “\( n \) 选 \( r \)” (n choose r)。
由于每一种组合对应 \( r! \) 种排列,所以组合数等于排列数除以 \( r! \)。
\[ C(n, r) = \binom{n}{r} = \frac{P(n, r)}{r!} = \frac{n!}{r!(n-r)!} \]
组合数的性质:
① 对称性 (Symmetry):\( \binom{n}{r} = \binom{n}{n-r} \)。
② 递推关系 (Recurrence Relation):\( \binom{n}{r} = \binom{n-1}{r-1} + \binom{n-1}{r} \) (帕斯卡恒等式 - Pascal's Identity)。
③ 求和公式 (Summation Formula):\( \sum_{r=0}^{n} \binom{n}{r} = 2^n \)。
示例:
从 5 个不同的字母 a, b, c, d, e 中取出 3 个字母组成一组,有多少种不同的组合方式?
解:
\( n = 5 \),\( r = 3 \)。
\( C(5, 3) = \binom{5}{3} = \frac{5!}{3!(5-3)!} = \frac{5!}{3!2!} = \frac{5 \times 4}{2 \times 1} = 10 \) 种。
1.5.3 多重集的排列与组合 (Permutations and Combinations of Multisets)
多重集 (Multiset) 的概念:
多重集是指允许元素重复出现的“集合”。例如,\( \{a, a, b, c\} \) 是一个多重集,其中元素 \( a \) 出现了 2 次。
设多重集 \( S = \{n_1 \cdot a_1, n_2 \cdot a_2, ..., n_k \cdot a_k\} \) 表示由 \( n_1 \) 个 \( a_1 \),\( n_2 \) 个 \( a_2 \),...,\( n_k \) 个 \( a_k \) 组成的多重集,其中 \( n_i \) 是元素 \( a_i \) 的重复数 (multiplicity)。多重集 \( S \) 的大小为 \( N = n_1 + n_2 + ... + n_k \)。
⚝ 多重集的排列:
从多重集 \( S = \{n_1 \cdot a_1, n_2 \cdot a_2, ..., n_k \cdot a_k\} \) 中取出 \( r \) 个元素的排列数,情况比较复杂,一般需要使用生成函数 (Generating Function) 等方法解决。
特殊情况:从多重集 \( S \) 中取出全部 \( N = n_1 + n_2 + ... + n_k \) 个元素进行全排列,排列数为:
\[ \frac{N!}{n_1! n_2! ... n_k!} \]
示例:
用字母 a, a, b, b, b 组成不同的排列,有多少种?
解:
多重集 \( S = \{2 \cdot a, 3 \cdot b\} \),\( N = 2 + 3 = 5 \)。
全排列数为 \( \frac{5!}{2!3!} = \frac{120}{2 \times 6} = 10 \) 种。
⚝ 多重集的组合:
从多重集 \( S = \{\infty \cdot a_1, \infty \cdot a_2, ..., \infty \cdot a_k\} \) 中取出 \( r \) 个元素的组合数,相当于求方程 \( x_1 + x_2 + ... + x_k = r \) 的非负整数解的个数,为 \( \binom{r+k-1}{k-1} = \binom{r+k-1}{r} \)。
示例:
有 3 种糖果,每种糖果数量无限。要选 5 颗糖果,有多少种不同的选法?
解:
相当于从多重集 \( \{\infty \cdot 糖果1, \infty \cdot 糖果2, \infty \cdot 糖果3\} \) 中选 5 个元素的组合数。
\( k = 3 \),\( r = 5 \)。
组合数为 \( \binom{5+3-1}{3-1} = \binom{7}{2} = \frac{7 \times 6}{2 \times 1} = 21 \) 种。
1.6 二项式定理 (Binomial Theorem)
二项式定理 (Binomial Theorem) 给出了二项式 (Binomial) 幂展开的公式,是组合数学中的一个重要定理,与二项式系数 (Binomial Coefficient) 密切相关。
1.6.1 二项式系数 (Binomial Coefficients)
二项式系数 (Binomial Coefficients):
二项式系数 \( \binom{n}{r} \) 定义为 \( \binom{n}{r} = \frac{n!}{r!(n-r)!} \),其中 \( n, r \) 是非负整数,且 \( 0 \leq r \leq n \)。当 \( r < 0 \) 或 \( r > n \) 时,定义 \( \binom{n}{r} = 0 \)。
二项式系数的组合意义:
\( \binom{n}{r} \) 表示从 \( n \) 个不同元素中选取 \( r \) 个元素的组合数。
二项式系数的性质:
① 对称性:\( \binom{n}{r} = \binom{n}{n-r} \)
② 帕斯卡恒等式:\( \binom{n}{r} = \binom{n-1}{r-1} + \binom{n-1}{r} \)
③ 吸收恒等式 (Absorption Identity):\( r \binom{n}{r} = n \binom{n-1}{r-1} \)
④ 平行求和恒等式 (Parallel Summation Identity):\( \sum_{i=r}^{n} \binom{i}{r} = \binom{n+1}{r+1} \)
⑤ 上指标求和恒等式 (Upper Summation Identity):\( \sum_{i=0}^{n} \binom{n}{i} = 2^n \)
⑥ 交错求和恒等式 (Alternating Summation Identity):\( \sum_{i=0}^{n} (-1)^i \binom{n}{i} = 0 \) (当 \( n \geq 1 \) 时)
⑦ 范德蒙恒等式 (Vandermonde's Identity):\( \binom{m+n}{r} = \sum_{k=0}^{r} \binom{m}{k} \binom{n}{r-k} \)
1.6.2 二项式定理及其应用 (Binomial Theorem and its Applications)
二项式定理 (Binomial Theorem):
对于任意实数 \( x, y \) 和非负整数 \( n \),有:
\[ (x+y)^n = \sum_{r=0}^{n} \binom{n}{r} x^{n-r} y^r = \binom{n}{0} x^n y^0 + \binom{n}{1} x^{n-1} y^1 + ... + \binom{n}{n} x^0 y^n \]
二项式定理的应用:
① 展开二项式:可以直接使用二项式定理展开 \( (x+y)^n \)。
② 计算组合数之和:通过对 \( x, y \) 取特殊值,可以得到关于组合数的一些求和公式。
▮▮▮▮⚝ 令 \( x = y = 1 \),得到 \( (1+1)^n = \sum_{r=0}^{n} \binom{n}{r} 1^{n-r} 1^r = \sum_{r=0}^{n} \binom{n}{r} = 2^n \)。
▮▮▮▮⚝ 令 \( x = 1 \),\( y = -1 \),得到 \( (1-1)^n = \sum_{r=0}^{n} \binom{n}{r} 1^{n-r} (-1)^r = \sum_{r=0}^{n} (-1)^r \binom{n}{r} = 0 \) (当 \( n \geq 1 \) 时)。
③ 证明组合恒等式:可以利用二项式定理的系数对应关系来证明一些组合恒等式。
④ 近似计算:当 \( |y| \) 远小于 \( |x| \) 时,可以用二项式定理的前几项来近似计算 \( (x+y)^n \)。
示例:
展开 \( (x+2)^4 \)。
解:
根据二项式定理,
\[ (x+2)^4 = \sum_{r=0}^{4} \binom{4}{r} x^{4-r} 2^r \]
\[ = \binom{4}{0} x^4 2^0 + \binom{4}{1} x^3 2^1 + \binom{4}{2} x^2 2^2 + \binom{4}{3} x^1 2^3 + \binom{4}{4} x^0 2^4 \]
\[ = 1 \cdot x^4 \cdot 1 + 4 \cdot x^3 \cdot 2 + 6 \cdot x^2 \cdot 4 + 4 \cdot x \cdot 8 + 1 \cdot 1 \cdot 16 \]
\[ = x^4 + 8x^3 + 24x^2 + 32x + 16 \]
1.7 多项式定理 (Multinomial Theorem)
多项式定理 (Multinomial Theorem) 是二项式定理的推广,给出了多项式 (Multinomial) 幂展开的公式,与多项式系数 (Multinomial Coefficient) 相关。
1.7.1 多项式系数 (Multinomial Coefficients)
多项式系数 (Multinomial Coefficients):
多项式系数 \( \binom{n}{n_1, n_2, ..., n_k} \) 定义为 \( \binom{n}{n_1, n_2, ..., n_k} = \frac{n!}{n_1! n_2! ... n_k!} \),其中 \( n, n_1, n_2, ..., n_k \) 是非负整数,且 \( n_1 + n_2 + ... + n_k = n \)。
多项式系数的组合意义:
\( \binom{n}{n_1, n_2, ..., n_k} \) 表示将 \( n \) 个不同元素分成 \( k \) 组,第一组有 \( n_1 \) 个,第二组有 \( n_2 \) 个,...,第 \( k \) 组有 \( n_k \) 个的分组方法数。也等于从 \( n \) 个位置中选 \( n_1 \) 个放第一类元素,再从剩余 \( n-n_1 \) 个位置中选 \( n_2 \) 个放第二类元素,...,最后剩余 \( n_k \) 个位置放第 \( k \) 类元素的方案数。
特殊情况:当 \( k = 2 \) 时,\( \binom{n}{n_1, n_2} = \binom{n}{n_1, n-n_1} = \frac{n!}{n_1!(n-n_1)!} = \binom{n}{n_1} = \binom{n}{n_2} \),退化为二项式系数。
1.7.2 多项式定理及其应用 (Multinomial Theorem and its Applications)
多项式定理 (Multinomial Theorem):
对于任意实数 \( x_1, x_2, ..., x_k \) 和非负整数 \( n \),有:
\[ (x_1 + x_2 + ... + x_k)^n = \sum_{n_1+n_2+...+n_k=n} \binom{n}{n_1, n_2, ..., n_k} x_1^{n_1} x_2^{n_2} ... x_k^{n_k} \]
其中求和是对所有满足 \( n_1 + n_2 + ... + n_k = n \) 的非负整数解 \( (n_1, n_2, ..., n_k) \) 进行的。
多项式定理的应用:
① 展开多项式:可以直接使用多项式定理展开 \( (x_1 + x_2 + ... + x_k)^n \)。
② 计算多项式展开式中特定项的系数:例如,求 \( (x+y+z)^5 \) 中 \( x^2 y^2 z \) 项的系数。
③ 组合计数问题:多项式定理可以用于解决一些与分组、分配有关的组合计数问题。
示例:
求 \( (x+y+z)^3 \) 的展开式。
解:
根据多项式定理,
\[ (x+y+z)^3 = \sum_{n_1+n_2+n_3=3} \binom{3}{n_1, n_2, n_3} x^{n_1} y^{n_2} z^{n_3} \]
列举所有 \( n_1+n_2+n_3=3 \) 的非负整数解 \( (n_1, n_2, n_3) \) 及对应的多项式系数:
⚝ (3, 0, 0), (0, 3, 0), (0, 0, 3): \( \binom{3}{3, 0, 0} = \binom{3}{0, 3, 0} = \binom{3}{0, 0, 3} = \frac{3!}{3!0!0!} = 1 \)
⚝ (2, 1, 0), (2, 0, 1), (1, 2, 0), (0, 2, 1), (1, 0, 2), (0, 1, 2): \( \binom{3}{2, 1, 0} = \binom{3}{2, 0, 1} = \binom{3}{1, 2, 0} = \binom{3}{0, 2, 1} = \binom{3}{1, 0, 2} = \binom{3}{0, 1, 2} = \frac{3!}{2!1!0!} = 3 \)
⚝ (1, 1, 1): \( \binom{3}{1, 1, 1} = \frac{3!}{1!1!1!} = 6 \)
所以,
\[ (x+y+z)^3 = 1 \cdot x^3 + 1 \cdot y^3 + 1 \cdot z^3 + 3 \cdot x^2 y + 3 \cdot x^2 z + 3 \cdot xy^2 + 3 \cdot y^2 z + 3 \cdot xz^2 + 3 \cdot yz^2 + 6 \cdot xyz \]
\[ = x^3 + y^3 + z^3 + 3(x^2 y + x^2 z + xy^2 + y^2 z + xz^2 + yz^2) + 6xyz \]
本章作为预备知识,介绍了集合论基础、函数与映射、数学归纳法、基本计数原理、排列与组合、二项式定理和多项式定理。这些内容是学习组合数学后续章节的基础,务必牢固掌握。在后续章节中,我们将深入探讨生成函数、容斥原理、图论等更高级的组合数学主题。
2. chapter 2: 生成函数 (Generating Functions)
2.1 序列与生成函数 (Sequences and Generating Functions)
2.1.1 普通生成函数 (Ordinary Generating Functions - OGF)
在组合数学中,生成函数 (Generating Function) 是一种强大的工具,它将序列与函数联系起来,从而可以使用分析学的方法来研究组合问题。普通生成函数 (Ordinary Generating Function, OGF) 是生成函数中最基本和常用的一种形式。
定义 2.1.1 (普通生成函数):
对于一个序列 (sequence) \( a = (a_0, a_1, a_2, \ldots) \),其普通生成函数 (ordinary generating function),记为 \( A(x) \) 或 \( G_a(x) \) 或 \( OGF(a; x) \),定义为幂级数 (power series):
\[ A(x) = \sum_{n=0}^{\infty} a_n x^n = a_0 + a_1 x + a_2 x^2 + \cdots \]
其中,\( a_n \) 是序列的第 \( n \) 项,\( x \) 是一个形式变量 (formal variable)。我们通常不关心级数的收敛性 (convergence),而将 \( A(x) \) 视为形式幂级数,专注于其代数运算和组合意义。
示例 2.1.1:
考虑序列 (sequence) \( a = (1, 1, 1, \ldots) \),即 \( a_n = 1 \) 对所有 \( n \ge 0 \)。其普通生成函数 (ordinary generating function) 为:
\[ A(x) = \sum_{n=0}^{\infty} 1 \cdot x^n = 1 + x + x^2 + x^3 + \cdots \]
这是一个几何级数 (geometric series),当 \( |x| < 1 \) 时,它收敛于 \( \frac{1}{1-x} \)。因此,我们可以将 \( A(x) \) 表示为:
\[ A(x) = \frac{1}{1-x} \]
在形式幂级数的意义下,我们认为 \( 1 + x + x^2 + x^3 + \cdots \) 和 \( \frac{1}{1-x} \) 是等价的。
示例 2.1.2:
考虑序列 (sequence) \( b = (1, 2, 3, \ldots) \),即 \( b_n = n+1 \) 对所有 \( n \ge 0 \)。其普通生成函数 (ordinary generating function) 为:
\[ B(x) = \sum_{n=0}^{\infty} (n+1) x^n = 1 + 2x + 3x^2 + 4x^3 + \cdots \]
我们可以通过对几何级数求导得到 \( B(x) \)。已知 \( \frac{1}{1-x} = \sum_{n=0}^{\infty} x^n \),对两边关于 \( x \) 求导,得到:
\[ \frac{d}{dx} \left( \frac{1}{1-x} \right) = \frac{1}{(1-x)^2} \]
\[ \frac{d}{dx} \left( \sum_{n=0}^{\infty} x^n \right) = \sum_{n=1}^{\infty} n x^{n-1} = \sum_{n=0}^{\infty} (n+1) x^n \]
因此,\( B(x) = \frac{1}{(1-x)^2} \)。
普通生成函数 (OGF) 的作用:
① 简洁表示序列 (Concise representation of sequences):将一个无限序列用一个函数简洁地表示出来。
② 解决计数问题 (Solving counting problems):通过生成函数的运算,可以解决复杂的计数问题,例如组合数计算、递推关系求解等。
③ 研究序列的性质 (Studying properties of sequences):通过分析生成函数的性质,可以研究序列的组合性质和渐近行为。
参考文献:
⚝ Richard P. Stanley. Enumerative Combinatorics, Volume 1. Cambridge University Press, 1997.
⚝ Herbert S. Wilf. generatingfunctionology. Academic Press, 1994. (Available online at: https://www.math.upenn.edu/~wilf/DownldGF.html)
2.1.2 指数生成函数 (Exponential Generating Functions - EGF)
除了普通生成函数 (OGF),另一种重要的生成函数是指数生成函数 (Exponential Generating Function, EGF)。指数生成函数 (EGF) 在处理带有标签 (labeled) 的计数问题时非常有用,例如排列问题、图的计数问题等。
定义 2.1.2 (指数生成函数):
对于一个序列 (sequence) \( a = (a_0, a_1, a_2, \ldots) \),其指数生成函数 (exponential generating function),记为 \( \hat{A}(x) \) 或 \( E_a(x) \) 或 \( EGF(a; x) \),定义为幂级数 (power series):
\[ \hat{A}(x) = \sum_{n=0}^{\infty} a_n \frac{x^n}{n!} = a_0 + a_1 \frac{x}{1!} + a_2 \frac{x^2}{2!} + \cdots \]
其中,\( a_n \) 是序列的第 \( n \) 项,\( x \) 是一个形式变量 (formal variable),\( n! \) 是 \( n \) 的阶乘 (factorial)。
示例 2.1.3:
考虑序列 (sequence) \( a = (1, 1, 1, \ldots) \),即 \( a_n = 1 \) 对所有 \( n \ge 0 \)。其指数生成函数 (exponential generating function) 为:
\[ \hat{A}(x) = \sum_{n=0}^{\infty} 1 \cdot \frac{x^n}{n!} = 1 + \frac{x}{1!} + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots \]
我们知道,这个级数是指数函数 (exponential function) \( e^x \) 的泰勒展开 (Taylor expansion)。因此,我们可以将 \( \hat{A}(x) \) 表示为:
\[ \hat{A}(x) = e^x \]
示例 2.1.4:
考虑序列 (sequence) \( b = (1, 2, 4, 8, \ldots) \),即 \( b_n = 2^n \) 对所有 \( n \ge 0 \)。其指数生成函数 (exponential generating function) 为:
\[ \hat{B}(x) = \sum_{n=0}^{\infty} 2^n \frac{x^n}{n!} = 1 + 2\frac{x}{1!} + 4\frac{x^2}{2!} + 8\frac{x^3}{3!} + \cdots \]
我们可以将 \( 2^n \) 移到求和符号内部:
\[ \hat{B}(x) = \sum_{n=0}^{\infty} \frac{(2x)^n}{n!} \]
这正是 \( e^{2x} \) 的泰勒展开 (Taylor expansion)。因此,\( \hat{B}(x) = e^{2x} \)。
指数生成函数 (EGF) 的作用:
① 处理标签问题 (Handling labeled problems):适用于计数带有标签的组合对象,例如排列、带标签的图等。
② 组合结构的分解 (Decomposition of combinatorial structures):指数生成函数与组合结构的分解和组合运算有密切关系,例如不交并 (disjoint union) 和 笛卡尔积 (Cartesian product) 的概念在指数生成函数中有自然的对应。
③ 解决排列计数问题 (Solving permutation counting problems):在排列计数问题中,指数生成函数能够更自然地反映组合结构。
何时使用 OGF vs. EGF:
⚝ 普通生成函数 (OGF):适用于无标签 (unlabeled) 的计数问题,或者关注组合 (combination) 的问题,例如从集合中选取元素,整数拆分等。
⚝ 指数生成函数 (EGF):适用于有标签 (labeled) 的计数问题,或者关注排列 (permutation) 的问题,例如排列计数,图的计数(顶点带有标签)等。
在实际应用中,选择使用 普通生成函数 (OGF) 还是 指数生成函数 (EGF) 取决于问题的性质。理解它们的定义和适用场景是解决组合计数问题的关键。
参考文献:
⚝ Richard P. Stanley. Enumerative Combinatorics, Volume 2. Cambridge University Press, 1999.
⚝ Philippe Flajolet and Robert Sedgewick. Analytic Combinatorics. Cambridge University Press, 2009. (Available online at: http://algo.inria.fr/flajolet/Publications/book.pdf)
2.2 生成函数的性质与运算 (Properties and Operations of Generating Functions)
2.2.1 生成函数的加法与乘法 (Addition and Multiplication of Generating Functions)
生成函数作为形式幂级数,可以进行代数运算,如加法 (addition) 和 乘法 (multiplication)。这些运算在组合计数中具有重要的意义。
1. 加法 (Addition)
设有两个序列 (sequences) \( a = (a_0, a_1, a_2, \ldots) \) 和 \( b = (b_0, b_1, b_2, \ldots) \),它们的普通生成函数 (OGF) 分别为 \( A(x) = \sum_{n=0}^{\infty} a_n x^n \) 和 \( B(x) = \sum_{n=0}^{\infty} b_n x^n \)。定义序列的和 (sum of sequences) \( c = a + b \) 为 \( c = (a_0 + b_0, a_1 + b_1, a_2 + b_2, \ldots) \),即 \( c_n = a_n + b_n \)。
定理 2.2.1 (生成函数的加法):
序列 \( c = a + b \) 的普通生成函数 (OGF) \( C(x) \) 是 \( A(x) \) 和 \( B(x) \) 的和:
\[ C(x) = A(x) + B(x) = \sum_{n=0}^{\infty} (a_n + b_n) x^n \]
组合意义 (Combinatorial Interpretation):
如果 \( a_n \) 计数组合对象 (combinatorial objects) \( \mathcal{A}_n \) 的数量,\( b_n \) 计数组合对象 (combinatorial objects) \( \mathcal{B}_n \) 的数量,且 \( \mathcal{A}_n \) 和 \( \mathcal{B}_n \) 是不相交的 (disjoint),那么 \( c_n = a_n + b_n \) 计数 \( \mathcal{A}_n \cup \mathcal{B}_n \) 中对象的数量。换句话说,生成函数的加法对应于不交并 (disjoint union) 的组合构造。
类似地,对于指数生成函数 (EGF),设 \( \hat{A}(x) = \sum_{n=0}^{\infty} a_n \frac{x^n}{n!} \) 和 \( \hat{B}(x) = \sum_{n=0}^{\infty} b_n \frac{x^n}{n!} \) 分别是序列 \( a \) 和 \( b \) 的 EGF。序列 \( c = a + b \) 的 EGF \( \hat{C}(x) \) 是 \( \hat{A}(x) \) 和 \( \hat{B}(x) \) 的和:
\[ \hat{C}(x) = \hat{A}(x) + \hat{B}(x) = \sum_{n=0}^{\infty} (a_n + b_n) \frac{x^n}{n!} \]
组合意义 (Combinatorial Interpretation) 与 OGF 的加法类似,也对应于不交并 (disjoint union) 的组合构造。
2. 乘法 (Multiplication)
设有两个序列 (sequences) \( a = (a_0, a_1, a_2, \ldots) \) 和 \( b = (b_0, b_1, b_2, \ldots) \),它们的普通生成函数 (OGF) 分别为 \( A(x) = \sum_{n=0}^{\infty} a_n x^n \) 和 \( B(x) = \sum_{n=0}^{\infty} b_n x^n \)。定义序列的卷积 (convolution of sequences) \( c = a * b \) 为 \( c = (c_0, c_1, c_2, \ldots) \),其中 \( c_n = \sum_{k=0}^{n} a_k b_{n-k} \)。
定理 2.2.2 (生成函数的乘法):
序列 \( c = a * b \) 的普通生成函数 (OGF) \( C(x) \) 是 \( A(x) \) 和 \( B(x) \) 的乘积:
\[ C(x) = A(x) B(x) = \left( \sum_{n=0}^{\infty} a_n x^n \right) \left( \sum_{n=0}^{\infty} b_n x^n \right) = \sum_{n=0}^{\infty} \left( \sum_{k=0}^{n} a_k b_{n-k} \right) x^n = \sum_{n=0}^{\infty} c_n x^n \]
组合意义 (Combinatorial Interpretation):
如果 \( a_n \) 计数组合对象 (combinatorial objects) \( \mathcal{A}_n \) 的数量,\( b_n \) 计数组合对象 (combinatorial objects) \( \mathcal{B}_n \) 的数量,那么 \( c_n = \sum_{k=0}^{n} a_k b_{n-k} \) 计数由一个 \( \mathcal{A}_k \) 中的对象和一个 \( \mathcal{B}_{n-k} \) 中的对象组成的有序对 (ordered pair) 的数量,其中 \( k \) 从 0 到 \( n \) 变化。换句话说,生成函数的乘法对应于笛卡尔积 (Cartesian product) 的组合构造。
对于指数生成函数 (EGF),设 \( \hat{A}(x) = \sum_{n=0}^{\infty} a_n \frac{x^n}{n!} \) 和 \( \hat{B}(x) = \sum_{n=0}^{\infty} b_n \frac{x^n}{n!} \) 分别是序列 \( a \) 和 \( b \) 的 EGF。定义序列的 Hadamard 积 (Hadamard product of sequences) \( c = a \diamond b \) 的 EGF \( \hat{C}(x) \) 为 \( \hat{A}(x) \) 和 \( \hat{B}(x) \) 的乘积:
\[ \hat{C}(x) = \hat{A}(x) \hat{B}(x) = \left( \sum_{n=0}^{\infty} a_n \frac{x^n}{n!} \right) \left( \sum_{n=0}^{\infty} b_n \frac{x^n}{n!} \right) = \sum_{n=0}^{\infty} \left( \sum_{k=0}^{n} \binom{n}{k} a_k b_{n-k} \right) \frac{x^n}{n!} = \sum_{n=0}^{\infty} c_n \frac{x^n}{n!} \]
其中 \( c_n = \sum_{k=0}^{n} \binom{n}{k} a_k b_{n-k} \)。
组合意义 (Combinatorial Interpretation) (EGF 乘法):
假设我们要构造大小为 \( n \) 的标签结构 (labeled structure)。我们可以将标签集合 \( \{1, 2, \ldots, n\} \) 分成两个不相交的子集 (disjoint subsets),大小分别为 \( k \) 和 \( n-k \)。我们用大小为 \( k \) 的标签集合构造 \( \mathcal{A} \) 类型的结构,有 \( a_k \) 种方法;用大小为 \( n-k \) 的标签集合构造 \( \mathcal{B} \) 类型的结构,有 \( b_{n-k} \) 种方法。由于标签集合的划分有 \( \binom{n}{k} \) 种方式,因此总共有 \( \binom{n}{k} a_k b_{n-k} \) 种方法。对所有可能的 \( k \) 求和,得到 \( c_n = \sum_{k=0}^{n} \binom{n}{k} a_k b_{n-k} \)。指数生成函数的乘法对应于标签笛卡尔积 (labeled Cartesian product) 或 组合积 (composition product) 的组合构造。
示例 2.2.1 (OGF 乘法):
设 \( A(x) = \frac{1}{1-x} = \sum_{n=0}^{\infty} x^n \) 和 \( B(x) = \frac{1}{1-x} = \sum_{n=0}^{\infty} x^n \)。那么
\[ C(x) = A(x) B(x) = \frac{1}{(1-x)^2} = \sum_{n=0}^{\infty} (n+1) x^n \]
这与我们之前示例 2.1.2 的结果一致。序列 \( c_n = n+1 \) 是序列 \( a_n = 1 \) 和 \( b_n = 1 \) 的卷积。
示例 2.2.2 (EGF 乘法):
设 \( \hat{A}(x) = e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!} \) 和 \( \hat{B}(x) = e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!} \)。那么
\[ \hat{C}(x) = \hat{A}(x) \hat{B}(x) = e^x \cdot e^x = e^{2x} = \sum_{n=0}^{\infty} 2^n \frac{x^n}{n!} \]
这与我们之前示例 2.1.4 的结果一致。序列 \( c_n = 2^n \) 的指数生成函数是 \( e^{2x} \)。
2.2.2 生成函数的微分与积分 (Differentiation and Integration of Generating Functions)
生成函数作为形式幂级数,可以进行微分 (differentiation) 和 积分 (integration) 运算。这些运算在推导新的生成函数和解决计数问题时非常有用。
1. 微分 (Differentiation)
设 \( A(x) = \sum_{n=0}^{\infty} a_n x^n \) 是序列 \( a = (a_0, a_1, a_2, \ldots) \) 的普通生成函数 (OGF)。对 \( A(x) \) 关于 \( x \) 求导,得到:
\[ A'(x) = \frac{d}{dx} A(x) = \frac{d}{dx} \left( \sum_{n=0}^{\infty} a_n x^n \right) = \sum_{n=1}^{\infty} n a_n x^{n-1} = \sum_{n=0}^{\infty} (n+1) a_{n+1} x^n \]
因此,\( A'(x) \) 是序列 \( ((n+1)a_{n+1})_{n \ge 0} = (a_1, 2a_2, 3a_3, \ldots) \) 的 普通生成函数 (OGF)。
定理 2.2.3 (生成函数的微分):
如果 \( A(x) \) 是序列 \( (a_n)_{n \ge 0} \) 的 普通生成函数 (OGF),那么 \( x A'(x) \) 是序列 \( (n a_n)_{n \ge 0} \) 的 普通生成函数 (OGF)。
\[ x A'(x) = x \sum_{n=1}^{\infty} n a_n x^{n-1} = \sum_{n=1}^{\infty} n a_n x^n = \sum_{n=0}^{\infty} n a_n x^n \]
对于指数生成函数 (EGF),设 \( \hat{A}(x) = \sum_{n=0}^{\infty} a_n \frac{x^n}{n!} \) 是序列 \( a = (a_0, a_1, a_2, \ldots) \) 的 指数生成函数 (EGF)。对 \( \hat{A}(x) \) 关于 \( x \) 求导,得到:
\[ \hat{A}'(x) = \frac{d}{dx} \hat{A}(x) = \frac{d}{dx} \left( \sum_{n=0}^{\infty} a_n \frac{x^n}{n!} \right) = \sum_{n=1}^{\infty} a_n \frac{n x^{n-1}}{n!} = \sum_{n=1}^{\infty} a_n \frac{x^{n-1}}{(n-1)!} = \sum_{n=0}^{\infty} a_{n+1} \frac{x^n}{n!} \]
因此,\( \hat{A}'(x) \) 是序列 \( (a_{n+1})_{n \ge 0} = (a_1, a_2, a_3, \ldots) \) 的 指数生成函数 (EGF)。
定理 2.2.4 (指数生成函数的微分):
如果 \( \hat{A}(x) \) 是序列 \( (a_n)_{n \ge 0} \) 的 指数生成函数 (EGF),那么 \( \hat{A}'(x) \) 是序列 \( (a_{n+1})_{n \ge 0} \) 的 指数生成函数 (EGF)。
2. 积分 (Integration)
设 \( A(x) = \sum_{n=0}^{\infty} a_n x^n \) 是序列 \( a = (a_0, a_1, a_2, \ldots) \) 的普通生成函数 (OGF)。对 \( A(x) \) 关于 \( x \) 积分,并设积分常数为 0,得到:
\[ \int A(x) dx = \int \left( \sum_{n=0}^{\infty} a_n x^n \right) dx = \sum_{n=0}^{\infty} \int a_n x^n dx = \sum_{n=0}^{\infty} a_n \frac{x^{n+1}}{n+1} = \sum_{n=1}^{\infty} \frac{a_{n-1}}{n} x^n \]
因此,\( \int A(x) dx \) 是序列 \( (0, a_0, \frac{a_1}{2}, \frac{a_2}{3}, \ldots) \) 的 普通生成函数 (OGF)。
定理 2.2.5 (生成函数的积分):
如果 \( A(x) \) 是序列 \( (a_n)_{n \ge 0} \) 的 普通生成函数 (OGF),那么 \( \int_0^x A(t) dt \) 是序列 \( (\frac{a_{n-1}}{n})_{n \ge 1} \) 的 普通生成函数 (OGF),其中我们定义 \( a_{-1} = 0 \)。
\[ \int_0^x A(t) dt = \sum_{n=1}^{\infty} \frac{a_{n-1}}{n} x^n \]
对于指数生成函数 (EGF),设 \( \hat{A}(x) = \sum_{n=0}^{\infty} a_n \frac{x^n}{n!} \) 是序列 \( a = (a_0, a_1, a_2, \ldots) \) 的 指数生成函数 (EGF)。对 \( \hat{A}(x) \) 关于 \( x \) 积分,并设积分常数为 0,得到:
\[ \int \hat{A}(x) dx = \int \left( \sum_{n=0}^{\infty} a_n \frac{x^n}{n!} \right) dx = \sum_{n=0}^{\infty} \int a_n \frac{x^n}{n!} dx = \sum_{n=0}^{\infty} a_n \frac{x^{n+1}}{(n+1)!} = \sum_{n=1}^{\infty} a_{n-1} \frac{x^n}{n!} \]
因此,\( \int \hat{A}(x) dx \) 是序列 \( (0, a_0, a_1, a_2, \ldots) \) 的 指数生成函数 (EGF)。
定理 2.2.6 (指数生成函数的积分):
如果 \( \hat{A}(x) \) 是序列 \( (a_n)_{n \ge 0} \) 的 指数生成函数 (EGF),且 \( a_0 = 0 \),那么 \( \int_0^x \hat{A}(t) dt \) 是序列 \( (a_{n-1})_{n \ge 1} \) 的 指数生成函数 (EGF),其中我们定义 \( a_{-1} = 0 \)。更简洁地说,\( \int_0^x \hat{A}(t) dt \) 对应的序列是原序列向右平移一位,并在首项补 0。
示例 2.2.3 (微分):
已知序列 \( a = (1, 1, 1, \ldots) \) 的 普通生成函数 (OGF) 是 \( A(x) = \frac{1}{1-x} \)。那么序列 \( (n a_n)_{n \ge 0} = (0, 1, 2, 3, \ldots) \) 的 普通生成函数 (OGF) 是 \( x A'(x) \)。
\[ A'(x) = \frac{d}{dx} \left( \frac{1}{1-x} \right) = \frac{1}{(1-x)^2} \]
\[ x A'(x) = \frac{x}{(1-x)^2} = \sum_{n=0}^{\infty} n x^n = 0 + 1x + 2x^2 + 3x^3 + \cdots \]
示例 2.2.4 (积分):
已知序列 \( a = (1, 1, 1, \ldots) \) 的 普通生成函数 (OGF) 是 \( A(x) = \frac{1}{1-x} \)。那么序列 \( (\frac{a_{n-1}}{n})_{n \ge 1} = (0, 1, \frac{1}{2}, \frac{1}{3}, \ldots) \) 的 普通生成函数 (OGF) 是 \( \int_0^x A(t) dt \)。
\[ \int_0^x \frac{1}{1-t} dt = [-\ln(1-t)]_0^x = -\ln(1-x) = \sum_{n=1}^{\infty} \frac{x^n}{n} = 0 + 1x + \frac{1}{2}x^2 + \frac{1}{3}x^3 + \cdots \]
2.3 利用生成函数解决计数问题 (Using Generating Functions to Solve Counting Problems)
2.3.1 组合问题的生成函数解法 (Generating Function Approach to Combinatorial Problems)
生成函数在解决组合计数问题中扮演着核心角色。通过将组合问题转化为生成函数的形式,我们可以利用生成函数的性质和运算来求解计数问题。
基本思想 (Basic Idea):
① 确定计数对象 (Identify the objects to be counted):明确要计数的是哪种组合对象,例如集合、排列、组合、图等。
② 分解组合对象 (Decompose the objects):将复杂的组合对象分解为更简单的、可重复的结构单元。
③ 建立生成函数 (Construct generating functions):为基本结构单元建立生成函数。
④ 运用生成函数运算 (Apply generating function operations):根据组合对象的构造方式,运用生成函数的加法、乘法、微分、积分等运算,得到所求计数序列的生成函数。
⑤ 提取系数 (Extract coefficients):从得到的生成函数中提取所需项的系数,即为所求的计数结果。
示例 2.3.1 (从集合中选取元素):
问题:从集合 \( \{a, b, c\} \) 中选取若干元素(可以不选),求选取方案数。并求选取 \( n \) 个元素的方案数的生成函数。
解:
① 计数对象:从集合 \( \{a, b, c\} \) 中选取元素的方案。
② 分解:对于每个元素,可以选择选或不选,是独立的。
③ 基本结构单元的生成函数:
▮▮▮▮⚝ 对于元素 \( a \),选取方案的生成函数是 \( (1 + x) \),其中 \( 1 \) 代表不选 \( a \),\( x \) 代表选 \( a \)。\( x^k \) 的系数表示选 \( k \) 个 \( a \) 的方案数(只能选 0 个或 1 个)。
▮▮▮▮⚝ 同理,对于元素 \( b \) 和 \( c \),生成函数也是 \( (1 + x) \)。
④ 生成函数运算:由于元素 \( a, b, c \) 的选取是独立的,总的生成函数是它们生成函数的乘积:
\[ G(x) = (1 + x)(1 + x)(1 + x) = (1 + x)^3 = 1 + 3x + 3x^2 + x^3 \]
⑤ 提取系数:
▮▮▮▮⚝ \( x^0 \) 的系数为 1,表示选取 0 个元素的方案数为 1(空集)。
▮▮▮▮⚝ \( x^1 \) 的系数为 3,表示选取 1 个元素的方案数为 3(\( \{a\}, \{b\}, \{c\} \))。
▮▮▮▮⚝ \( x^2 \) 的系数为 3,表示选取 2 个元素的方案数为 3(\( \{a, b\}, \{a, c\}, \{b, c\} \))。
▮▮▮▮⚝ \( x^3 \) 的系数为 1,表示选取 3 个元素的方案数为 1(\( \{a, b, c\} \))。
▮▮▮▮⚝ \( x^n \) 的系数为 0,当 \( n > 3 \),表示选取超过 3 个元素的方案数为 0。
更一般的情况:从 \( n \) 个不同的元素中选取若干元素,选取 \( k \) 个元素的方案数为 二项式系数 (binomial coefficient) \( \binom{n}{k} \)。其普通生成函数 (OGF) 为:
\[ G(x) = \sum_{k=0}^{n} \binom{n}{k} x^k = (1 + x)^n \]
这正是二项式定理 (Binomial Theorem)。
示例 2.3.2 (组合数计算):
问题:求从 \( n \) 个不同物品中选取 \( r \) 个物品的组合数 \( \binom{n}{r} \)。
解:
考虑生成函数 \( (1 + x)^n = \sum_{k=0}^{n} \binom{n}{k} x^k \)。\( x^r \) 的系数就是 \( \binom{n}{r} \)。
例如,求 \( \binom{5}{3} \)。考虑 \( (1 + x)^5 = 1 + 5x + 10x^2 + 10x^3 + 5x^4 + x^5 \)。\( x^3 \) 的系数为 10,所以 \( \binom{5}{3} = 10 \)。
示例 2.3.3 (允许重复的组合):
问题:从 \( \{a, b, c\} \) 中可重复地选取 (with repetition) 若干元素,求选取方案数。并求选取 \( n \) 个元素的方案数的生成函数。
解:
① 计数对象:从集合 \( \{a, b, c\} \) 中可重复地选取元素的方案。
② 分解:对于每个元素,可以选择选取 0 个、1 个、2 个、...,是独立的。
③ 基本结构单元的生成函数:
▮▮▮▮⚝ 对于元素 \( a \),选取方案的生成函数是 \( (1 + x + x^2 + x^3 + \cdots) = \frac{1}{1-x} \)。\( x^k \) 的系数表示选 \( k \) 个 \( a \) 的方案数(可以选任意多个)。
▮▮▮▮⚝ 同理,对于元素 \( b \) 和 \( c \),生成函数也是 \( \frac{1}{1-x} \)。
④ 生成函数运算:由于元素 \( a, b, c \) 的选取是独立的,总的生成函数是它们生成函数的乘积:
\[ G(x) = \frac{1}{1-x} \cdot \frac{1}{1-x} \cdot \frac{1}{1-x} = \frac{1}{(1-x)^3} \]
⑤ 提取系数:我们需要求 \( \frac{1}{(1-x)^3} \) 的幂级数展开中 \( x^n \) 的系数。
我们知道 \( \frac{1}{1-x} = \sum_{n=0}^{\infty} x^n \)。
\( \frac{1}{(1-x)^2} = \sum_{n=0}^{\infty} (n+1) x^n \)。
\( \frac{1}{(1-x)^3} = \frac{1}{2} \frac{d^2}{dx^2} \left( \frac{1}{1-x} \right)^{-1} = \frac{1}{2} \frac{d}{dx} \left( \frac{1}{(1-x)^2} \right) = \frac{1}{2} \frac{2}{(1-x)^3} = \frac{1}{(1-x)^3} \)。
另一种方法是使用负二项式定理 (Negative Binomial Theorem):
\[ \frac{1}{(1-x)^k} = \sum_{n=0}^{\infty} \binom{n+k-1}{k-1} x^n = \sum_{n=0}^{\infty} \binom{n+k-1}{n} x^n \]
当 \( k = 3 \) 时,\( \frac{1}{(1-x)^3} = \sum_{n=0}^{\infty} \binom{n+3-1}{3-1} x^n = \sum_{n=0}^{\infty} \binom{n+2}{2} x^n \)。
因此,选取 \( n \) 个元素的方案数为 \( \binom{n+2}{2} = \frac{(n+2)(n+1)}{2} \)。
2.3.2 整数拆分问题 (Integer Partition Problems)
整数拆分 (Integer Partition) 是组合数学中经典的问题。生成函数在解决整数拆分问题中非常有效。
定义 2.3.1 (整数拆分):
一个正整数 \( n \) 的整数拆分 (integer partition) 是将 \( n \) 表示成若干个正整数之和,其中加数称为部分 (parts)。拆分的顺序不重要,通常约定部分按递减顺序排列。
例如,整数 4 的拆分有:
4
3+1
2+2
2+1+1
1+1+1+1
问题类型:
① 求整数 \( n \) 的拆分方案数。
② 限制部分的大小、数量、奇偶性等的拆分方案数。
利用生成函数解决整数拆分问题:
示例 2.3.4 (无限制的整数拆分):
问题:求整数 \( n \) 的拆分方案数 \( p(n) \)。求 \( p(n) \) 的生成函数。
解:
考虑拆分的部分 (parts) 可以是 1, 2, 3, ...。对于每个部分 \( k \),我们可以选择使用 0 个、1 个、2 个、...。
⚝ 对于部分 1,生成函数是 \( (1 + x^1 + x^{1\cdot 2} + x^{1\cdot 3} + \cdots) = \frac{1}{1-x^1} \)。\( x^{1\cdot j} \) 表示使用 \( j \) 个部分 1。
⚝ 对于部分 2,生成函数是 \( (1 + x^2 + x^{2\cdot 2} + x^{2\cdot 3} + \cdots) = \frac{1}{1-x^2} \)。\( x^{2\cdot j} \) 表示使用 \( j \) 个部分 2。
⚝ 对于部分 3,生成函数是 \( (1 + x^3 + x^{3\cdot 2} + x^{3\cdot 3} + \cdots) = \frac{1}{1-x^3} \)。\( x^{3\cdot j} \) 表示使用 \( j \) 个部分 3。
...
总的生成函数是所有部分生成函数的乘积:
\[ P(x) = \left( \frac{1}{1-x^1} \right) \left( \frac{1}{1-x^2} \right) \left( \frac{1}{1-x^3} \right) \cdots = \prod_{k=1}^{\infty} \frac{1}{1-x^k} \]
\( P(x) = \sum_{n=0}^{\infty} p(n) x^n \),其中 \( p(n) \) 是整数 \( n \) 的拆分方案数,\( p(0) = 1 \)(空拆分)。
示例 2.3.5 (部分只能是奇数的整数拆分):
问题:求整数 \( n \) 的拆分,要求所有部分都是奇数。求这种拆分方案数的生成函数。
解:
允许的部分是 1, 3, 5, 7, ...。
⚝ 对于部分 1,生成函数是 \( \frac{1}{1-x^1} \)。
⚝ 对于部分 3,生成函数是 \( \frac{1}{1-x^3} \)。
⚝ 对于部分 5,生成函数是 \( \frac{1}{1-x^5} \)。
...
总的生成函数是:
\[ P_{odd}(x) = \left( \frac{1}{1-x^1} \right) \left( \frac{1}{1-x^3} \right) \left( \frac{1}{1-x^5} \right) \cdots = \prod_{k=0}^{\infty} \frac{1}{1-x^{2k+1}} \]
示例 2.3.6 (部分互不相同的整数拆分):
问题:求整数 \( n \) 的拆分,要求所有部分互不相同。求这种拆分方案数的生成函数。
解:
允许的部分是 1, 2, 3, 4, ...,但每个部分最多使用一次(0 次或 1 次)。
⚝ 对于部分 1,生成函数是 \( (1 + x^1) \)。\( 1 \) 表示不使用部分 1,\( x^1 \) 表示使用部分 1 一次。
⚝ 对于部分 2,生成函数是 \( (1 + x^2) \)。
⚝ 对于部分 3,生成函数是 \( (1 + x^3) \)。
...
总的生成函数是:
\[ P_{distinct}(x) = (1 + x^1)(1 + x^2)(1 + x^3) \cdots = \prod_{k=1}^{\infty} (1 + x^k) \]
著名的恒等式 (Euler's Identity):
整数 \( n \) 拆分成互不相同的部分 (distinct parts) 的方案数,等于拆分成奇数部分 (odd parts) 的方案数。
即,\( P_{distinct}(x) = P_{odd}(x) \)。
\[ \prod_{k=1}^{\infty} (1 + x^k) = \prod_{k=0}^{\infty} \frac{1}{1-x^{2k+1}} \]
这个恒等式可以通过组合证明或生成函数代数运算证明。
2.4 递推关系与生成函数 (Recurrence Relations and Generating Functions)
2.4.1 线性递推关系 (Linear Recurrence Relations)
递推关系 (Recurrence Relation) 是定义序列项之间关系的一种方式。线性递推关系 (Linear Recurrence Relation) 是一种特殊的递推关系,其中序列的每一项是前面若干项的线性组合。生成函数是求解线性递推关系的有力工具。
定义 2.4.1 (线性递推关系):
一个线性递推关系 (linear recurrence relation) 是形如:
\[ a_n = c_1 a_{n-1} + c_2 a_{n-2} + \cdots + c_k a_{n-k} + f(n) \]
的递推关系,其中 \( c_1, c_2, \ldots, c_k \) 是常数,\( f(n) \) 是关于 \( n \) 的函数。如果 \( f(n) = 0 \),则称为齐次线性递推关系 (homogeneous linear recurrence relation);否则称为非齐次线性递推关系 (non-homogeneous linear recurrence relation)。\( k \) 称为递推关系的阶数 (order)。
为了唯一确定序列 \( (a_n) \),还需要给出 \( k \) 个初始条件 (initial conditions),例如 \( a_0, a_1, \ldots, a_{k-1} \)。
利用生成函数求解线性递推关系:
步骤:
① 写出递推关系式 (Write down the recurrence relation)。
② 定义生成函数 (Define the generating function) \( A(x) = \sum_{n=0}^{\infty} a_n x^n \)。
③ 将递推关系转化为生成函数方程 (Transform the recurrence relation into an equation for the generating function)。利用递推关系和初始条件,对递推关系式两边乘以 \( x^n \) 并求和,得到关于 \( A(x) \) 的代数方程。
④ 解方程,得到生成函数的表达式 (Solve the equation to find an expression for the generating function)。解代数方程,得到 \( A(x) \) 的闭形式 (closed form)。
⑤ 将生成函数展开为幂级数,提取系数 (Expand the generating function into a power series and extract the coefficients)。将 \( A(x) \) 展开为幂级数,\( x^n \) 的系数即为 \( a_n \)。
示例 2.4.1 (斐波那契数列的生成函数):
斐波那契数列 \( (F_n)_{n \ge 0} \) 满足递推关系 \( F_n = F_{n-1} + F_{n-2} \) 对于 \( n \ge 2 \),初始条件 \( F_0 = 0, F_1 = 1 \)。求斐波那契数列的生成函数 \( F(x) = \sum_{n=0}^{\infty} F_n x^n \)。
解:
① 递推关系:\( F_n = F_{n-1} + F_{n-2} \),\( n \ge 2 \),\( F_0 = 0, F_1 = 1 \)。
② 生成函数:\( F(x) = \sum_{n=0}^{\infty} F_n x^n \)。
③ 生成函数方程:
对递推关系 \( F_n = F_{n-1} + F_{n-2} \) 两边乘以 \( x^n \) 并从 \( n=2 \) 到 \( \infty \) 求和:
\[ \sum_{n=2}^{\infty} F_n x^n = \sum_{n=2}^{\infty} F_{n-1} x^n + \sum_{n=2}^{\infty} F_{n-2} x^n \]
\[ (F(x) - F_0 - F_1 x) = x \sum_{n=2}^{\infty} F_{n-1} x^{n-1} + x^2 \sum_{n=2}^{\infty} F_{n-2} x^{n-2} \]
\[ (F(x) - x) = x \sum_{m=1}^{\infty} F_{m} x^{m} + x^2 \sum_{j=0}^{\infty} F_{j} x^{j} \]
\[ F(x) - x = x (F(x) - F_0) + x^2 F(x) \]
由于 \( F_0 = 0 \),所以
\[ F(x) - x = x F(x) + x^2 F(x) \]
④ 解方程:
\[ F(x) - x F(x) - x^2 F(x) = x \]
\[ F(x) (1 - x - x^2) = x \]
\[ F(x) = \frac{x}{1 - x - x^2} \]
这就是斐波那契数列的生成函数。
⑤ 展开系数:
为了得到 \( F_n \) 的显式表达式,需要将 \( F(x) = \frac{x}{1 - x - x^2} \) 展开为幂级数。可以使用部分分式分解 (partial fraction decomposition) 或其他方法。
2.4.2 常系数线性递推关系 (Linear Recurrence Relations with Constant Coefficients)
常系数线性递推关系 (Linear Recurrence Relations with Constant Coefficients) 是一类重要的线性递推关系,其系数 \( c_1, c_2, \ldots, c_k \) 都是常数。求解这类递推关系可以使用特征方程 (characteristic equation) 的方法,也可以使用生成函数的方法。
特征方程方法 (Characteristic Equation Method) (简述):
对于齐次线性递推关系 \( a_n = c_1 a_{n-1} + c_2 a_{n-2} + \cdots + c_k a_{n-k} \),其特征方程 (characteristic equation) 为:
\[ r^k - c_1 r^{k-1} - c_2 r^{k-2} - \cdots - c_k = 0 \]
解特征方程得到特征根 \( r_1, r_2, \ldots, r_k \)。根据特征根的不同情况,可以得到递推关系的通解。
生成函数方法 (Generating Function Method) (回顾):
如 2.4.1 节所述,通过将递推关系转化为生成函数方程,解方程得到生成函数,再展开生成函数提取系数,即可得到序列的通项公式。
示例 2.4.2 (求解常系数线性递推关系):
求解递推关系 \( a_n = 4a_{n-1} - 4a_{n-2} \),\( n \ge 2 \),初始条件 \( a_0 = 1, a_1 = 4 \)。
解 (使用生成函数方法):
① 递推关系:\( a_n = 4a_{n-1} - 4a_{n-2} \),\( n \ge 2 \),\( a_0 = 1, a_1 = 4 \)。
② 生成函数:\( A(x) = \sum_{n=0}^{\infty} a_n x^n \)。
③ 生成函数方程:
\[ \sum_{n=2}^{\infty} a_n x^n = 4 \sum_{n=2}^{\infty} a_{n-1} x^n - 4 \sum_{n=2}^{\infty} a_{n-2} x^n \]
\[ (A(x) - a_0 - a_1 x) = 4x \sum_{n=2}^{\infty} a_{n-1} x^{n-1} - 4x^2 \sum_{n=2}^{\infty} a_{n-2} x^{n-2} \]
\[ (A(x) - 1 - 4x) = 4x (A(x) - a_0) - 4x^2 A(x) \]
\[ A(x) - 1 - 4x = 4x (A(x) - 1) - 4x^2 A(x) \]
④ 解方程:
\[ A(x) - 1 - 4x = 4x A(x) - 4x - 4x^2 A(x) \]
\[ A(x) - 4x A(x) + 4x^2 A(x) = 1 \]
\[ A(x) (1 - 4x + 4x^2) = 1 \]
\[ A(x) = \frac{1}{1 - 4x + 4x^2} = \frac{1}{(1 - 2x)^2} \]
⑤ 展开系数:
我们知道 \( \frac{1}{(1-y)^2} = \sum_{n=0}^{\infty} (n+1) y^n \)。令 \( y = 2x \),得到:
\[ A(x) = \frac{1}{(1 - 2x)^2} = \sum_{n=0}^{\infty} (n+1) (2x)^n = \sum_{n=0}^{\infty} (n+1) 2^n x^n \]
因此,\( a_n = (n+1) 2^n \)。
验证:
\( a_0 = (0+1) 2^0 = 1 \),\( a_1 = (1+1) 2^1 = 4 \)。
\( 4a_{n-1} - 4a_{n-2} = 4n 2^{n-1} - 4(n-1) 2^{n-2} = 2n 2^n - (n-1) 2^n = (2n - (n-1)) 2^n = (n+1) 2^n = a_n \)。
结果正确。
2.5 特殊计数序列的生成函数 (Generating Functions of Special Counting Sequences)
2.5.1 斐波那契数列 (Fibonacci Sequence)
斐波那契数列 (Fibonacci Sequence) \( (F_n)_{n \ge 0} \) 定义为 \( F_0 = 0, F_1 = 1 \),递推关系 \( F_n = F_{n-1} + F_{n-2} \) 对于 \( n \ge 2 \)。序列的前几项为 0, 1, 1, 2, 3, 5, 8, 13, ...。
在 2.4.1 节,我们已经推导了斐波那契数列的普通生成函数 (OGF):
\[ F(x) = \frac{x}{1 - x - x^2} \]
通项公式 (Closed Form Formula):
通过解特征方程 \( r^2 - r - 1 = 0 \),得到特征根 \( r_{1,2} = \frac{1 \pm \sqrt{5}}{2} \)。令 \( \phi = \frac{1 + \sqrt{5}}{2} \) (黄金分割比, golden ratio) 和 \( \psi = \frac{1 - \sqrt{5}}{2} \)。则斐波那契数列的通项公式为 比内公式 (Binet's formula):
\[ F_n = \frac{1}{\sqrt{5}} (\phi^n - \psi^n) = \frac{1}{\sqrt{5}} \left[ \left( \frac{1 + \sqrt{5}}{2} \right)^n - \left( \frac{1 - \sqrt{5}}{2} \right)^n \right] \]
生成函数的应用:
生成函数不仅可以用来求解通项公式,还可以用来推导斐波那契数列的各种恒等式。例如,利用生成函数可以证明:
① 恒等式 (Identity):\( \sum_{i=0}^{n} F_i = F_{n+2} - 1 \)
② 平方和公式 (Sum of Squares Formula):\( \sum_{i=1}^{n} F_i^2 = F_n F_{n+1} \)
③ 卷积公式 (Convolution Formula):\( F_{m+n} = F_m L_n + F_{m-1} L_{n-1} \) (其中 \( L_n \) 是卢卡斯数列, Lucas sequence)
参考文献:
⚝ Richard P. Stanley. Enumerative Combinatorics, Volume 1. Cambridge University Press, 1997.
⚝ Ronald L. Graham, Donald E. Knuth, Oren Patashnik. Concrete Mathematics. Addison-Wesley, 1994.
2.5.2 卡特兰数 (Catalan Numbers)
卡特兰数 (Catalan Numbers) \( (C_n)_{n \ge 0} \) 是组合数学中非常重要的一个序列,出现在各种不同的计数问题中。序列的前几项为 1, 1, 2, 5, 14, 42, 132, 429, ...。
定义 2.5.1 (卡特兰数):
卡特兰数 \( C_n \) 可以定义为满足以下任一条件的组合对象的计数:
① \( n+1 \) 个叶子的满二叉树 (full binary tree) 的数量。
② \( n \) 对括号正确匹配的方案数。
③ \( n \times n \) 格点中从 \( (0, 0) \) 到 \( (n, n) \) 不越过对角线 \( y = x \) 的路径数。
④ 凸 \( n+2 \) 边形三角剖分 (triangulation) 的数量。
⑤ 序列 \( (a_1, a_2, \ldots, a_{2n}) \),其中有 \( n \) 个 1 和 \( n \) 个 -1,且任意前缀和 \( \sum_{i=1}^{k} a_i \ge 0 \) 的数量。
递推关系 (Recurrence Relation):
卡特兰数满足递推关系:
\[ C_n = \sum_{i=0}^{n-1} C_i C_{n-1-i}, \quad n \ge 1 \]
初始条件 \( C_0 = 1 \)。
生成函数 (Generating Function):
设卡特兰数的普通生成函数 (OGF) 为 \( C(x) = \sum_{n=0}^{\infty} C_n x^n \)。利用递推关系可以推导出 \( C(x) \) 满足的方程:
\[ C(x) = 1 + x C(x)^2 \]
解这个二次方程,得到:
\[ C(x) = \frac{1 \pm \sqrt{1 - 4x}}{2x} \]
由于 \( C(0) = C_0 = 1 \),当 \( x \to 0 \) 时,\( C(x) \) 应有限。取负号才能满足条件:
\[ C(x) = \frac{1 - \sqrt{1 - 4x}}{2x} \]
这就是卡特兰数的生成函数。
通项公式 (Closed Form Formula):
利用广义二项式定理 (Generalized Binomial Theorem) 展开 \( \sqrt{1 - 4x} = (1 - 4x)^{1/2} \),可以得到卡特兰数的通项公式:
\[ C_n = \frac{1}{n+1} \binom{2n}{n} \]
生成函数的应用:
生成函数可以用来分析卡特兰数的性质,例如渐近行为、与其他组合序列的关系等。卡特兰数在组合数学、计算机科学、概率论等领域都有广泛的应用。
参考文献:
⚝ Richard P. Stanley. Enumerative Combinatorics, Volume 2. Cambridge University Press, 1999.
⚝ Martin Gardner. "Mathematical Games". Scientific American, June 1976.
3. chapter 3: 容斥原理与反演 (Inclusion-Exclusion Principle and Inversion)
3.1 容斥原理 (Inclusion-Exclusion Principle)
3.1.1 容斥原理的公式及其证明 (Formula and Proof of Inclusion-Exclusion Principle)
容斥原理 (Inclusion-Exclusion Principle),是组合数学中一个非常重要且基础的计数原理。它提供了一种计算若干个集合并集大小的方法,尤其在直接计数较为困难时,容斥原理往往能提供简洁有效的解决方案。其核心思想是“先加后减,交替进行”,以避免重复计数和遗漏计数。
公式
设 \(S_1, S_2, \ldots, S_n\) 为有限集合 \(S\) 的子集。容斥原理给出了计算这些子集并集大小 \(|\bigcup_{i=1}^{n} S_i|\) 的公式:
\[ \left| \bigcup_{i=1}^{n} S_i \right| = \sum_{i} |S_i| - \sum_{i 更紧凑的表示形式为: \[ \left| \bigcup_{i=1}^{n} S_i \right| = \sum_{\emptyset \neq I \subseteq \{1, 2, \ldots, n\}} (-1)^{|I|-1} \left| \bigcap_{i \in I} S_i \right| \] 其中,\(I\) 是指标集 \(\{1, 2, \ldots, n\}\) 的非空子集,\(\bigcap_{i \in I} S_i\) 表示所有指标在 \(I\) 中的集合的交集。当 \(I = \{i\}\) 时,\(\bigcap_{i \in I} S_i = S_i\)。 证明 我们从元素的角度来证明容斥原理的正确性。考虑任意元素 \(x \in \bigcup_{i=1}^{n} S_i\)。假设元素 \(x\) 属于 \(k\) 个集合,不妨设这 \(k\) 个集合为 \(S_{i_1}, S_{i_2}, \ldots, S_{i_k}\),其中 \(1 \le k \le n\)。我们需要证明在公式的右侧,元素 \(x\) 被计数的次数恰好为 1。 在公式右侧的各项中,元素 \(x\) 会被计数的情况如下: ① 在 \(\sum_{i} |S_i|\) 中,由于 \(x\) 属于 \(k\) 个集合,所以 \(x\) 被计数 \(C(k, 1) = k\) 次。 因此,元素 \(x\) 在公式右侧总共被计数的次数为: \[ C(k, 1) - C(k, 2) + C(k, 3) - \cdots + (-1)^{k-1} C(k, k) = \sum_{i=1}^{k} (-1)^{i-1} C(k, i) \] 我们知道二项式定理 \((x+y)^k = \sum_{i=0}^{k} C(k, i) x^{k-i} y^i\)。令 \(x=1, y=-1\),则有: \[ (1-1)^k = \sum_{i=0}^{k} C(k, i) (1)^{k-i} (-1)^i = \sum_{i=0}^{k} (-1)^i C(k, i) = C(k, 0) - C(k, 1) + C(k, 2) - \cdots + (-1)^k C(k, k) \] 当 \(k \ge 1\) 时,\((1-1)^k = 0^k = 0\)。因此, \[ C(k, 0) - C(k, 1) + C(k, 2) - \cdots + (-1)^k C(k, k) = 0 \] 移项得到: \[ C(k, 1) - C(k, 2) + C(k, 3) - \cdots + (-1)^{k-1} C(k, k) = C(k, 0) = 1 \] 所以,元素 \(x\) 在公式右侧被计数的总次数为 1。如果元素 \(x \notin \bigcup_{i=1}^{n} S_i\),则 \(x\) 不属于任何一个 \(S_i\),那么在公式右侧的每一项中,包含交集运算的集合都不包含 \(x\),因此 \(x\) 被计数的次数为 0。 综上所述,容斥原理公式的右侧精确地计算了并集 \(\bigcup_{i=1}^{n} S_i\) 的大小,每个属于并集的元素被计数一次,而不属于并集的元素被计数零次。证毕。 容斥原理在组合计数中有着广泛的应用,尤其适用于解决带有“至少”、“至多”等限制条件的计数问题。以下列举几个典型的应用场景。 ① 具有若干性质的元素计数 设全集 \(U\),我们关心具有性质 \(P_1, P_2, \ldots, P_n\) 的元素个数。设 \(A_i\) 是 \(U\) 中具有性质 \(P_i\) 的元素构成的集合。我们想要计算不具有任何性质 \(P_1, P_2, \ldots, P_n\) 的元素个数,即求 \(|\overline{A_1} \cap \overline{A_2} \cap \cdots \cap \overline{A_n}|\),其中 \(\overline{A_i} = U \setminus A_i\) 表示 \(A_i\) 的补集。 根据德摩根定律 (De Morgan's laws),我们有: \[ \overline{A_1} \cap \overline{A_2} \cap \cdots \cap \overline{A_n} = \overline{A_1 \cup A_2 \cup \cdots \cup A_n} = U \setminus (A_1 \cup A_2 \cup \cdots \cup A_n) \] 因此,不具有任何性质的元素个数为: \[ |\overline{A_1} \cap \overline{A_2} \cap \cdots \cap \overline{A_n}| = |U| - |A_1 \cup A_2 \cup \cdots \cup A_n| \] 利用容斥原理展开 \(|A_1 \cup A_2 \cup \cdots \cup A_n|\),即可得到答案。 例 1: 求 1 到 1000 中,不能被 2, 3, 5 整除的整数个数。 解:设全集 \(U = \{1, 2, \ldots, 1000\}\),\(P_1\) 为能被 2 整除,\(P_2\) 为能被 3 整除,\(P_3\) 为能被 5 整除。 \(|U| = 1000\) 根据容斥原理: 因此,不能被 2, 3, 5 整除的整数个数为: ② 错位排列问题 (Derangement Problems) 错位排列问题是容斥原理的经典应用之一。 定义: 给定 \(n\) 个元素的一个排列,若其中任何一个元素都不在自己原来的位置上,则称这个排列为这 \(n\) 个元素的错位排列 (derangement),也称为乱序排列或不完全排列。 设 \(D_n\) 表示 \(n\) 个元素的错位排列数。我们可以用容斥原理来计算 \(D_n\)。 设全集 \(U\) 为所有 \(n\) 个元素的排列,\(|U| = n!\)。设性质 \(P_i\) 为第 \(i\) 个元素在第 \(i\) 个位置上(\(1 \le i \le n\))。设 \(A_i\) 为满足性质 \(P_i\) 的排列集合。我们要求的是不满足任何性质 \(P_1, P_2, \ldots, P_n\) 的排列数,即 \(|\overline{A_1} \cap \overline{A_2} \cap \cdots \cap \overline{A_n}|\)。 \(|A_i|\) 表示第 \(i\) 个元素固定在第 \(i\) 个位置,其余 \(n-1\) 个元素任意排列,所以 \(|A_i| = (n-1)!\)。 根据容斥原理: 其中,\(\sum_{i} |A_i|\) 项共有 \(C(n, 1)\) 项,每项为 \((n-1)!\)。 所以, 由于 \(C(n, k) = \frac{n!}{k!(n-k)!}\),所以 \(C(n, k)(n-k)! = \frac{n!}{k!}\)。 \[ |A_1 \cup A_2 \cup \cdots \cup A_n| = \frac{n!}{1!} - \frac{n!}{2!} + \frac{n!}{3!} - \cdots + (-1)^{n-1} \frac{n!}{n!} = n! \left( \frac{1}{1!} - \frac{1}{2!} + \frac{1}{3!} - \cdots + (-1)^{n-1} \frac{1}{n!} \right) \] 错位排列数 \(D_n = |\overline{A_1} \cap \overline{A_2} \cap \cdots \cap \overline{A_n}| = |U| - |A_1 \cup A_2 \cup \cdots \cup A_n|\) \[ D_n = n! - n! \left( \frac{1}{1!} - \frac{1}{2!} + \frac{1}{3!} - \cdots + (-1)^{n-1} \frac{1}{n!} \right) = n! \left( 1 - \frac{1}{1!} + \frac{1}{2!} - \frac{1}{3!} + \cdots + (-1)^{n} \frac{1}{n!} \right) \] \[ D_n = n! \sum_{k=0}^{n} \frac{(-1)^k}{k!} \] ③ 棋盘多项式 (Rook Polynomial) 容斥原理还可以应用于计算棋盘多项式,这在限制位置的排列计数问题中非常有用。 我们在 3.1.2 节已经介绍了错位排列问题,并使用容斥原理推导出了错位排列数的公式。这里我们再深入探讨一些错位排列的性质和应用。 错位排列数的递推公式 错位排列数 \(D_n\) 还可以通过递推关系计算。考虑第 \(n\) 个元素,设其原位置为 \(n\)。在错位排列中,第 \(n\) 个元素不能放在位置 \(n\)。假设第 \(n\) 个元素放在了位置 \(k\) (\(1 \le k \le n-1\))。此时有两种情况: ① 位置 \(k\) 上的元素恰好放在了位置 \(n\)。那么剩下的 \(n-2\) 个元素只需要进行错位排列,方案数为 \(D_{n-2}\)。因为位置 \(n\) 和位置 \(k\) 的元素已经互相“错位”了,剩下的问题等价于 \(n-2\) 个元素的错位排列。 由于第 \(n\) 个元素可以放在 \(n-1\) 个位置中的任意一个,所以总的递推公式为: \[ D_n = (n-1) (D_{n-1} + D_{n-2}), \quad n \ge 3 \] 初始条件:\(D_1 = 0\),\(D_2 = 1\)。 例如: 错位排列数的近似值 从容斥原理得到的公式 \(D_n = n! \sum_{k=0}^{n} \frac{(-1)^k}{k!}\) 可以看出,当 \(n\) 较大时,\(D_n\) 近似于 \(\frac{n!}{e}\),其中 \(e = \sum_{k=0}^{\infty} \frac{1}{k!}\) 是自然常数。 更精确地,由于泰勒展开式 \(e^{-1} = \sum_{k=0}^{\infty} \frac{(-1)^k}{k!}\),所以 \(\frac{D_n}{n!} = \sum_{k=0}^{n} \frac{(-1)^k}{k!}\) 是 \(e^{-1}\) 的部分和。当 \(n \to \infty\) 时,\(\frac{D_n}{n!} \to e^{-1}\)。 因此,对于较大的 \(n\),\(D_n \approx \frac{n!}{e}\)。由于 \(D_n\) 必须是整数,所以 \(D_n\) 是最接近 \(\frac{n!}{e}\) 的整数。 错位排列的应用 错位排列在很多实际问题中都有应用,例如: ① 信封问题: 将 \(n\) 封信放入 \(n\) 个已写好地址的信封中,要求每封信都不能放入自己的信封,问有多少种放法?答案就是 \(D_n\)。 错位排列问题不仅是容斥原理的经典例题,也是组合数学中一个重要的计数模型,它体现了组合数学在解决实际问题中的应用价值。 为了理解莫比乌斯反演 (Möbius Inversion),我们需要先引入偏序集 (Partially Ordered Sets, POSETs) 和关联代数 (Incidence Algebra) 的概念。 偏序集 (Partially Ordered Set) 定义: 设 \(P\) 是一个集合,\(\preceq\) 是 \(P\) 上的一个二元关系。如果 \(\preceq\) 满足以下三个性质,则称 \((P, \preceq)\) 为一个偏序集,\(\preceq\) 称为 \(P\) 上的一个偏序关系。 例子: 关联代数 (Incidence Algebra) 设 \((P, \preceq)\) 是一个局部有限偏序集 (Locally Finite POSET),即对于任意 \(x, y \in P\),区间 \([x, y] = \{z \in P \mid x \preceq z \preceq y\}\) 是有限集。 定义: 偏序集 \(P\) 上的关联代数 \(I(P)\) 是由所有函数 \(f: P \times P \to \mathbb{C}\) 构成的集合,其中如果 \(x \not\preceq y\),则 \(f(x, y) = 0\)。关联代数上的运算定义如下: ① 加法: \((f+g)(x, y) = f(x, y) + g(x, y)\) 可以验证,在这些运算下,\(I(P)\) 构成一个结合代数 (Associative Algebra)。 狄拉克 \(\delta\) 函数 (Delta Function) 或单位元 (Identity Element) 关联代数 \(I(P)\) 的单位元 \(\delta\) 定义为: \[ \delta(x, y) = \begin{cases} 1, & \text{if } x = y \\ 0, & \text{if } x \neq y \end{cases} \] 对于任意 \(f \in I(P)\),有 \((\delta * f)(x, y) = (f * \delta)(x, y) = f(x, y)\)。 zeta 函数 \(\zeta\) (Zeta Function) zeta 函数 \(\zeta \in I(P)\) 定义为: \[ \zeta(x, y) = \begin{cases} 1, & \text{if } x \preceq y \\ 0, & \text{if } x \not\preceq y \end{cases} \] zeta 函数在关联代数中扮演着重要的角色,莫比乌斯函数就是通过 zeta 函数定义的。 定义: 偏序集 \(P\) 上的莫比乌斯函数 \(\mu \in I(P)\) 是 zeta 函数 \(\zeta\) 在卷积意义下的逆元,即 \(\mu * \zeta = \zeta * \mu = \delta\)。 展开卷积的定义,莫比乌斯函数 \(\mu\) 满足: \[ (\mu * \zeta)(x, y) = \sum_{x \preceq z \preceq y} \mu(x, z) \zeta(z, y) = \delta(x, y) \] \[ (\zeta * \mu)(x, y) = \sum_{x \preceq z \preceq y} \zeta(x, z) \mu(z, y) = \delta(x, y) \] 莫比乌斯函数的计算 根据 \(\mu * \zeta = \delta\) 的定义,我们可以推导出莫比乌斯函数的计算方法。 当 \(x = y\) 时,\(\sum_{x \preceq z \preceq x} \mu(x, z) \zeta(z, x) = \mu(x, x) \zeta(x, x) = \mu(x, x) \cdot 1 = 1\),所以 \(\mu(x, x) = 1\)。 当 \(x < y\) 时,\(\sum_{x \preceq z \preceq y} \mu(x, z) \zeta(z, y) = 0\)。展开求和式: \[ \mu(x, x) \zeta(x, y) + \sum_{x < z \preceq y} \mu(x, z) \zeta(z, y) = 0 \] 由于 \(\zeta(x, y) = 1\) 当 \(x \preceq y\),\(\mu(x, x) = 1\),所以: \[ 1 + \sum_{x < z \preceq y} \mu(x, z) = 0 \] \[ \mu(x, y) = - \sum_{x \preceq z < y} \mu(x, z), \quad \text{for } x < y \] 同理,从 \(\zeta * \mu = \delta\) 可以得到: \[ \mu(x, y) = - \sum_{x < z \preceq y} \mu(z, y), \quad \text{for } x < y \] 利用这些公式,我们可以递归地计算莫比乌斯函数的值。 特殊偏序集上的莫比乌斯函数 ① 正整数集上的整除关系 \(( \mathbb{N}^+, |)\) 对于正整数 \(n\),其莫比乌斯函数 \(\mu(n)\) 定义为: \[ \mu(n) = \begin{cases} 1, & \text{if } n = 1 \\ (-1)^k, & \text{if } n = p_1 p_2 \cdots p_k, \text{其中 } p_i \text{ 是互异素数} \\ 0, & \text{if } n \text{ 含有平方因子} \end{cases} \] 例如: 性质: 莫比乌斯函数 \(\mu(n)\) 是积性函数 (multiplicative function),即如果 \(\text{gcd}(m, n) = 1\),则 \(\mu(mn) = \mu(m) \mu(n)\)。 ② 布尔代数 (Boolean Algebra) \((2^S, \subseteq)\) 对于集合 \(S\) 的幂集 \(2^S\) 上的包含关系 \(\subseteq\),莫比乌斯函数为: \[ \mu(A, B) = \begin{cases} (-1)^{|B \setminus A|}, & \text{if } A \subseteq B \\ 0, & \text{if } A \not\subseteq B \end{cases} \] 其中 \(B \setminus A\) 表示集合差。 莫比乌斯反演公式 (Möbius Inversion Formula) 设 \((P, \preceq)\) 是一个局部有限偏序集,\(f, g\) 是定义在 \(P\) 上的函数(取值在复数域 \(\mathbb{C}\))。 定理: 以下两个条件等价: 证明: (2) \(\Rightarrow\) (1): 常用形式 ① 算术形式 (对于整除关系) 设 \(f, g\) 是数论函数。以下两个条件等价: 例 2: 设 \(\varphi(n)\) 是欧拉函数 (Euler's totient function),表示不超过 \(n\) 且与 \(n\) 互质的正整数个数。我们知道 \(\sum_{d|n} \varphi(d) = n\)。利用莫比乌斯反演公式,可以得到 \(\varphi(n)\) 的表达式。 令 \(g(n) = n\),\(f(n) = \varphi(n)\)。根据莫比乌斯反演公式,有: \[ \varphi(n) = \sum_{d|n} \mu(d) g\left(\frac{n}{d}\right) = \sum_{d|n} \mu(d) \frac{n}{d} = n \sum_{d|n} \frac{\mu(d)}{d} \] 利用莫比乌斯函数的性质,可以进一步得到 \(\varphi(n)\) 的素因子分解表达式: \[ \varphi(n) = n \prod_{p|n, p \text{ is prime}} \left( 1 - \frac{1}{p} \right) \] ② 集合形式 (对于包含关系) 设 \(U\) 是一个有限集,\(f, g\) 是定义在 \(2^U\) 上的函数。以下两个条件等价: 应用举例 莫比乌斯反演在数论、组合计数、图论等领域都有广泛的应用。例如,在计算某些计数问题时,有时直接计数比较困难,但计算“和函数” \(g(n) = \sum_{d|n} f(d)\) 比较容易,这时可以通过莫比乌斯反演公式反解出 \(f(n)\)。 在图论中,莫比乌斯反演可以用于计算图的连通性,例如计算连通图的个数。在代数组合学中,莫比乌斯反演是研究偏序集结构的重要工具。 拉格朗日反演公式 (Lagrange Inversion Formula) 是组合数学中一个强大的工具,用于求解复合函数的反函数,并在生成函数理论和组合计数中有着重要的应用。它可以看作是分析学中的反函数定理在形式幂级数 (formal power series) 意义下的推广。 形式幂级数 (Formal Power Series) 形式幂级数是指形如 \(A(x) = \sum_{n=0}^{\infty} a_n x^n\) 的表达式,我们关注的是系数序列 \(\{a_n\}_{n \ge 0}\),而不关心收敛性。形式幂级数可以进行加法、乘法、复合等运算。 复合与反函数 设 \(F(x) = \sum_{n=1}^{\infty} f_n x^n\) 和 \(G(x) = \sum_{n=1}^{\infty} g_n x^n\) 是两个形式幂级数,且 \(f_1 \neq 0\)。我们考虑复合 \(G(F(x))\)。如果存在形式幂级数 \(F^{-1}(x)\) 使得 \(F(F^{-1}(x)) = F^{-1}(F(x)) = x\),则称 \(F^{-1}(x)\) 为 \(F(x)\) 的反函数。 拉格朗日反演公式 定理: 设 \(F(x)\) 和 \(G(x)\) 是形式幂级数,满足 \(F(G(x)) = x\) 且 \(F(x) = \sum_{n=1}^{\infty} f_n x^n\),\(G(x) = \sum_{n=1}^{\infty} g_n x^n\)。则对于任意形式幂级数 \(H(x)\),有: \[ [x^n] H(G(x)) = \frac{1}{n} [x^{n-1}] (H'(x) \Phi(x)^n) \] 其中 \(\Phi(x) = x / F(x)\),\(H'(x)\) 是 \(H(x)\) 的形式导数,\([x^n] A(x)\) 表示形式幂级数 \(A(x)\) 中 \(x^n\) 项的系数。 特殊情况: 当 \(H(x) = x\) 时,\(H'(x) = 1\),则: \[ [x^n] G(x) = g_n = \frac{1}{n} [x^{n-1}] (\Phi(x)^n) = \frac{1}{n} [x^{n-1}] \left( \frac{x}{F(x)} \right)^n \] 这个公式给出了反函数 \(G(x)\) 的系数 \(g_n\) 的计算方法。 另一种形式的拉格朗日反演公式 设 \(y = x \Phi(y)\),其中 \(\Phi(t)\) 是形式幂级数且 \(\Phi(0) \neq 0\)。则对于任意形式幂级数 \(H(y)\),有: \[ [y^n] H(y) = \frac{1}{n} [x^{n-1}] (H'(x \Phi(x)) \Phi(x)^n) \] 更常用的形式是取 \(H(y) = y^m\),其中 \(m\) 为整数。此时 \(H'(y) = m y^{m-1}\)。 \[ [y^n] y^m = \begin{cases} 1, & \text{if } n = m \\ 0, & \text{if } n \neq m \end{cases} = \frac{1}{n} [x^{n-1}] (m (x \Phi(x))^{m-1} \Phi(x)^n) = \frac{m}{n} [x^{n-1}] (x^{m-1} \Phi(x)^{n+m-1}) \] 当 \(m \neq 0\) 时, \[ [y^n] y^m = \frac{m}{n} [x^{n-m}] \Phi(x)^{n+m-1} \] 当 \(m = 1\) 时, \[ [y^n] y = \begin{cases} 1, & \text{if } n = 1 \\ 0, & \text{if } n \neq 1 \end{cases} = \frac{1}{n} [x^{n-1}] \Phi(x)^n \] 拉格朗日反演公式在组合计数中有很多重要的应用,尤其是在解决树的计数、路径计数、以及其他复杂的组合结构计数问题时。 ① 树的计数 (Tree Counting) 卡特兰数 (Catalan Numbers) 的生成函数 考虑卡特兰数 \(C_n\) 的生成函数 \(C(x) = \sum_{n=0}^{\infty} C_n x^n\)。我们知道卡特兰数满足递推关系 \(C_{n+1} = \sum_{i=0}^{n} C_i C_{n-i}\),\(C_0 = 1\)。对应的生成函数方程为 \(C(x) = 1 + x C(x)^2\),即 \(C(x) - x C(x)^2 = 1\)。 我们可以将方程改写为 \(C(x) = \frac{1}{1 - x C(x)}\)。令 \(y = x C(x)\),则 \(C(x) = \frac{1}{1 - y}\)。代入 \(y = x C(x)\) 得到 \(y = \frac{x}{1 - y}\),即 \(y(1 - y) = x\),\(y = x(1 - y)^{-1}\)。 这里 \(\Phi(y) = (1 - y)^{-1} = \sum_{k=0}^{\infty} y^k\)。根据拉格朗日反演公式,\(y = G(x)\),\(F(y) = \frac{y}{ \Phi(y) } = y(1 - y)\)。 \[ C_n = [x^n] C(x) = [x^n] \frac{y}{x} = [x^{n+1}] y = [x^{n+1}] G(x) = \frac{1}{n+1} [x^n] \Phi(x)^{n+1} = \frac{1}{n+1} [x^n] (1 - x)^{-(n+1)} \] 利用广义二项式定理 \((1 - x)^{-\alpha} = \sum_{k=0}^{\infty} C(\alpha + k - 1, k) x^k\),其中 \(\alpha = n+1\),\(k = n\)。 \[ C_n = \frac{1}{n+1} C((n+1) + n - 1, n) = \frac{1}{n+1} C(2n, n) = \frac{1}{n+1} \binom{2n}{n} \] ② 根树计数 (Rooted Tree Counting) 设 \(T_n\) 是具有 \(n\) 个顶点的有根树的个数。设 \(T(x) = \sum_{n=1}^{\infty} T_n x^n\) 是有根树的生成函数。一个有根树可以看作是一个根节点,连接着若干棵有根树(子树)。因此,生成函数方程为 \(T(x) = x e^{T(x)}\)。 即 \(T(x) / e^{T(x)} = x\)。令 \(F(y) = y e^{-y}\),\(G(x) = T(x)\)。则 \(F(G(x)) = x\)。\(\Phi(y) = y / F(y) = e^y\)。 \[ T_n = [x^n] T(x) = [x^n] G(x) = \frac{1}{n} [x^{n-1}] \Phi(x)^n = \frac{1}{n} [x^{n-1}] (e^x)^n = \frac{1}{n} [x^{n-1}] e^{nx} \] 由于 \(e^{nx} = \sum_{k=0}^{\infty} \frac{(nx)^k}{k!} = \sum_{k=0}^{\infty} \frac{n^k}{k!} x^k\),所以 \(x^{n-1}\) 项的系数为 \(\frac{n^{n-1}}{(n-1)!}\)。 \[ T_n = \frac{1}{n} \frac{n^{n-1}}{(n-1)!} = \frac{n^{n-2}}{(n-1)!} \cdot n = \frac{n^{n-1}}{n!} \cdot n = \frac{n^{n-1}}{(n-1)!} \cdot \frac{1}{n} = \frac{n^{n-1}}{n!} \] 正确的推导应该是: 正确的拉格朗日反演应用: 正确的理解: 应该是 \(T_n = n^{n-1}\)。 检查公式和推导过程。 拉格朗日反演公式在组合计数中是一个非常强大的工具,可以用来解决各种复杂的计数问题,尤其是在涉及生成函数和反函数关系时。理解和掌握拉格朗日反演公式,对于深入研究组合数学具有重要意义。 图论 (Graph Theory) 是组合数学的一个重要分支,它研究的是图 (Graph) 的性质与应用。图是由顶点 (Vertex) 和边 (Edge) 构成的结构,用于描述对象之间的关系。 定义 4.1.1 (图的定义):一个图 \(G\) 是一个有序对 \(G = (V, E)\),其中 \(V\) 是顶点集 (Vertex Set),\(E\) 是边集 (Edge Set)。顶点集 \(V\) 是一个非空有限集合,边集 \(E\) 是由 \(V\) 中顶点对构成的集合。 根据边的不同性质,图可以分为以下几种类型: ① 无向图 (Undirected Graph):边是无序对 \(\{u, v\}\),表示顶点 \(u\) 和顶点 \(v\) 之间存在一条边,边没有方向。在无向图中,边 \(\{u, v\}\) 和边 \(\{v, u\}\) 是相同的。 在本书中,如果没有特别说明,我们主要讨论简单图和无向图。 图的表示 (Representation of Graphs):为了在计算机中存储和处理图,我们需要将图结构进行表示。常用的图的表示方法有以下几种: ① 邻接矩阵 (Adjacency Matrix):设图 \(G = (V, E)\),其中 \(V = \{v_1, v_2, \ldots, v_n\}\)。邻接矩阵 \(A\) 是一个 \(n \times n\) 的矩阵,其中 \(A_{ij}\) 表示顶点 \(v_i\) 和顶点 \(v_j\) 之间的邻接关系。 对于无向图: ② 邻接表 (Adjacency List):对于图 \(G = (V, E)\),邻接表为每个顶点 \(v \in V\) 维护一个列表,列表中存储与顶点 \(v\) 相邻的所有顶点。 对于无向图,如果 \(\{u, v\} \in E\),则在顶点 \(u\) 的邻接表中包含 \(v\),在顶点 \(v\) 的邻接表中包含 \(u\)。 邻接表的优点是空间复杂度低,对于稀疏图非常节省空间。缺点是不易于快速判断两个顶点是否相邻,需要遍历邻接表。 示例 4.1.1:考虑一个无向图 \(G = (V, E)\),其中 \(V = \{1, 2, 3, 4\}\),\(E = \{\{1, 2\}, \{1, 3\}, \{2, 3\}, \{3, 4\}\}\)。 该图的邻接矩阵表示为: 该图的邻接表表示为: 定义 4.1.2 (顶点的度):在一个无向图 \(G = (V, E)\) 中,顶点 \(v\) 的度 (Degree) \(d(v)\) 是指与顶点 \(v\) 相连的边的数目。对于包含环的图,环对顶点的度贡献为 2。 在有向图 \(G = (V, E)\) 中,顶点 \(v\) 的入度 (In-degree) \(d_{in}(v)\) 是指以顶点 \(v\) 为终点的边的数目,出度 (Out-degree) \(d_{out}(v)\) 是指以顶点 \(v\) 为起点的边的数目。顶点 \(v\) 的度 \(d(v) = d_{in}(v) + d_{out}(v)\)。 定理 4.1.1 (握手定理 - Handshaking Theorem):对于任意图 \(G = (V, E)\),所有顶点的度之和等于边数的两倍。 证明 (握手定理):在计算所有顶点的度之和时,每条边 \(\{u, v\}\) (或 \((u, v)\)) 都被计算了两次,一次在顶点 \(u\) 的度中,一次在顶点 \(v\) 的度中。因此,所有顶点的度之和等于边数的两倍。 推论 4.1.1:在任何图中,度数为奇数的顶点个数一定是偶数。 证明 (推论 4.1.1):由握手定理 \(\sum_{v \in V} d(v) = 2|E|\) 可知,所有顶点的度之和为偶数。假设度数为奇数的顶点个数为奇数,则奇数个奇数之和为奇数,与度数之和为偶数矛盾。因此,度数为奇数的顶点个数必须是偶数。 示例 4.1.2:对于示例 4.1.1 中的无向图 \(G\),各顶点的度分别为:\(d(1) = 2\),\(d(2) = 2\),\(d(3) = 3\),\(d(4) = 1\)。度数之和为 \(2 + 2 + 3 + 1 = 8\),边数为 4,满足握手定理 \(8 = 2 \times 4\)。度数为奇数的顶点为顶点 3 和顶点 4,共 2 个,为偶数。 定义 4.1.3 (子图 - Subgraph):图 \(G' = (V', E')\) 是图 \(G = (V, E)\) 的子图,如果 \(V' \subseteq V\) 且 \(E' \subseteq E\),并且 \(E'\) 中的每条边的端点都在 \(V'\) 中。 定义 4.1.4 (生成子图 - Spanning Subgraph):如果子图 \(G' = (V', E')\) 满足 \(V' = V\),则称 \(G'\) 是 \(G\) 的生成子图。生成子图包含原图的所有顶点。 定义 4.1.5 (导出子图/诱导子图 - Induced Subgraph):给定图 \(G = (V, E)\) 和顶点子集 \(V' \subseteq V\),导出子图 \(G[V'] = (V', E')\) 的边集 \(E'\) 包含所有在 \(E\) 中且两个端点都在 \(V'\) 中的边。即 \(E' = \{\{u, v\} \in E \mid u, v \in V'\}\) (对于无向图) 或 \(E' = \{(u, v) \in E \mid u, v \in V'\}\) (对于有向图)。 定义 4.1.6 (图的同构 - Graph Isomorphism):两个图 \(G_1 = (V_1, E_1)\) 和 \(G_2 = (V_2, E_2)\) 是同构的 (Isomorphic),如果存在一个双射函数 (Bijective Function) \(f: V_1 \rightarrow V_2\),使得对于任意顶点 \(u, v \in V_1\),\(\{u, v\} \in E_1\) 当且仅当 \(\{f(u), f(v)\} \in E_2\) (对于无向图) 或 \((u, v) \in E_1\) 当且仅当 \((f(u), f(v)) \in E_2\) (对于有向图)。如果 \(G_1\) 和 \(G_2\) 同构,记作 \(G_1 \cong G_2\)。 简单来说,图的同构意味着两个图在结构上是相同的,只是顶点的名称可能不同。判断两个图是否同构是一个复杂的问题,目前没有通用的高效算法。 判断图同构的必要条件:如果两个图 \(G_1 = (V_1, E_1)\) 和 \(G_2 = (V_2, E_2)\) 同构,则它们必须满足以下条件: ① 顶点数相同:\(|V_1| = |V_2|\)。 这些条件是图同构的必要条件,但不是充分条件。即满足这些条件的两个图不一定是同构的。 示例 4.1.3:考虑两个图 \(G_1\) 和 \(G_2\),顶点集都为 \(V = \{1, 2, 3, 4\}\)。 \(G_1\) 是一个 4-圈 (4-cycle),\(G_2\) 是一个星图 (Star Graph) 加上一条边。 示例 4.1.4:考虑两个图 \(G_3\) 和 \(G_4\),顶点集都为 \(V = \{1, 2, 3, 4, 5, 6\}\)。 两个图的顶点数和边数都为 8。 ① 完全图 (Complete Graph):一个简单图,其中任意两个不同的顶点之间都存在边。\(n\) 个顶点的完全图记作 \(K_n\)。\(K_n\) 的边数为 \(C(n, 2) = \frac{n(n-1)}{2}\)。每个顶点的度数为 \(n-1\)。 ② 二分图 (Bipartite Graph):一个图 \(G = (V, E)\),其顶点集 \(V\) 可以划分为两个不相交的子集 \(V_1\) 和 \(V_2\),使得图中的每条边 \(\{u, v\}\) 都满足 \(u \in V_1\) 且 \(v \in V_2\),或 \(u \in V_2\) 且 \(v \in V_1\)。即二分图的边都连接两个划分集合中的顶点,集合内部没有边。如果 \(|V_1| = m\),\(|V_2| = n\),则完全二分图 (Complete Bipartite Graph) 记作 \(K_{m, n}\),其边数为 \(m \times n\)。 定理 4.2.1 (二分图的判定):一个图是二分图当且仅当它不包含奇圈 (Odd Cycle)。 ③ 正则图 (Regular Graph):一个图,其中所有顶点的度数都相同。如果所有顶点的度数都为 \(k\),则称该图为 \(k\)-正则图 (k-Regular Graph)。完全图 \(K_n\) 是 \((n-1)\)-正则图。圈 \(C_n\) 是 2-正则图。 示例 4.2.1: ① 路径 (Path):图中的一条路径是指一个顶点序列 \(v_1, v_2, \ldots, v_k\),使得对于任意 \(1 \le i \le k-1\),\(\{v_i, v_{i+1}\} \in E\) (对于无向图) 或 \((v_i, v_{i+1}) \in E\) (对于有向图)。路径的长度 (Length) 是指路径上边的数目,即 \(k-1\)。简单路径 (Simple Path) 是指路径中所有顶点都不同的路径。 ② 圈 (Cycle):图中的一个圈是指一个顶点序列 \(v_1, v_2, \ldots, v_k, v_1\) (其中 \(k \ge 3\)),使得 \(v_1, v_2, \ldots, v_k\) 构成一条路径,且 \(\{v_k, v_1\} \in E\) (对于无向图) 或 \((v_k, v_1) \in E\) (对于有向图)。圈的长度 (Length) 是指圈上边的数目,即 \(k\)。简单圈 (Simple Cycle) 是指圈中除了 \(v_1\) 和 \(v_k\) 相同外,所有顶点都不同的圈。长度为奇数的圈称为奇圈 (Odd Cycle),长度为偶数的圈称为偶圈 (Even Cycle)。 示例 4.2.2:在一个正方形图中,顶点序列 1-2-3-4-1 构成一个长度为 4 的圈。顶点序列 1-2-3 构成一条长度为 2 的路径。 定义 4.3.1 (连通性 - Connectivity):在一个无向图 \(G = (V, E)\) 中,如果对于任意两个顶点 \(u, v \in V\),都存在一条从 \(u\) 到 \(v\) 的路径,则称图 \(G\) 是连通图 (Connected Graph)。否则,称图 \(G\) 是非连通图 (Disconnected Graph)。 定义 4.3.2 (连通分量 - Connected Component):对于非连通图 \(G\),可以将图分解成若干个连通的部分,每个连通的部分称为一个连通分量。连通分量是图的极大连通子图 (Maximal Connected Subgraph)。 对于有向图,连通性分为弱连通 (Weakly Connected) 和强连通 (Strongly Connected)。 定义 4.3.3 (弱连通 - Weakly Connected):一个有向图 \(G\) 是弱连通的,如果将有向图的所有有向边替换为无向边后得到的无向图是连通的。 定义 4.3.4 (强连通 - Strongly Connected):一个有向图 \(G\) 是强连通的,如果对于任意两个顶点 \(u, v \in V\),都存在一条从 \(u\) 到 \(v\) 的有向路径,且存在一条从 \(v\) 到 \(u\) 的有向路径。 定义 4.3.5 (强连通分量 - Strongly Connected Component):有向图的强连通分量是图的极大强连通子图。 示例 4.3.1:一个由两个不相连的三角形组成的无向图,包含两个连通分量,每个连通分量是一个三角形。 定义 4.3.6 (割点/关节点 - Cut Vertex/Articulation Point):在一个连通图 \(G\) 中,如果删除某个顶点 \(v\) 以及所有与 \(v\) 相连的边后,图变得不连通,则称顶点 \(v\) 为割点。 定义 4.3.7 (桥/割边 - Bridge):在一个连通图 \(G\) 中,如果删除某条边 \(e\) 后,图变得不连通,则称边 \(e\) 为桥。 割点和桥是图连通性的关键元素,它们的存在与否直接影响图的结构和性质。 示例 4.3.2:在一个路径 \(P_n\) (n >= 3) 中,除了端点外的所有顶点都是割点,所有边都是桥。在一个圈 \(C_n\) (n >= 3) 中,没有割点,也没有桥。 定义 4.4.1 (树 - Tree):一个无圈连通图 (Acyclic Connected Graph) 称为树。森林 (Forest) 是一个无圈图 (Acyclic Graph),即若干棵树的并集。 树的等价定义:以下定义都是等价的: 树的性质: 示例 4.4.1:路径 \(P_n\) 是一棵树。星图 \(K_{1, n}\) 是一棵树。 定义 4.4.2 (生成树 - Spanning Tree):图 \(G = (V, E)\) 的生成树是 \(G\) 的一个生成子图,且该子图是一棵树。 如果图 \(G\) 是连通的,则 \(G\) 至少存在一棵生成树。生成树包含图 \(G\) 的所有顶点,且是连通的,边数最少 (为 \(|V| - 1\))。 寻找生成树的方法:可以使用深度优先搜索 (Depth First Search - DFS) 或广度优先搜索 (Breadth First Search - BFS) 算法来找到连通图的生成树。 最小生成树 (Minimum Spanning Tree - MST):对于带权图 (Weighted Graph),每条边都有一个权重。最小生成树是指图中所有生成树中边权之和最小的生成树。常用的最小生成树算法有 Kruskal 算法和 Prim 算法。 示例 4.4.2:对于一个完全图 \(K_n\),其生成树有很多棵。例如,路径 \(P_n\) 是 \(K_n\) 的一个生成树,星图 \(K_{1, n-1}\) 也是 \(K_n\) 的一个生成树。 定义 4.5.1 (平面图 - Planar Graph):如果一个图可以画在平面上,使得图中任意两条边除了在顶点处相交外,没有其他交点,则称该图为平面图。这样的画法称为图的平面嵌入 (Planar Embedding)。 定义 4.5.2 (平面嵌入 - Planar Embedding):平面图的平面嵌入是指将图的顶点表示为平面上的点,边表示为连接这些点的曲线,使得除了端点外,任意两条曲线互不相交。 面 (Face):平面图的平面嵌入将平面划分为若干个区域,这些区域称为面。包围整个图的无限区域称为外部面 (Outer Face),其他区域称为内部面 (Inner Face)。 欧拉公式 (Euler's Formula):对于连通平面图 \(G = (V, E)\),设 \(|V| = n\),\(|E| = m\),\(f\) 为平面嵌入的面数,则有欧拉公式: 证明 (欧拉公式):使用数学归纳法对边数 \(m\) 进行归纳。 正确的欧拉公式证明思路: 再次更正欧拉公式证明思路: 最终正确的欧拉公式证明思路: 再次最终正确的欧拉公式证明思路: 推论 4.5.1:对于简单连通平面图 \(G\),如果顶点数 \(n \ge 3\),则 \(m \le 3n - 6\)。 证明 (推论 4.5.1):设 \(G\) 是简单连通平面图,每个面至少由 3 条边围成 (因为是简单图,没有环和重边,最短的圈是 3-圈)。设 \(F\) 为面集,\(E\) 为边集。每条边最多属于两个面的边界,每个面的边界至少有 3 条边。因此,\(2|E| \ge 3|F|\),即 \(|F| \le \frac{2}{3}|E|\)。 推论 4.5.2:\(K_5\) 不是平面图。 证明 (推论 4.5.2):对于 \(K_5\),\(n = 5\),\(m = C(5, 2) = 10\)。如果 \(K_5\) 是平面图,则应满足 \(m \le 3n - 6\)。但 \(3n - 6 = 3 \times 5 - 6 = 9\)。\(m = 10 > 9\),不满足条件,因此 \(K_5\) 不是平面图。 推论 4.5.3:\(K_{3, 3}\) 不是平面图。 证明 (推论 4.5.3):对于二分图 \(K_{3, 3}\),没有奇圈,所以每个面至少由 4 条边围成。因此,\(2|E| \ge 4|F|\),即 \(|F| \le \frac{1}{2}|E|\)。 图的嵌入 (Graph Embedding):将图的顶点和边映射到某个表面 (例如平面、球面、环面等) 上,使得边只在顶点处相交。平面图是能够嵌入到平面上的图。 交叉数 (Crossing Number):对于非平面图,无论如何绘制在平面上,都不可避免地存在边交叉。图的交叉数 \(cr(G)\) 是指将图 \(G\) 画在平面上,使得边交叉点数目最少的画法中的交叉点数目。对于平面图,交叉数为 0。 计算图的交叉数是一个非常困难的问题,即使对于一些简单的图,交叉数也难以确定。 图的亏格 (Genus):一个图 \(G\) 的亏格 \(g(G)\) 是指能够嵌入 \(G\) 的最小亏格的闭曲面的亏格。平面和球面的亏格为 0,环面的亏格为 1。平面图的亏格为 0。 示例 4.5.1:\(K_5\) 和 \(K_{3, 3}\) 不是平面图,它们的交叉数大于 0。\(cr(K_5) = 1\),\(cr(K_{3, 3}) = 1\)。 总结:本章介绍了图论的基本概念,包括图的定义与表示、顶点的度、子图与图的同构、特殊类型的图 (完全图、二分图、正则图)、路径与圈、图的连通性 (连通图、连通分量、割点、桥)、树、平面图与图的嵌入 (平面图的定义、欧拉公式、交叉数)。这些基本概念是学习更深入的图论知识的基础。 在图论中,匹配 (Matching) 是图 \( G = (V, E) \) 中没有公共端点的边集合 \( M \subseteq E \)。换句话说,匹配 \( M \) 中的任意两条边都不共享同一个顶点。匹配是组合优化中的一个基本概念,在很多领域都有重要应用,例如任务分配、资源调度等。 对于二分图 (Bipartite Graph) \( G = (U \cup V, E) \),其中顶点集可以划分为两个不相交的集合 \( U \) 和 \( V \),且所有边都连接 \( U \) 中的顶点和 \( V \) 中的顶点。二分图的匹配问题在实际应用中尤为重要。 定义 5.1.1.1 (匹配的大小):匹配 \( M \) 的大小 (Size) 是指匹配中边的数量,记为 \( |M| \)。最大匹配 (Maximum Matching) 是指图中边数最多的匹配。完美匹配 (Perfect Matching) 是指一个匹配 \( M \) ,使得图中的每个顶点都与匹配 \( M \) 中的某条边关联。显然,完美匹配一定是最大匹配,但反之不然。完美匹配只可能在 \( |U| = |V| \) 的二分图中存在。 例 5.1.1.1:考虑一个二分图 \( G = (U \cup V, E) \),其中 \( U = \{u_1, u_2, u_3\} \),\( V = \{v_1, v_2, v_3\} \),边集 \( E = \{(u_1, v_1), (u_1, v_2), (u_2, v_2), (u_2, v_3), (u_3, v_3)\} \)。 增广路径 (Augmenting Path) 是寻找二分图最大匹配的关键概念。 定义 5.1.1.2 (交错路径与增广路径):给定一个匹配 \( M \),交错路径 (Alternating Path) 是指图 \( G \) 中相对于 \( M \) 而言,边交替出现在 \( M \) 和 \( E \setminus M \) 中的路径。增广路径 (Augmenting Path) 是指从 \( U \) 中的未匹配顶点 (Unmatched Vertex) 出发,到 \( V \) 中的未匹配顶点 (Unmatched Vertex) 结束的交错路径。 定理 5.1.1.1 (匹配增广定理):一个匹配 \( M \) 是二分图 \( G \) 的最大匹配,当且仅当 \( G \) 中不存在相对于 \( M \) 的增广路径。 证明思路: 例 5.1.1.2:对于例 5.1.1.1 中的二分图和匹配 \( M_1 = \{(u_1, v_1), (u_2, v_3)\} \)。 更精确的增广路径定义:给定匹配 \( M \),增广路径 \( P = v_1, v_2, \ldots, v_{2k+1} \) 是一个顶点序列,满足: 对于例 5.1.1.1 和 \( M_1 = \{(u_1, v_1), (u_2, v_3)\} \)。未匹配顶点 \( u_3 \in U \) 和 \( v_2 \in V \)。 再次修正增广路径的寻找:从 \( U \) 中的未匹配顶点开始搜索,只走非匹配边到 \( V \),如果到达 \( V \) 中的未匹配顶点,则找到增广路径;如果到达 \( V \) 中的已匹配顶点 \( v \),则必须通过匹配边回到 \( U \) 中的顶点 \( u \),再从 \( u \) 出发继续搜索非匹配边。 对于例 5.1.1.1 和 \( M_1 = \{(u_1, v_1), (u_2, v_3)\} \)。未匹配顶点 \( u_3 \in U \) 和 \( v_2 \in V \)。 利用增广路径 \( P = u_3 - v_3 - u_2 - v_2 \) 来扩充匹配 \( M_1 \)。将 \( P \) 中属于 \( M_1 \) 的边从 \( M_1 \) 中移除,将 \( P \) 中不属于 \( M_1 \) 的边加入到 \( M_1 \) 中。 寻找增广路径的算法:可以使用广度优先搜索 (Breadth-First Search, BFS) 或 深度优先搜索 (Depth-First Search, DFS)。BFS 更常用,因为它能找到最短增广路径,有助于提高算法效率。 算法 5.1.1.1 (二分图最大匹配的增广路径算法 - 基于 BFS): BFS 搜索过程: 霍尔定理 (Hall's Marriage Theorem) 给出了二分图存在完美匹配的充要条件 (Necessary and Sufficient Condition)。这个定理在组合数学中非常经典,有着广泛的应用。 定义 5.1.2.1 (邻域):对于二分图 \( G = (U \cup V, E) \) 和集合 \( A \subseteq U \),定义 \( A \) 的邻域 (Neighborhood) \( N(A) \subseteq V \) 为与 \( A \) 中至少一个顶点相邻的 \( V \) 中顶点的集合。即 \( N(A) = \{v \in V \mid \exists u \in A, (u, v) \in E\} \)。 定理 5.1.2.1 (霍尔定理 - Hall's Theorem):对于二分图 \( G = (U \cup V, E) \),存在从 \( U \) 到 \( V \) 的匹配(即匹配覆盖 \( U \) 中所有顶点的匹配),当且仅当对于任意 \( A \subseteq U \),满足 霍尔条件 (Hall's Condition):\( |N(A)| \ge |A| \)。 证明思路: ② 充分性:假设霍尔条件成立,但不存在从 \( U \) 到 \( V \) 的匹配。设 \( M \) 是 \( G \) 的最大匹配,但 \( M \) 不是从 \( U \) 到 \( V \) 的匹配,即存在 \( U \) 中的未匹配顶点 \( u_0 \)。从 \( u_0 \) 出发,进行交错路径搜索(类似于增广路径算法中的 BFS,但不要求找到 \( V \) 中的未匹配顶点)。 推论 5.1.2.1 (完美匹配的霍尔定理):对于二分图 \( G = (U \cup V, E) \),其中 \( |U| = |V| \),存在完美匹配当且仅当对于任意 \( A \subseteq U \),满足霍尔条件 \( |N(A)| \ge |A| \)。 应用例 5.1.2.1 (婚姻问题):假设有 \( n \) 位男士和 \( n \) 位女士,每位男士对一些女士有好感,每位女士也对一些男士有好感。是否有可能将每位男士都与他有好感的女士结婚,并且每位女士都与她有好感的男士结婚? 除了增广路径算法,还有其他寻找二分图最大匹配的算法,例如 Hopcroft-Karp 算法。Hopcroft-Karp 算法是对增广路径算法的改进,通过同时寻找多条最短增广路径来提高效率。 算法 5.1.3.1 (Hopcroft-Karp 算法): Hopcroft-Karp 算法的关键步骤是找到最大集合的顶点不相交的最短增广路径集合 \( \mathcal{P} \)。 时间复杂度分析:Hopcroft-Karp 算法的时间复杂度为 \( O(\sqrt{|V|} |E|) \),其中 \( |V| \) 是顶点数,\( |E| \) 是边数。在二分图匹配问题中,Hopcroft-Karp 算法通常被认为是效率较高的算法。 非二分图的最大匹配:对于非二分图,寻找最大匹配的问题也存在,但算法更为复杂。著名的算法是 Edmonds' Blossom 算法,也称为 花算法 (Blossom Algorithm)。花算法处理非二分图中的奇圈 (Odd Cycle),通过缩圈等操作来寻找增广路径。花算法的时间复杂度较高,通常为 \( O(|V|^2 |E|) \) 或 \( O(|V|^3) \)。 总结: 覆盖 (Covering) 是图论中与匹配密切相关的概念,主要分为顶点覆盖 (Vertex Cover) 和 边覆盖 (Edge Cover)。 定义 5.2.1.1 (顶点覆盖):给定图 \( G = (V, E) \),顶点覆盖 (Vertex Cover) 是顶点集合 \( C \subseteq V \),使得图 \( G \) 的每条边都至少有一个端点在 \( C \) 中。最小顶点覆盖 (Minimum Vertex Cover) 是指顶点数最少的顶点覆盖。 定义 5.2.1.2 (边覆盖):给定图 \( G = (V, E) \),边覆盖 (Edge Cover) 是边集合 \( L \subseteq E \),使得图 \( G \) 的每个顶点都至少与 \( L \) 中的一条边关联。最小边覆盖 (Minimum Edge Cover) 是指边数最少的边覆盖。 例 5.2.1.1:考虑图 \( G = (V, E) \),其中 \( V = \{1, 2, 3, 4, 5\} \),\( E = \{(1, 2), (1, 3), (2, 3), (2, 4), (3, 5)\} \)。 ⚝ 边集合 \( L_1 = \{(1, 2), (2, 4), (3, 5)\} \) 不是边覆盖,因为顶点 3 没有被 \( L_1 \) 覆盖。 性质 5.2.1.1: 顶点覆盖、边覆盖和匹配之间存在密切的关系。对于二分图,最小顶点覆盖的大小等于最大匹配的大小。对于一般图,也有一些重要的关系。 定理 5.2.2.1 (Konig 定理 - König's Theorem):在二分图中,最小顶点覆盖的大小等于最大匹配的大小。 证明思路: 定理 5.2.2.2 (Gallai 定理 - Gallai's Theorem):对于没有孤立顶点的图 \( G = (V, E) \),设 \( \alpha_0(G) \) 是最小顶点覆盖的大小,\( \beta_0(G) \) 是最大独立集的大小,\( \alpha_1(G) \) 是最小边覆盖的大小,\( \beta_1(G) \) 是最大匹配的大小。则有: 证明思路: 总结: 定义 5.3.1.1 (独立集):给定图 \( G = (V, E) \),独立集 (Independent Set) (或稳定集 (Stable Set)) 是顶点集合 \( I \subseteq V \),使得 \( I \) 中任意两个顶点在图 \( G \) 中都不相邻。最大独立集 (Maximum Independent Set) 是指顶点数最多的独立集。 例 5.3.1.1:考虑图 \( G = (V, E) \),其中 \( V = \{1, 2, 3, 4, 5\} \),\( E = \{(1, 2), (1, 3), (2, 3), (2, 4), (3, 5)\} \)。 寻找最大独立集:寻找最大独立集是一个 NP-完全问题 (NP-Complete Problem)。对于一般图,没有有效的多项式时间算法。但是对于一些特殊类型的图,例如二分图,可以利用最大匹配来求解最大独立集。 顶点覆盖和独立集之间存在互补关系。 定理 5.3.2.1:给定图 \( G = (V, E) \),顶点集合 \( C \subseteq V \) 是顶点覆盖,当且仅当 \( V \setminus C \) 是独立集。 证明思路: 推论 5.3.2.1:对于任意图 \( G = (V, E) \),最大独立集的大小 \( \beta_0(G) \) 等于 \( |V| \) 减去最小顶点覆盖的大小 \( \alpha_0(G) \)。即 \( \beta_0(G) = |V| - \alpha_0(G) \)。 应用:由于 Konig 定理指出在二分图中,最小顶点覆盖的大小等于最大匹配的大小,因此,对于二分图 \( G = (U \cup V, E) \),最大独立集的大小为 \( |U| + |V| - (\text{最大匹配的大小}) \)。 算法 5.3.2.1 (二分图最大独立集算法): 总结: 在图论中,图的着色 (Graph Coloring) 是一个核心概念,它涉及到为图的元素分配“颜色”,并服从一定的约束条件。最常见的着色类型是顶点着色 (Vertex Coloring),即为图 \( G = (V, E) \) 的每个顶点 \( v \in V \) 分配一种颜色,使得任意两个相邻的顶点(即存在边相连的顶点)颜色互不相同。一个k-顶点着色 (k-Vertex Coloring) 就是使用 \( k \) 种颜色对图进行顶点着色。如果存在一个对图 \( G \) 的 \( k \)-顶点着色,则称图 \( G \) 是 k-可着色的 (k-Colorable)。 定义 6.1.1.1 (正常顶点着色, Proper Vertex Coloring): 换句话说,正常顶点着色确保了图中没有两个相邻顶点被赋予相同的颜色。我们的目标通常是找到使用尽可能少的颜色数目的正常顶点着色。 定义 6.1.1.2 (色数, Chromatic Number): 如果 \( \chi(G) = k \),则称 \( G \) 是 k-色图 (k-Chromatic Graph)。 例子 6.1.1.1 (色数示例): ⚝ 二分图 (Bipartite Graph) \( G \): 一个图是二分图当且仅当它不包含奇圈。对于非空的二分图 \( G \),\( \chi(G) = 2 \)。例如,路径 \( P_n \) (当 \( n \ge 2 \)) 和偶圈 \( C_{2n} \) 的色数是 2。而对于平凡图 \( K_1 \),\( \chi(K_1) = 1 \)。 ⚝ 奇圈 (Odd Cycle) \( C_{2n+1} \): 奇圈 \( C_{2n+1} \) ( \( n \ge 1 \)) 的色数是 3。你可以尝试用两种颜色着色奇圈,会发现总会有两个相邻顶点颜色相同。但使用三种颜色则总是可以正常着色。 ⚝ 树 (Tree) \( T \): 任何树 \( T \) (至少有两条边) 都是二分图,因此 \( \chi(T) = 2 \)。对于只有一个顶点的树(即 \( K_1 \)), \( \chi(K_1) = 1 \)。 色数的性质与界限: ① 下界 (Lower Bound): ② 上界 (Upper Bound): ③ 布鲁克斯定理 (Brooks' Theorem): ④ 二分图的色数: ⑤ 判断 k-可着色性 (k-Colorability): 应用场景: 四色定理 (Four Color Theorem) 是图论中最著名的定理之一,它断言:任何平面地图都可以用不多于四种颜色着色,使得任何相邻的区域颜色都不同。 更严格的图论表述为:任何平面图都是 4-可顶点着色的。也就是说,对于任何平面图 \( G \),其色数 \( \chi(G) \le 4 \)。 历史背景: ⚝ 肯普的错误证明 (Kempe's False Proof):在1879年,肯普声称给出了四色定理的证明,使用了肯普链 (Kempe Chain) 的方法。然而,在1890年,希伍德 (Heawood) 指出肯普的证明存在漏洞,但肯普的肯普链思想在后来的研究中仍然非常重要。希伍德利用肯普的思想证明了五色定理 (Five Color Theorem),即任何平面图都是 5-可着色的,这是一个重要的中间结果。 ⚝ 计算机辅助证明 (Computer-Assisted Proof):经过一个多世纪的努力,四色定理最终在1976年由凯尼斯·阿佩尔 (Kenneth Appel) 和沃尔夫冈·哈肯 (Wolfgang Haken) 借助计算机完成证明。他们的证明方法是放电法 (Discharging Method),结合了数学分析和大量的计算机搜索。他们证明了存在一个由1936个“不可避免构型”组成的集合,并且证明了如果四色猜想不成立,则必然存在其中一个构型,然后通过计算机验证了这些构型都是“可约的”,从而导出了矛盾。 四色定理的重要性与争议: 尽管存在争议,四色定理的正确性已被广泛接受,并且它极大地推动了图论和组合数学的发展。四色定理不仅是一个关于地图着色的结果,它还深刻地揭示了平面图的结构性质。 相关定理与推广: ⚝ 哈德维格-尼尔森定理 (Hadwiger–Nelson problem):与四色定理相关的一个未解决问题是哈德维格-尼尔森问题,它询问着色平面需要多少种颜色,使得任何距离为1的两点颜色不同。已知答案介于 5 和 7 之间,具体数值仍未确定。 ⚝ 图的表面着色 (Graph Coloring on Surfaces):四色定理只适用于平面图(或球面上的图)。对于其他表面(如环面),需要的颜色数可能会更多。图的表面着色问题研究在不同表面上着色图所需的最少颜色数。 总结: 除了顶点着色,边着色 (Edge Coloring) 是另一种重要的图着色形式。在边着色中,我们为图 \( G = (V, E) \) 的每条边 \( e \in E \) 分配一种颜色,使得任何两条相邻的边 (Adjacent Edges)(即共享同一个顶点的边)颜色互不相同。一个 k-边着色 (k-Edge Coloring) 就是使用 \( k \) 种颜色对图进行边着色。如果存在一个对图 \( G \) 的 \( k \)-边着色,则称图 \( G \) 是 k-边可着色的 (k-Edge-Colorable)。 定义 6.2.1.1 (正常边着色, Proper Edge Coloring): 定义 6.2.1.2 (边色数, Edge Chromatic Number 或 Chromatic Index): 如果 \( \chi'(G) = k \),则称 \( G \) 是 k-边色图 (k-Edge-Chromatic Graph)。 例子 6.2.1.1 (边色数示例): ⚝ 完全图 (Complete Graph) \( K_4 \): \( K_4 \) 的最大度 \( \Delta(K_4) = 3 \)。可以证明 \( \chi'(K_4) = 3 \)。 ⚝ 完全图 (Complete Graph) \( K_{2n} \): 对于偶数阶完全图 \( K_{2n} \),\( \chi'(K_{2n}) = 2n - 1 = \Delta(K_{2n}) \)。 ⚝ 完全图 (Complete Graph) \( K_{2n+1} \): 对于奇数阶完全图 \( K_{2n+1} \),\( \chi'(K_{2n+1}) = 2n+1 = \Delta(K_{2n+1}) + 1 \)。 ⚝ 二分图 (Bipartite Graph) \( G \): 对于二分图 \( G \),根据柯尼希定理 (König's Theorem),\( \chi'(G) = \Delta(G) \)。 ⚝ 路径 (Path) \( P_n \) ( \( n \ge 2 \)): 路径 \( P_n \) 的最大度为 2 (当 \( n \ge 2 \))。\( \chi'(P_n) = 2 \)。 ⚝ 圈 (Cycle) \( C_n \): 圈 \( C_n \) 的最大度为 2。如果 \( n \) 是偶数,\( \chi'(C_n) = 2 \)。如果 \( n \) 是奇数,\( \chi'(C_n) = 3 \)。 边色数的性质与界限: ① 下界 (Lower Bound): ② 维辛定理 (Vizing's Theorem): 根据维辛定理,图可以分为两类: 确定一个图是第一类图还是第二类图是一个NP-完全问题。 ③ 二分图的边色数: ④ 完全图的边色数: ⑤ 判断 k-边可着色性 (k-Edge-Colorability): 边着色与匹配 (Matching): 应用场景: 维辛定理 (Vizing's Theorem),也称为 维辛边着色定理 (Vizing's Edge Coloring Theorem),是图论中关于边着色的一个 фундаментальный 定理。它由苏联数学家瓦季姆·格奥尔吉耶维奇·维辛 (Vadim G. Vizing) 在1964年证明。维辛定理给出了图的边色数 \( \chi'(G) \) 的一个非常紧的上界,并揭示了边色数与图的最大度 \( \Delta(G) \) 之间的密切关系。 定理 6.2.2.1 (维辛定理, Vizing's Theorem): 维辛定理的意义: 证明思想 (简述): 图的分类 (Class 1 vs. Class 2): ⚝ 第一类图 (Class 1 Graph):如果 \( \chi'(G) = \Delta(G) \),则图 \( G \) 属于第一类。 判断图的类别: 已知的第一类图和第二类图的例子: ⚝ 第一类图 (Class 1 Examples): ⚝ 第二类图 (Class 2 Examples): 维辛定理的应用: 总结: 色多项式 (Chromatic Polynomial) 是组合数学中一个重要的概念,它将图的着色问题与多项式联系起来。对于一个给定的图 \( G \),色多项式 \( P(G, k) \) 是一个关于变量 \( k \) 的多项式,其值等于用 \( k \) 种颜色对图 \( G \) 进行正常顶点着色的方案数。 定义 6.3.1.1 (色多项式, Chromatic Polynomial): 例子 6.3.1.1 (色多项式示例): ⚝ 空图 \( \overline{K}_n \) (没有边的图): ⚝ 路径 \( P_n \): ⚝ 圈 \( C_n \): 色多项式的性质: ① 多项式性质 (Polynomial Property): ② 度数 (Degree): ③ 首项系数 (Leading Coefficient): ④ 常数项 (Constant Term): ⑤ 交错符号 (Alternating Signs): ⑥ 色数与色多项式 (Chromatic Number and Chromatic Polynomial): ⑦ 删除-收缩递推关系 (Deletion-Contraction Recurrence): ⑧ 连通分支 (Connected Components): 计算色多项式的主要方法是使用 删除-收缩递推关系 (Deletion-Contraction Recurrence)。这个方法通过递归地应用公式 \( P(G, k) = P(G - e, k) - P(G / e, k) \) 将复杂图的色多项式计算转化为更简单图的计算。 计算步骤: 例子 6.3.2.1 (计算 \( C_4 \) 的色多项式): 验证: 算法复杂度: 应用场景: 总结: 在组合设计理论中,区组设计 (Block Design) 是一类重要的组合结构,它在实验设计、编码理论等领域有着广泛的应用。平衡不完全区组设计 (Balanced Incomplete Block Design, BIBD) 是区组设计中最基本且应用最广泛的类型之一。 定义 7.1.1 (BIBD 的定义): 我们通常用参数 \( (v, k, \lambda) \) 或 \( (v, b, r, k, \lambda) \) 来描述一个 BIBD,其中: 由于 BIBD 的参数之间存在着必然的联系,因此 \( (v, k, \lambda) \) 是 BIBD 的基本参数,而 \( b \) 和 \( r \) 可以由 \( v, k, \lambda \) 推导出来。 定理 7.1.1 (BIBD 的参数关系): 证明: ② 考虑任意一个处理 \( x \)。包含 \( x \) 的区组共有 \( r \) 个。在这些区组中,除了 \( x \) 之外,还剩下 \( r(k-1) \) 个位置。这些位置要用来放置剩余的 \( v-1 \) 个处理。 参数的必要条件: 需要注意的是,满足这些必要条件并不能保证 BIBD 一定存在。BIBD 的存在性问题是一个非常复杂的问题,需要更深入的理论和构造方法来解决。 例子 7.1.1 (BIBD 的例子): 因此,上述设计是一个参数为 \( (7, 7, 3, 3, 1) \) 的 BIBD。这个设计也被称为 法诺平面 (Fano plane) 的区组设计形式。 构造 BIBD 是组合设计理论中的核心问题之一。根据不同的参数,构造方法也多种多样。以下介绍几种常见的 BIBD 构造方法。 ① 差集方法 (Method of Differences) 差集方法是一种利用 差集 (difference set) 来构造循环 BIBD 的方法。 定义 7.1.2 (差集): 定理 7.1.2 (差集构造 BIBD): 构造步骤: 例子 7.1.2 (利用差集构造 BIBD): 生成区组集合 \( \mathcal{B} = \{D + g \mid g \in \mathbb{Z}_7 \} \): 将处理从 \( \{0, 1, 2, 3, 4, 5, 6\} \) 替换为 \( \{1, 2, 3, 4, 5, 6, 7\} \),区组集合为: ② 有限域方法 (Finite Field Method) 利用 有限域 (finite field) 的性质可以构造一系列 BIBD。 定理 7.1.3 (有限域构造 BIBD): 例子 7.1.3 (利用有限域构造 BIBD): ③ 组合方法 (Combinatorial Methods) 除了差集和有限域方法,还有一些组合方法可以构造 BIBD,例如: 构造 BIBD 的方法非常丰富,针对不同的参数,需要选择合适的方法。目前,对于 BIBD 的存在性问题,仍然有很多未解决的难题。 定义 7.2.1 (对称 BIBD): 对于对称 BIBD,由于 \( v = b \),参数关系 \( vr = bk \) 简化为 \( vr = vk \),从而得到 \( r = k \)。因此,对称 BIBD 的参数通常表示为 \( (v, k, \lambda) \),其中 \( v \) 是处理数和区组数,\( k \) 是区组大小和重复数,\( \lambda \) 是成对平衡数。 性质 7.2.1 (对称 BIBD 的性质): 证明: 对于任意一个处理 \( p \in B_1 \setminus B_2 \),它在 \( B_1 \) 中出现 1 次,还需要在其他 \( r-1 = k-1 \) 个区组中出现。由于 \( p \notin B_2 \),所以 \( p \) 与 \( B_2 \) 中的任何处理的成对出现次数都为 \( \lambda \)。 另一种证明方法 (性质 7.2.1 ③ 的证明): 现在考虑 \( N^T N \) 的 \( (i, j) \) 元。 由于 \( N N^T = (k-\lambda)I + \lambda J \),且 \( N \) 是方阵,我们期望 \( N^T N \) 也具有类似的形式。事实上,对于对称 BIBD,可以证明 \( N^T N = N N^T = (k-\lambda)I + \lambda J \)。 例子 7.2.1 (对称 BIBD 的例子): 定理 7.2.2 (费舍尔不等式): 证明 (利用关联矩阵): 考虑 \( N N^T \) 的行列式 \( \det(N N^T) \)。 \( N N^T = (r-\lambda)I + \lambda J \) 的特征值: 因此,\( N N^T \) 的特征值为 \( rk \) (重数为 1) 和 \( r-\lambda \) (重数为 \( v-1 \))。 我们知道 \( \text{rank}(N N^T) \le \min(\text{rank}(N), \text{rank}(N^T)) = \text{rank}(N) \)。 等号成立,即 \( b = v \) 时,\( \text{rank}(N) = v \)。由于 \( N \) 是 \( v \times v \) 矩阵,且秩为 \( v \),所以 \( N \) 是非奇异的。此时 BIBD 是对称的。 费舍尔不等式的意义: 定义 7.3.1 (循环 BIBD): 循环 BIBD 可以通过 初始区组 (initial block) 生成。只需要找到一个或多个初始区组,然后通过循环移位生成整个区组集合。 构造步骤: 例子 7.3.1 (循环 BIBD 的构造): 寻找初始区组的方法: 区组设计在很多领域都有应用,循环区组设计由于其结构上的规律性,在某些应用中尤其方便。 ① 实验设计 (Experimental Design) 在实验设计中,我们可能需要比较 \( v \) 种不同的处理 (例如,不同的肥料、不同的药物)。为了减少实验误差,通常将实验单元分组,每组称为一个区组。在每个区组内进行实验,区组内的实验条件相对一致。 例如,在农业实验中,要比较 7 种不同的肥料对作物产量的影响。由于土地条件的限制,每个实验小区 (区组) 只能种植 3 种肥料。为了保证实验的公平性,可以使用参数为 \( (7, 7, 3, 3, 1) \) 的 BIBD 来设计实验方案。每个区组对应一个实验小区,区组内的 3 个处理对应在该小区内使用的 3 种肥料。由于是 BIBD,每对肥料都会在同一个小区内被比较一次,从而保证了实验的平衡性。 ② 锦标赛赛程安排 (Tournament Scheduling) 在体育比赛中,例如循环赛,可以使用区组设计来安排赛程。 ③ 编码理论 (Coding Theory) 区组设计可以用来构造某些类型的 纠错码 (error-correcting codes),例如 区组码 (block codes)。BIBD 的平衡性可以使得构造出的码具有良好的纠错性能。 ④ 保密系统 (Cryptographic Systems) 在保密系统中,区组设计可以用于构造 密钥分配方案 (key distribution schemes) 和 访问控制方案 (access control schemes)。BIBD 的平衡性可以保证密钥或访问权限的公平分配。 总结: 拉丁方 (Latin Square) 是一种特殊的 \(n \times n\) 方阵,它在组合设计和实验设计中有着重要的应用。 定义 8.1.1 (拉丁方):一个 \(n \times n\) 的方阵 \(L\),如果它的每个元素都来自一个包含 \(n\) 个不同符号的集合 \(S\),并且每种符号在 \(L\) 的每一行和每一列中都恰好出现一次,则称 \(L\) 为一个 \(n\) 阶拉丁方。通常,我们取符号集合 \(S = \{1, 2, \ldots, n\}\) 或 \(S = \{0, 1, \ldots, n-1\}\)。 示例 8.1.1:以下是一个 3 阶拉丁方,符号集合为 \(S = \{1, 2, 3\}\)。 定义 8.1.2 (标准型拉丁方):一个 \(n\) 阶拉丁方被称为是标准型 (Standard Form) 的,如果它的第一行和第一列都是按自然顺序排列的,即第一行和第一列都是 \(1, 2, \ldots, n\)。 示例 8.1.2:以下是一个 4 阶标准型拉丁方。 性质 8.1.1 (拉丁方的基本性质): 证明: 定理 8.1.1 (拉丁方的存在性):对于任意正整数 \(n \ge 1\),都存在 \(n\) 阶拉丁方。 构造方法示例: 示例 8.1.3:使用上述方法构造一个 4 阶拉丁方。 拉丁方的计数是一个非常困难的问题。即使对于较小的阶数,计算拉丁方的数量也极具挑战性。我们通常关注的是不同构的拉丁方数量,或者特定类型的拉丁方数量。 定义 8.1.3 (同构拉丁方):两个 \(n\) 阶拉丁方 \(L_1\) 和 \(L_2\) 被称为是同构的 (Isomorphic),如果 \(L_2\) 可以通过对 \(L_1\) 进行以下操作得到: 计数结果: 已知的拉丁方计数结果(截至目前): 随着阶数 \(n\) 的增加,拉丁方的数量增长非常迅速。精确计数 \(n \ge 7\) 的拉丁方仍然是一个开放性问题。对于小阶拉丁方的计数,可以通过计算机枚举和同构判定的方法进行。 标准型拉丁方的优势: 计算标准型拉丁方的方法: 代码示例 (伪代码,Python 风格): 这段伪代码展示了回溯算法的基本框架,实际实现需要更精细的优化以提高效率,尤其对于较大阶数的拉丁方。 正交拉丁方 (Orthogonal Latin Squares, OLS) 是拉丁方理论中一个核心概念,它在组合设计,特别是实验设计和编码理论中有着重要的应用。 定义 8.2.1 (正交拉丁方):设 \(L_1\) 和 \(L_2\) 是两个 \(n\) 阶拉丁方,它们的符号集合分别为 \(S_1\) 和 \(S_2\)。如果将它们叠放在一起,形成 \(n \times n\) 的有序对矩阵 \((L_1, L_2)\),其中 \((L_1, L_2)_{ij} = (L_1_{ij}, L_2_{ij})\),且所有 \(n^2\) 个有序对 \((L_1_{ij}, L_2_{ij})\) 都是不同的,则称 \(L_1\) 和 \(L_2\) 是正交的 (Orthogonal),\(L_1\) 和 \(L_2\) 构成一对正交拉丁方 (Orthogonal Latin Squares, OLS)。 示例 8.2.1:考虑以下两个 4 阶拉丁方 \(L_1\) 和 \(L_2\),符号集合均为 \(S = \{0, 1, 2, 3\}\)。 定义 8.2.2 (OLS 集合):一个 \(n\) 阶正交拉丁方集合 (Set of Orthogonal Latin Squares) 是指一组拉丁方 \(L_1, L_2, \ldots, L_k\),其中任意两方 \(L_i\) 和 \(L_j\) (\(i \neq j\)) 都是正交的。 定理 8.2.1 (OLS 集合的大小界限):一个 \(n\) 阶正交拉丁方集合最多包含 \(n-1\) 个拉丁方。 证明思路: 完备正交拉丁方集 (Complete Set of Orthogonal Latin Squares):如果一个 \(n\) 阶 OLS 集合包含 \(n-1\) 个拉丁方,则称其为完备正交拉丁方集。 定理 8.2.2 (完备 OLS 集合的存在性):当 \(n\) 是素数幂时,存在 \(n-1\) 个 \(n\) 阶正交拉丁方组成的完备集合。 构造方法 (基于有限域): 示例 8.2.2:构造 3 阶完备 OLS 集合。 定理 8.2.3 (Bruck-Ryser-Chowla 定理):对于某些 \(n\),不存在 \(n-1\) 个 \(n\) 阶 OLS 组成的完备集合。例如,当 \(n \equiv 1, 2 \pmod{4}\) 且 \(n\) 不是两个平方数之和时,不存在 \(n\) 阶射影平面,从而不存在 \(n-1\) 个 \(n\) 阶 OLS 的完备集合。最著名的例子是 \(n=6\)。 欧拉猜想 (Euler's Conjecture):欧拉在 1782 年提出猜想,对于 \(n \equiv 2 \pmod{4}\) 的阶数 \(n\),不存在一对 \(n\) 阶正交拉丁方。特别是,他猜想不存在 6 阶正交拉丁方。这个猜想被称为“36军官问题 (Thirty-six Officers Problem)”。 36军官问题:是否存在一种方式将来自 6 个不同团的 6 种不同军衔的 36 名军官排成一个 \(6 \times 6\) 的方阵,使得每行每列的军官都来自不同的团且具有不同的军衔?这个问题等价于是否存在一对 6 阶正交拉丁方。 麦克尼什-曼恩定理 (MacNeish-Mann Theorem):设 \(n = p_1^{k_1} p_2^{k_2} \cdots p_r^{k_r}\) 是 \(n\) 的素因子分解,则最多存在 \(m-1\) 个 \(n\) 阶互相正交的拉丁方,其中 \(m = \min\{p_1^{k_1}, p_2^{k_2}, \ldots, p_r^{k_r}\}\)。 反驳欧拉猜想:在 1959 年,Parker, Bose, 和 Shrikhande 构造出了 10 阶正交拉丁方,并随后证明了对于所有 \(n \ge 3\),除了 \(n = 2\) 和 \(n = 6\) 外,都存在至少一对 \(n\) 阶正交拉丁方。1959 年,Bose, Shrikhande 和 Parker 共同证明了对于所有 \(n \ge 3\) 且 \(n \neq 6\),都存在至少一对 \(n\) 阶正交拉丁方。因此,欧拉猜想对于 \(n > 2\) 且 \(n \equiv 2 \pmod{4}\) 的情况,除了 \(n=6\) 之外,都是错误的。 6 阶正交拉丁方的不存在性:Tarry 在 1901 年通过穷举法证明了不存在 6 阶正交拉丁方,从而证实了欧拉猜想对于 \(n=6\) 的情况是正确的。因此,6 阶是唯一不存在一对正交拉丁方的阶数,除了显然的 2 阶。 总结: 拉丁方和正交拉丁方在实验设计中有着广泛的应用,尤其是在需要控制多个因素的实验中。它们可以有效地减少实验次数,同时保证实验结果的有效性和可靠性。 因子设计 (Factorial Designs) 是一种实验设计方法,用于研究多个因素对实验结果的影响。当需要同时考察多个因素的不同水平组合时,因子设计比单因素实验更有效率。拉丁方和正交拉丁方可以用于构造某些类型的因子设计,特别是当存在区组 (Block) 效应时。 拉丁方设计 (Latin Square Design): 应用场景: 设计方法: 示例 8.3.1 (拉丁方设计): 每个肥料在每一行和每一列都出现一次,这样可以有效地消除行和列区组的系统性误差,更准确地评估肥料处理的效果。 正交拉丁方设计 (Orthogonal Latin Square Design): 应用场景: 设计方法: 示例 8.3.2 (正交拉丁方设计): 使用示例 8.2.2 中的 3 阶 OLS: 每个单元格 \((i, j)\) 的处理组合由 \((L_1_{ij}, L_2_{ij})\) 决定。例如,单元格 (1, 1) 的处理组合是 (肥料 0, 灌溉 0),单元格 (1, 2) 的处理组合是 (肥料 1, 灌溉 2),以此类推。 农业实验设计是拉丁方和正交拉丁方应用的重要领域。在农业研究中,田间实验常常受到土壤肥力、水分、光照等多种因素的影响,这些因素可能在空间上呈现系统性变化。使用拉丁方和正交拉丁方设计可以有效地控制这些空间变异,提高实验的精度和效率。 常见应用: 优势: 局限性: 改进与扩展: 这些设计方法在农业实验设计中都有广泛应用,可以根据具体的实验条件和研究目的选择合适的设计方案。拉丁方和正交拉丁方作为经典的设计工具,仍然是实验设计理论的重要组成部分,为科学研究提供了有力的工具。 仿射平面 (Affine Plane) 是研究平行概念的几何结构,它在有限个点和线的集合上构建了几何学的基本框架。与我们熟悉的欧几里得平面类似,仿射平面也具有“平行线”的概念,但其定义更加抽象和一般化,尤其适用于有限的情况。为了精确地定义仿射平面,我们通常使用公理系统 (Axiomatic System) 来刻画。以下是仿射平面的常用公理系统: ① 公理 1 (存在性公理):至少存在三个不共线的点 (Points)。 ② 公理 2 (唯一性公理):任意两点确定唯一一条直线 (Line)。 ③ 公理 3 (平行公理):对于任意直线 \(l\) 和任意不在线 \(l\) 上的点 \(P\),存在唯一一条直线 \(m\) 经过点 \(P\) 且与直线 \(l\) 平行。 ④ 公理 4 (非退化公理):对于任意直线 \(l\),存在至少一个不在线 \(l\) 上的点。 基于这些公理,我们可以推导出仿射平面的一些基本性质: ⚝ 平行关系是等价关系: ⚝ 每条直线至少有两个点: ⚝ 存在平行线: 例子: 最简单的仿射平面是二阶仿射平面,也称为 \(AG(2, 2)\)。 我们可以通过构造来理解它。考虑四个点,例如 \(P_1, P_2, P_3, P_4\)。我们可以定义六条直线: ⚝ \(l_1 = \{P_1, P_2\}\) 在这个结构中,我们可以验证上述四个公理是否成立。例如,直线 \(l_1\) 和 \(l_2\) 是平行的,因为它们不相交。同样,\(l_3\) 和 \(l_4\) 平行,\(l_5\) 和 \(l_6\) 平行。通过这个例子,我们可以初步感受到仿射平面的结构和性质。 总结: 仿射平面的公理系统提供了一个严格的框架,用于研究具有平行概念的几何结构。这些公理简洁而有力,它们不仅定义了仿射平面的基本性质,也为我们构造和研究各种仿射平面提供了理论基础。理解这些公理是深入学习有限几何的关键第一步。 仿射平面可以通过多种方法构造,其中最重要和最系统的方法是利用有限域 (Finite Field)。有限域为我们提供了构建各种有限几何结构的代数工具。 利用有限域构造仿射平面 \(AG(2, q)\) 设 \(F = GF(q)\) 是一个有限域,其中 \(q\) 是素数幂。我们可以利用二维向量空间 \(F^2\) 来构造仿射平面,记作 \(AG(2, q)\)。 ① 点 (Points):仿射平面 \(AG(2, q)\) 的点定义为 \(F^2\) 中的所有向量,即 \((x, y)\),其中 \(x, y \in F\)。由于 \(F\) 有 \(q\) 个元素,所以 \(AG(2, q)\) 共有 \(q^2\) 个点。 ② 直线 (Lines):仿射平面 \(AG(2, q)\) 的直线可以通过以下两种等价方式定义: ▮▮▮▮ⓐ 向量形式:对于 \(F^2\) 中的两个不同的点 \(a = (x_1, y_1)\) 和 \(b = (x_2, y_2)\),过这两点的直线 \(l_{a,b}\) 定义为集合: ▮▮▮▮ⓑ 方程形式:直线也可以用线性方程来表示。在 \(F^2\) 中,一条直线可以表示为方程 \(ax + by = c\),其中 \(a, b, c \in F\),且 \(a\) 和 \(b\) 不同时为零。对于每一组非零 \((a, b)\),不同的 \(c\) 值会给出平行的直线。 ③ 平行关系 (Parallelism):两条直线 \(l_1\) 和 \(l_2\) 被定义为平行,如果它们的方向向量成比例,或者在方程形式中,如果它们的 \((a, b)\) 部分相同(或成比例)。更精确地说,对于向量形式定义的直线,如果 \(l_{a,b}\) 和 \(l_{c,d}\) 的方向向量 \(b-a\) 和 \(d-c\) 线性相关,则它们平行。对于方程形式 \(a_1x + b_1y = c_1\) 和 \(a_2x + b_2y = c_2\),如果存在非零 \(\lambda \in F\) 使得 \((a_1, b_1) = \lambda (a_2, b_2)\),则两条直线平行。 性质和验证: 利用有限域构造的 \(AG(2, q)\) 满足仿射平面的四个公理: ⚝ 公理 1 (存在性):当 \(q \ge 2\) 时,\(F^2\) 至少有 \(q^2 \ge 4\) 个点。例如,当 \(q=2\) 时,\(F = GF(2) = \{0, 1\}\),\(F^2 = \{(0, 0), (0, 1), (1, 0), (1, 1)\}\)。我们可以选取例如 \((0, 0), (1, 0), (0, 1)\) 这三个不共线的点。 ⚝ 公理 2 (唯一性):任意两点 \(a, b \in F^2\) 确定唯一的直线 \(l_{a,b}\)。这是由向量空间的性质保证的。 ⚝ 公理 3 (平行公理):对于直线 \(l\) 和点 \(P \notin l\),我们可以通过平移直线 \(l\) 得到经过 \(P\) 的平行线。例如,如果 \(l\) 由 \(ax + by = c\) 定义,点 \(P = (x_0, y_0)\),则平行线为 \(ax + by = ax_0 + by_0\)。唯一性也容易验证。 ⚝ 公理 4 (非退化性):对于任意直线 \(l\),总可以找到不在线 \(l\) 上的点,因为 \(F^2\) 是二维的。 直线的数量和点的数量: 在 \(AG(2, q)\) 中: ⚝ 点的数量:\(|AG(2, q)| = q^2\)。 例子:\(AG(2, 3)\) 考虑有限域 \(GF(3) = \{0, 1, 2\}\) (模 3 整数)。\(AG(2, 3)\) 有 \(3^2 = 9\) 个点: 总结: 利用有限域 \(GF(q)\) 构造仿射平面 \(AG(2, q)\) 是一种强大且系统的方法。这种构造方法不仅证明了仿射平面是存在的,而且将仿射几何与代数结构紧密联系起来,为进一步研究有限几何提供了基础。通过有限域的代数性质,我们可以深入理解仿射平面的几何特性。 射影平面 (Projective Plane) 是另一类重要的有限几何结构,它与仿射平面密切相关,但又有所不同。射影平面可以看作是在仿射平面上“添加了无穷远点”得到的,从而消除了平行线的概念,使得任意两条直线都相交。射影平面也通过公理系统来定义,以下是常用的公理: ① 公理 1 (存在性公理):至少存在四个点,其中任意三点不共线 (No three of which are collinear)。 ② 公理 2 (唯一性公理):任意两点确定唯一一条直线 (Any two distinct points determine a unique line)。 ③ 公理 3 (相交公理):任意两条直线相交于至少一个点 (Any two distinct lines intersect in at least one point)。 ④ 公理 4 (对偶性公理):存在四个直线,其中任意三条不共点 (No three of which are concurrent)。 从这些公理出发,我们可以推导出射影平面的一些重要性质: ⚝ 任意两条直线恰好相交于一点: ⚝ 对偶性原理 (Duality Principle): ⚝ 每条直线上点的数量相同,每个点上直线的数量也相同: 例子:二阶射影平面 (Fano Plane) 最简单的射影平面是二阶射影平面,也称为 法诺平面 (Fano Plane),记作 \(PG(2, 2)\)。它的阶为 2。根据上述性质,\(PG(2, 2)\) 应该有 \(2^2 + 2 + 1 = 7\) 个点和 7 条直线。每条直线上有 \(2+1 = 3\) 个点,每个点在 \(2+1 = 3\) 条直线上。 我们可以用点集 \(P = \{1, 2, 3, 4, 5, 6, 7\}\) 和直线集 \(L\) 来描述法诺平面,其中直线集 \(L\) 包含以下 7 条直线(每条直线用包含的点集表示): ⚝ \(l_1 = \{1, 2, 3\}\) 可以验证,这个结构满足射影平面的所有公理。例如,任意两条直线都恰好相交于一个点。例如,\(l_1 = \{1, 2, 3\}\) 和 \(l_4 = \{2, 4, 6\}\) 相交于点 \(2\)。 总结: 射影平面的公理系统定义了一种没有平行线的几何结构,其中任意两条直线都相交。射影平面的对偶性原理和点线数量关系是其重要的特征。理解射影平面的公理和性质,以及最简单的例子法诺平面,是深入研究射影几何的基础。 射影平面的构造方法与仿射平面类似,最主要的方法也是利用有限域 (Finite Field)。通过有限域,我们可以系统地构造出各种射影平面,并研究它们的性质。 利用有限域构造射影平面 \(PG(2, q)\) 设 \(F = GF(q)\) 是一个有限域,其中 \(q\) 是素数幂。我们可以利用三维向量空间 \(F^3\) 来构造射影平面,记作 \(PG(2, q)\)。 ① 点 (Points):射影平面 \(PG(2, q)\) 的点定义为 \(F^3\) 中过原点的所有一维子空间。换句话说,\(PG(2, q)\) 的点是 \(F^3 \setminus \{(0, 0, 0)\}\) 中的向量在标量乘法下的等价类。我们可以用齐次坐标 (Homogeneous Coordinates) \((x: y: z)\) 来表示一个点,其中 \((x, y, z) \in F^3 \setminus \{(0, 0, 0)\}\),且 \((x: y: z) = (\lambda x: \lambda y: \lambda z)\) 对于任何非零 \(\lambda \in F\)。 ② 直线 (Lines):射影平面 \(PG(2, q)\) 的直线定义为 \(F^3\) 中过原点的所有二维子空间。或者等价地,射影平面 \(PG(2, q)\) 的直线对应于 \(F^3\) 中满足线性方程 \(ax + by + cz = 0\) 的所有点的集合 \((x: y: z)\),其中 \(a, b, c \in F\) 且 \(a, b, c\) 不同时为零。同样,方程 \((a: b: c)\) 和 \((\lambda a: \lambda b: \lambda c)\) 定义相同的直线。 ③ 关联关系 (Incidence Relation):点 \(P = (x: y: z)\) 在直线 \(l\) 上,当且仅当点 \(P\) 对应的向量 \((x, y, z)\) 属于直线 \(l\) 对应的二维子空间,或者满足直线 \(l\) 的方程。 性质和验证: 利用有限域构造的 \(PG(2, q)\) 满足射影平面的四个公理: ⚝ 公理 1 (存在性):当 \(q \ge 2\) 时,\(PG(2, q)\) 至少有 \(q^2 + q + 1 \ge 7\) 个点(例如,当 \(q=2\) 时,有 7 个点)。可以验证存在四个点,其中任意三点不共线。 ⚝ 公理 2 (唯一性):任意两个不同的点确定唯一一条直线。在 \(F^3\) 中,两个不同的一维子空间张成唯一的二维子空间。 ⚝ 公理 3 (相交性):任意两条不同的直线相交于至少一个点。在 \(F^3\) 中,两个不同的二维子空间的交集至少是一维的(因为它们都在三维空间中)。因此,在射影平面中,任意两条不同的直线相交于至少一个点。实际上,可以证明它们恰好相交于一个点。 ⚝ 公理 4 (对偶性):可以验证存在四条直线,其中任意三条不共点。这与射影平面的对偶性有关。 点的数量和直线的数量: 在 \(PG(2, q)\) 中: ⚝ 点的数量:\(PG(2, q)\) 的点的数量等于 \(F^3\) 中一维子空间的数量。\(F^3\) 中非零向量的数量是 \(q^3 - 1\)。每个一维子空间包含 \(q - 1\) 个非零向量。因此,点的数量是 \((q^3 - 1) / (q - 1) = q^2 + q + 1\)。 ⚝ 直线的数量:\(PG(2, q)\) 的直线的数量等于 \(F^3\) 中二维子空间的数量。通过对偶性,直线的数量也等于点的数量,即 \(q^2 + q + 1\)。 ⚝ 每条直线上的点数和每个点上的直线数:每条直线(二维子空间)包含 \((q^2 - 1) / (q - 1) = q + 1\) 个一维子空间(点)。同样,每个点都在 \(q+1\) 条直线上。 从仿射平面到射影平面 射影平面 \(PG(2, q)\) 可以看作是在仿射平面 \(AG(2, q)\) 上添加“无穷远点”和“无穷远直线”得到的。考虑 \(PG(2, q)\) 的齐次坐标 \((x: y: z)\)。我们可以将 \(z \neq 0\) 的点对应于仿射平面 \(AG(2, q)\) 的点 \((x/z, y/z)\)。当 \(z = 0\) 时,我们得到“无穷远点” \((x: y: 0)\)。所有这些无穷远点构成“无穷远直线” \(z = 0\)。 具体来说,我们可以将 \(PG(2, q)\) 的点分为两类: ⚝ 有限点 (Affine Points):形如 \((x: y: 1)\) 的点,对应于仿射平面 \(AG(2, q)\) 的点 \((x, y)\)。共有 \(q^2\) 个有限点。 无穷远点 \((x: y: 0)\) 可以看作是仿射平面中斜率为 \(y/x\) 的平行线束的方向。当 \(x = 0\) 时,对应于垂直方向。所有这些无穷远点 \((x: y: 0)\) 构成一条直线,称为 无穷远直线 (Line at Infinity),其方程为 \(z = 0\)。 例子:\(PG(2, 2)\) (法诺平面) 的构造 利用 \(GF(2) = \{0, 1\}\) 构造 \(PG(2, 2)\)。 总结: 利用有限域 \(GF(q)\) 构造射影平面 \(PG(2, q)\) 是理解射影平面的关键方法。这种构造方法不仅证明了射影平面的存在性,而且揭示了射影平面与有限域的深刻联系。通过齐次坐标和向量空间的概念,我们可以清晰地理解射影平面的点、直线和关联关系。射影平面可以看作是仿射平面的扩展,通过添加无穷远元素,消除了平行线的概念,形成了一个更加统一和对称的几何结构。 有限域 (Finite Field),也称为伽罗瓦域 (Galois Field),是仅含有有限个元素的域 (Field)。域是一种代数结构,在其中可以进行加法、减法、乘法和除法运算(除以非零元素)。我们熟悉的有理数域 \(\mathbb{Q}\)、实数域 \(\mathbb{R}\) 和复数域 \(\mathbb{C}\) 都是无限域。有限域的研究在组合数学、编码理论、密码学等领域有广泛应用,尤其在有限几何的构造中起着核心作用。 基本性质: ① 阶 (Order):有限域的元素个数称为有限域的阶。有限域的阶必须是素数幂,即 \(p^k\) 的形式,其中 \(p\) 是素数,\(k\) 是正整数。 ② 唯一性:对于每个素数幂 \(q = p^k\),都存在一个阶为 \(q\) 的有限域,并且同构意义下是唯一的。阶为 \(q\) 的有限域通常记作 \(GF(q)\) 或 \(\mathbb{F}_q\)。 ③ 素域 (Prime Field):当 \(k = 1\) 时,有限域 \(GF(p)\) 称为素域,它同构于模 \(p\) 整数环 \(\mathbb{Z}/p\mathbb{Z}\),通常表示为 \(\mathbb{Z}_p\)。例如,\(GF(2) = \{0, 1\}\) (模 2 运算),\(GF(3) = \{0, 1, 2\}\) (模 3 运算)。 ④ 扩域 (Extension Field):当 \(k > 1\) 时,有限域 \(GF(p^k)\) 是素域 \(GF(p)\) 的扩域。例如,\(GF(4)\) 是 \(GF(2)\) 的扩域。\(GF(p^k)\) 可以看作是 \(GF(p)\) 上的 \(k\) 维向量空间。 ⑤ 乘法群 (Multiplicative Group):有限域 \(GF(q)\) 的所有非零元素在乘法运算下构成一个循环群,记作 \(GF(q)^*\)。这个群的阶是 \(q-1\)。这意味着存在一个生成元 \(g \in GF(q)^*\),使得 \(GF(q)^* = \{g^1, g^2, \ldots, g^{q-1} = 1\}\)。 构造有限域: ⚝ 素域 \(GF(p)\):对于素数 \(p\),素域 \(GF(p)\) 就是模 \(p\) 整数环 \(\mathbb{Z}_p = \{0, 1, \ldots, p-1\}\),加法和乘法运算都是模 \(p\) 运算。 ⚝ 扩域 \(GF(p^k)\):构造扩域 \(GF(p^k)\) 需要用到不可约多项式 (Irreducible Polynomial)。在 \(GF(p)\) 上选取一个 \(k\) 次不可约多项式 \(f(x)\)。则 \(GF(p^k)\) 可以构造为多项式环 \(GF(p)[x]\) 模去理想 \((f(x))\) 的商环,即 \(GF(p^k) \cong GF(p)[x] / (f(x))\)。\(GF(p^k)\) 的元素可以表示为次数小于 \(k\) 的多项式 \(a_{k-1}x^{k-1} + \cdots + a_1x + a_0\),其中 \(a_i \in GF(p)\)。运算是在模 \(f(x)\) 的意义下进行。 例子:构造 \(GF(4)\) 要构造 \(GF(4) = GF(2^2)\),我们需要在 \(GF(2) = \{0, 1\}\) 上找到一个 2 次不可约多项式。多项式 \(f(x) = x^2 + x + 1\) 在 \(GF(2)\) 上是不可约的,因为 \(f(0) = 1 \neq 0\) 且 \(f(1) = 1 + 1 + 1 = 1 \neq 0\)。 因此,\(GF(4) \cong GF(2)[x] / (x^2 + x + 1)\)。\(GF(4)\) 的元素可以表示为 \(\{0, 1, x, x+1\}\)。为了方便,我们用 \(\alpha\) 代替 \(x\),则 \(GF(4) = \{0, 1, \alpha, \alpha+1\}\),其中 \(\alpha^2 + \alpha + 1 = 0\),即 \(\alpha^2 = -\alpha - 1 = \alpha + 1\) (因为在 \(GF(2)\) 中 \(-1 = 1\))。 \(GF(4)\) 的加法表和乘法表如下: 总结: 有限域是有限几何的基石。理解有限域的基本性质,如阶、唯一性、素域、扩域和乘法群,以及掌握构造有限域的方法,特别是素域和扩域的构造,对于深入学习和应用有限几何至关重要。有限域的代数结构为有限几何提供了强大的工具,使得我们可以用代数方法研究几何问题,反过来,几何的视角也加深了我们对有限域的理解。 有限域是构造各种有限几何结构的核心工具。正如我们在 9.1.2 和 9.2.2 节中看到的,仿射平面 \(AG(2, q)\) 和射影平面 \(PG(2, q)\) 都可以利用有限域 \(GF(q)\) 来系统地构造。实际上,有限域不仅可以用于构造二维的仿射平面和射影平面,还可以推广到更高维度的仿射空间和射影空间,以及其他类型的有限几何结构,如区组设计、拉丁方等。 仿射空间 \(AG(n, q)\) 利用 \(n\) 维向量空间 \(F^n\) over \(F = GF(q)\),我们可以构造 \(n\) 维仿射空间 \(AG(n, q)\)。 ⚝ 点 (Points):\(AG(n, q)\) 的点是 \(F^n\) 中的向量。共有 \(q^n\) 个点。 射影空间 \(PG(n, q)\) 利用 \((n+1)\) 维向量空间 \(F^{n+1}\) over \(F = GF(q)\),我们可以构造 \(n\) 维射影空间 \(PG(n, q)\)。 ⚝ 点 (Points):\(PG(n, q)\) 的点是 \(F^{n+1}\) 中过原点的一维子空间。共有 \((q^{n+1} - 1) / (q - 1) = q^n + q^{n-1} + \cdots + q + 1\) 个点。 区组设计 (Block Designs) 有限域可以用于构造各种区组设计,例如平衡不完全区组设计 (BIBD)。利用有限域的差集 (Difference Set) 性质,可以构造循环 BIBD。例如,利用 \(GF(q)\) 的加法群和乘法群的性质,可以构造对称 BIBD。 拉丁方 (Latin Squares) 利用有限域的加法和乘法运算,可以构造正交拉丁方 (Orthogonal Latin Squares)。例如,利用有限域 \(GF(q)\) 的元素作为拉丁方的符号,可以构造 \(q-1\) 个两两正交的 \(q \times q\) 拉丁方,当 \(q\) 是素数幂时,可以达到正交拉丁方的最大数量。 其他应用 有限域还在以下有限几何及相关领域有广泛应用: ⚝ 有限环面 (Finite Torus):利用有限域的笛卡尔积构造。 总结: 有限域是构造和研究有限几何的强大工具。通过有限域,我们可以系统地构造各种类型的有限几何结构,并利用有限域的代数性质来研究这些几何结构的性质。从仿射空间和射影空间,到区组设计和拉丁方,有限域都提供了基础性的构造方法和理论框架。有限域与有限几何的结合,不仅丰富了数学理论,也在计算机科学、信息科学等领域找到了广泛的应用。深入理解有限域和有限几何的关系,是掌握组合数学和相关应用领域的重要一步。 Ramsey 理论是组合数学中的一个重要分支,它研究的是在一定的条件下,必然会出现某种秩序的性质。Ramsey 定理是 Ramsey 理论的基石,它断言在足够大的结构中,必然会找到某种特定的子结构。为了更好地理解 Ramsey 定理,我们首先从一个经典的例子——“朋友与陌生人”问题开始。 例子:朋友与陌生人问题 在一个至少有 6 个人的聚会上,证明要么存在 3 个人,他们彼此都认识(朋友),要么存在 3 个人,他们彼此都不认识(陌生人)。 证明: 考虑聚会中的任意一人,称之为 \(V\)。在剩下的 5 个人中,\(V\) 要么认识至少 3 个人,要么不认识至少 3 个人。这是因为如果 \(V\) 认识的人少于 3 个,比如最多 2 个,那么 \(V\) 不认识的人就至少有 \(5 - 2 = 3\) 个。反之亦然。 ① 情况一: \(V\) 认识至少 3 个人。 ② 情况二: \(V\) 不认识至少 3 个人。 无论哪种情况,我们都找到了一个“朋友”三人组或一个“陌生人”三人组。因此,在一个至少有 6 个人的聚会上,结论必然成立。 这个例子是 Ramsey 定理的一个具体体现。为了更形式化地描述 Ramsey 定理,我们需要引入 Ramsey 数的概念。 定义 10.1.1 (Ramsey 数 (Ramsey Number)) 对于给定的正整数 \(r\) 和 \(s\),Ramsey 数 \(R(r, s)\) 是最小的正整数 \(n\),使得任何对 \(K_n\) 的边进行红蓝二着色,都必然包含一个红色 \(K_r\) 或一个蓝色 \(K_s\)。这里,\(K_n\) 表示 \(n\) 个顶点的完全图 (complete graph)。 换句话说,无论如何将 \(K_n\) 的边涂成红色或蓝色,总能找到一个完全子图 \(K_r\),其所有边都是红色的,或者一个完全子图 \(K_s\),其所有边都是蓝色的。 定理 10.1.1 (Ramsey 定理 (Ramsey's Theorem)) 对于任意正整数 \(r, s \geq 2\),Ramsey 数 \(R(r, s)\) 存在且有限。 证明 (存在性证明 - 非构造性证明): 我们将使用数学归纳法来证明 Ramsey 数的存在性。我们对 \(r + s\) 的值进行归纳。 ① 基础情况: 当 \(r = 2\) 或 \(s = 2\) 时。 ② 归纳假设: 假设对于所有 \(r' + s' < r + s\) 的情况,\(R(r', s')\) 存在。 ③ 归纳步骤: 我们要证明 \(R(r, s)\) 存在。 因此,要么 \(|V_R| \geq R(r-1, s)\),要么 \(|V_B| \geq R(r, s-1)\)。 ⚝ 情况一: \(|V_R| \geq R(r-1, s)\)。 ⚝ 情况二: \(|V_B| \geq R(r, s-1)\)。 综合两种情况,我们证明了当 \(n = R(r-1, s) + R(r, s-1)\) 时,\(K_n\) 必然包含红色 \(K_r\) 或蓝色 \(K_s\)。因此,\(R(r, s) \leq R(r-1, s) + R(r, s-1)\)。由于归纳假设 \(R(r-1, s)\) 和 \(R(r, s-1)\) 存在,所以 \(R(r, s)\) 也存在。 根据数学归纳法原理,Ramsey 定理得证。 对称性 从定义可以看出,\(R(r, s) = R(s, r)\)。因为红色 \(K_r\) 和蓝色 \(K_s\) 的角色是对称的。 递推不等式 在证明过程中,我们得到了一个重要的递推不等式: 虽然 Ramsey 定理证明了 Ramsey 数的存在性,但确定 Ramsey 数的具体数值却非常困难。目前,只有少数几个 Ramsey 数的精确值被确定。因此,研究 Ramsey 数的界限变得尤为重要。 已知的精确值 ⚝ \(R(3, 3) = 6\) (朋友与陌生人问题已经证明) 对于更大的 Ramsey 数,我们只能得到一些界限。 上界 从 Ramsey 定理的证明过程中,我们得到了递推不等式: 例如,计算 \(R(3, 3)\) 的上界: 更一般地,我们可以将 Ramsey 数的上界与二项式系数联系起来。 定理 10.1.2 (Ramsey 数的上界) \[ R(r, s) \leq \binom{r+s-2}{r-1} \] 证明: 我们使用数学归纳法对 \(r + s\) 进行归纳。 ① 基础情况: 当 \(r = 2\) 或 \(s = 2\) 时。 ② 归纳假设: 假设对于所有 \(r' + s' < r + s\) 的情况,\(R(r', s') \leq \binom{r'+s'-2}{r'-1}\) 成立。 ③ 归纳步骤: 我们要证明 \(R(r, s) \leq \binom{r+s-2}{r-1}\)。 根据数学归纳法原理,定理得证。 下界 确定 Ramsey 数的下界通常更具挑战性,需要构造特定的着色方案来避免出现单色完全子图。概率方法 (probabilistic method) 是证明 Ramsey 数下界的重要工具。 定理 10.1.3 (Erdős 下界) 对于 \(r \geq 3\),存在常数 \(c_1, c_2 > 0\),使得 这个下界表明 Ramsey 数 \(R(r, r)\) 至少是指数级别的。Erdős 用概率方法首次证明了 \(R(r, r)\) 的指数下界,这是一个非常重要的结果。 构造性下界 虽然概率方法可以证明下界的存在性,但它通常是非构造性的。寻找 Ramsey 数的构造性下界仍然是一个活跃的研究领域。对于某些特定的 \(r\) 和 \(s\),人们可以通过构造特定的图着色来获得更好的下界。 例如,为了证明 \(R(3, 3) > 5\),我们需要构造一个 5 阶完全图 \(K_5\) 的红蓝边着色,使得其中既不包含红色 \(K_3\),也不包含蓝色 \(K_3\)。这样的着色是存在的,例如,可以使用五边形的边和对角线来分别表示红色和蓝色。 总结 Ramsey 数的界限研究是 Ramsey 理论的重要组成部分。虽然我们对 Ramsey 数的精确值知之甚少,但通过上界和下界的研究,我们对 Ramsey 数的大小有了更深入的了解。特别是 Erdős 使用概率方法证明 Ramsey 数的指数下界,展示了概率方法在组合数学中的强大威力。 Ramsey 数的概念可以推广到一般的图。图 Ramsey 数考虑的是在完全图的边着色中,必然出现的特定子图。 定义 10.2.1 (图 Ramsey 数 (Graph Ramsey Number)) 对于给定的图 \(G_1, G_2, \dots, G_k\),图 Ramsey 数 \(R(G_1, G_2, \dots, G_k)\) 是最小的正整数 \(n\),使得对完全图 \(K_n\) 的边进行 \(k\) 色着色,必然存在某个颜色 \(i \in \{1, 2, \dots, k\}\),使得颜色 \(i\) 的子图包含 \(G_i\) 作为子图。 当 \(k = 2\) 时,图 Ramsey 数 \(R(G_1, G_2)\) 是最小的正整数 \(n\),使得对 \(K_n\) 的边进行红蓝二着色,必然包含红色 \(G_1\) 或蓝色 \(G_2\) 作为子图。 与经典 Ramsey 数的关系 经典的 Ramsey 数 \(R(r, s)\) 可以看作是图 Ramsey 数 \(R(K_r, K_s)\)。 基本性质 ① 对称性: \(R(G_1, G_2) = R(G_2, G_1)\)。 ② 单调性: 如果 \(G_1' \subseteq G_1\) 且 \(G_2' \subseteq G_2\),则 \(R(G_1', G_2') \leq R(G_1, G_2)\)。 ③ 与连通分支的关系: 如果 \(G\) 是不连通图,设 \(G = G^{(1)} \cup G^{(2)} \cup \dots \cup G^{(c)}\) 是其连通分支分解,则 \(R(G, H) \geq \max_{i} R(G^{(i)}, H)\)。 ④ 退化情况: \(R(K_1, G) = 1\),\(R(K_2, G)\) 是使得 \(K_{R(K_2, G)}\) 包含 \(G\) 作为子图的最小整数。例如,如果 \(G = K_m\),则 \(R(K_2, K_m) = m\)。 一些图 Ramsey 数的值 ⚝ \(R(K_3, K_3) = 6\) 计算图 Ramsey 数的困难性 与经典 Ramsey 数类似,计算图 Ramsey 数也非常困难。即使对于相对简单的图,确定图 Ramsey 数的值也可能是一个挑战。目前,只有少数图 Ramsey 数的精确值被确定。 确定小 Ramsey 数的值通常需要结合上界和下界的证明。上界可以通过 Ramsey 定理的证明方法或更精细的组合分析得到。下界则需要构造特定的着色方案来避免出现目标子图。 确定 \(R(3, 3) = 6\) 我们已经证明了 \(R(3, 3) \leq 6\)(朋友与陌生人问题)。为了证明 \(R(3, 3) = 6\),还需要证明 \(R(3, 3) > 5\),即存在 \(K_5\) 的红蓝边着色,使得其中既不包含红色 \(K_3\),也不包含蓝色 \(K_3\)。 构造 \(K_5\) 的无 \(K_3\) 单色着色 考虑正五边形 \(v_1v_2v_3v_4v_5\)。将 \(K_5\) 的顶点标记为 \(v_1, v_2, v_3, v_4, v_5\)。 验证这个着色方案不包含单色 \(K_3\)。 ① 红色三角形: 任何三个顶点都不能构成红色三角形。因为红色边构成一个 5 圈,任何三个顶点最多只能有两条红色边相连。 ② 蓝色三角形: 任何三个顶点也不能构成蓝色三角形。考虑任意三个顶点,例如 \(v_1, v_2, v_3\)。蓝色边为 \((v_1, v_3), (v_1, v_4), (v_2, v_4), (v_2, v_5), (v_3, v_5)\)。在 \(\{v_1, v_2, v_3\}\) 中,只有边 \((v_1, v_3)\) 是蓝色的。因此,\(\{v_1, v_2, v_3\}\) 不构成蓝色三角形。类似地,可以验证任何三个顶点都不构成蓝色三角形。 因此,我们构造了一个 \(K_5\) 的红蓝边着色,其中不包含单色 \(K_3\)。所以 \(R(3, 3) > 5\)。结合 \(R(3, 3) \leq 6\),我们得到 \(R(3, 3) = 6\)。 确定 \(R(3, 4) = 9\) 证明 \(R(3, 4) = 9\) 更加复杂,需要更精细的分析和构造。 ⚝ 上界 \(R(3, 4) \leq 9\): 可以使用 Ramsey 定理的证明方法,结合递推不等式 \(R(3, 4) \leq R(2, 4) + R(3, 3) = 4 + 6 = 10\)。更精细的分析可以证明 \(R(3, 4) \leq 9\)。 通过复杂的组合构造和分析,最终确定 \(R(3, 4) = 9\)。 计算机辅助计算 对于更大的 Ramsey 数,手动计算变得非常困难。计算机搜索和算法在确定小 Ramsey 数的值中发挥了重要作用。例如,\(R(4, 4) = 18\) 的确定就很大程度上依赖于计算机的辅助。 总结 确定小 Ramsey 数的值是一个充满挑战但又非常有趣的问题。它需要结合理论分析、组合构造和计算机辅助计算等多种方法。对小 Ramsey 数的研究不仅加深了我们对 Ramsey 理论的理解,也推动了组合数学方法的发展。 Ramsey 理论不仅适用于有限结构,也适用于无穷结构。无穷 Ramsey 理论研究的是无穷集合上的 Ramsey 型性质。最基本的结果是无穷 Ramsey 定理,也称为 Ramsey 定理的无穷形式。 定理 10.3.1 (无穷 Ramsey 定理 (Infinite Ramsey Theorem)) 设 \(S\) 是一个无穷集合,将 \(S\) 的所有 \(k\) 元子集进行 \(c\) 色着色。则存在一个无穷子集 \(S' \subseteq S\),使得 \(S'\) 的所有 \(k\) 元子集都具有相同的颜色。 当 \(k = 2, c = 2\) 时,定理描述为:将无穷集合 \(S\) 的所有二元子集(即无序对)涂成红色或蓝色,则存在一个无穷子集 \(S' \subseteq S\),使得 \(S'\) 的所有二元子集都是红色,或者都是蓝色。 证明 (对于 \(k = 2, c = 2\) 的情况): 设 \(S\) 是一个无穷集合,将 \(S\) 的所有二元子集进行红蓝二着色。我们构造一个无穷序列 \(v_1, v_2, v_3, \dots\) 和无穷子集序列 \(S_0 \supseteq S_1 \supseteq S_2 \supseteq \dots\)。 ① 令 \(S_0 = S\),任取 \(v_1 \in S_0\)。考虑 \(v_1\) 与 \(S_0 \setminus \{v_1\}\) 中所有元素构成的二元子集 \(\{v_1, x\}\),其中 \(x \in S_0 \setminus \{v_1\}\)。由于颜色只有两种(红色或蓝色),且 \(S_0 \setminus \{v_1\}\) 是无穷集,所以存在一种颜色(不妨设为 \(c_1\),红色或蓝色),以及一个无穷子集 \(S_1 \subseteq S_0 \setminus \{v_1\}\),使得对于所有 \(x \in S_1\),边 \(\{v_1, x\}\) 的颜色都是 \(c_1\)。 ② 任取 \(v_2 \in S_1\)。考虑 \(v_2\) 与 \(S_1 \setminus \{v_2\}\) 中所有元素构成的二元子集 \(\{v_2, x\}\),其中 \(x \in S_1 \setminus \{v_2\}\)。同样,存在一种颜色(不妨设为 \(c_2\),红色或蓝色),以及一个无穷子集 \(S_2 \subseteq S_1 \setminus \{v_2\}\),使得对于所有 \(x \in S_2\),边 \(\{v_2, x\}\) 的颜色都是 \(c_2\)。 ③ 依此类推,我们可以构造无穷序列 \(v_1, v_2, v_3, \dots\) 和无穷子集序列 \(S_0 \supseteq S_1 \supseteq S_2 \supseteq \dots\),以及颜色序列 \(c_1, c_2, c_3, \dots\),使得对于每个 \(i\),以及所有 \(x \in S_i\),边 \(\{v_i, x\}\) 的颜色都是 \(c_i\)。 现在考虑颜色序列 \(c_1, c_2, c_3, \dots\)。由于颜色只有两种(红色或蓝色),所以必然存在一种颜色(不妨设为红色)在序列中出现无穷多次。设红色在序列中出现的位置为 \(i_1 < i_2 < i_3 < \dots\)。 考虑无穷子集 \(S' = \{v_{i_1}, v_{i_2}, v_{i_3}, \dots\}\)。对于任意两个元素 \(v_{i_j}, v_{i_k} \in S'\)(不妨设 \(j < k\),即 \(i_j < i_k\),所以 \(v_{i_j}\) 在序列中先出现),边 \(\{v_{i_j}, v_{i_k}\}\) 的颜色是什么呢?由于 \(v_{i_k} \in S_{i_k-1} \subseteq S_{i_j}\),根据构造,边 \(\{v_{i_j}, v_{i_k}\}\) 的颜色是 \(c_{i_j}\)。由于 \(i_j\) 是红色出现的位置,所以 \(c_{i_j}\) 是红色。 因此,\(S'\) 的所有二元子集都是红色的。我们找到了一个无穷同色子集。 推广到一般情况 对于一般的 \(k\) 元子集和 \(c\) 色着色,无穷 Ramsey 定理的证明可以使用类似的迭代方法,但需要更精细的论证。 无穷 Ramsey 定理在逻辑学、集合论、数论等领域有重要的应用。它也是 Ramsey 理论进一步拓展的基础。 应用 ① 数论中的 Van der Waerden 定理: Van der Waerden 定理是 Ramsey 理论在数论中的一个经典应用。它断言,对于任意正整数 \(k\) 和 \(c\),存在一个正整数 \(N\),使得对于任何将 \(\{1, 2, \dots, N\}\) 划分为 \(c\) 个颜色的方案,都存在一个颜色,使得该颜色包含一个长度为 \(k\) 的算术 progression (arithmetic progression)。Van der Waerden 定理可以从无穷 Ramsey 定理导出。 ② 逻辑学中的应用: 无穷 Ramsey 定理在证明某些逻辑命题的独立性或不可判定性方面有应用。 拓展 ① Erdős-Rado 箭号记号 (Arrow Notation): Erdős 和 Rado 引入了箭号记号来表示 Ramsey 型定理。例如,\(n \rightarrow (r, s)\) 表示对于 \(K_n\) 的红蓝边着色,必然包含红色 \(K_r\) 或蓝色 \(K_s\)。使用箭号记号可以更简洁地表达 Ramsey 型定理和问题。 ② Partition Ramsey Theory: Partition Ramsey Theory 研究的是将集合划分为多个部分时的 Ramsey 型性质。例如,Schur 定理是 Partition Ramsey Theory 的一个早期结果。 ③ Ramsey Theory on Graphs and Hypergraphs: Ramsey 理论被广泛推广到图和超图 (hypergraph) 上。图 Ramsey 数是其中的一个重要方向。超图 Ramsey 理论研究的是超图的边或超边着色下的 Ramsey 型性质。 ④ 计算机科学中的应用: Ramsey 理论的思想和方法在计算机科学中也有一定的应用,例如在算法设计、复杂性分析、网络理论等方面。 总结 无穷 Ramsey 理论是 Ramsey 理论的重要组成部分,它将 Ramsey 理论从有限领域拓展到无穷领域。无穷 Ramsey 定理是无穷 Ramsey 理论的基石,它在数学的多个分支中都有重要的应用。对无穷 Ramsey 理论的研究不仅深化了我们对 Ramsey 现象的理解,也为解决其他领域的数学问题提供了有力的工具。 概率方法 (Probabilistic Method) 是一种在组合数学中非常强大的非构造性证明方法。其核心思想是通过概率论的工具来证明某些组合对象的存在性,而无需显式地构造出这些对象。这种方法尤其适用于解决那些直接构造非常困难或者不可能的问题。概率方法主要依赖于以下两个基本思想: 存在性证明 (Existence Proofs) 是概率方法最基础的应用。其核心思想可以概括为:如果一个随机事件发生的概率大于零,那么就存在至少一个样本点使得该事件发生。在组合数学的语境下,我们通常会定义一个合适的概率空间,并在该空间中定义一个或多个“好的”事件。如果能够证明这些“好的”事件发生的概率之和大于零(或者至少有一个“好的”事件概率大于零),那么就可以断言存在满足特定性质的组合对象。 更具体地说,存在性证明的步骤通常如下: 案例 1:拉姆齐数下界 拉姆齐数 \( R(k, l) \) 是指,对于任意图 \( G \),要么 \( G \) 包含一个 \( k \) 个顶点的团 (clique) \( K_k \),要么其补图 \( \overline{G} \) 包含一个 \( l \) 个顶点的独立集 (independent set) \( I_l \)。拉姆齐定理保证了 \( R(k, l) \) 的存在性。使用概率方法可以证明拉姆齐数的下界。例如,证明 \( R(k, k) > 2^{k/2 - 1} \) (对于 \( k \ge 3 \))。 证明思路: 为了找到满足条件的 \( n \),我们需要解不等式 \( \binom{n}{k} \cdot 2^{1 - \binom{k}{2}} < 1 \)。使用粗略的估计 \( \binom{n}{k} < \frac{n^k}{k!} < (\frac{en}{k})^k \),并取 \( k \ge 3 \),我们可以简化不等式为: 期望值方法 (Method of Expectation) 是概率方法的另一个重要分支。其核心思想是:如果一个随机变量的期望值是 \( E \),那么一定存在一个样本点,使得该随机变量的值不大于 \( E \),也一定存在一个样本点,使得该随机变量的值不小于 \( E \)。换句话说,如果平均值是 \( E \),那么必然有至少一个值达到或超过平均值,也必然有至少一个值达到或低于平均值。 期望值方法的步骤通常如下: 案例 2:最大割问题 给定一个图 \( G = (V, E) \),割 (cut) 是指将顶点集 \( V \) 划分为两个不相交的子集 \( S \) 和 \( V \setminus S \)。割的大小 (size of cut) 是指横跨割的边数,即一个端点在 \( S \) 中,另一个端点在 \( V \setminus S \) 中的边数。最大割问题 (Max-Cut problem) 是寻找一个割,使其大小最大。使用期望值方法可以证明,任何图都存在一个割,其大小至少为总边数的一半。 证明思路: 概率方法的存在性证明和期望值方法是组合数学中非常有用的工具,它们提供了一种非构造性的方式来证明某些组合结构的存在性,尤其在解决复杂和难以直接构造的问题时显得非常有效。 概率方法在图论 (Graph Theory) 中有着广泛而深刻的应用。从拉姆齐数的下界估计到随机图的性质研究,概率方法为图论问题的解决提供了新的视角和强大的工具。 正如 11.1.1 节的案例 1 所述,概率方法是估计拉姆齐数下界的有效手段。通过随机染色完全图的边,并计算出现单色团的概率,我们可以证明某些拉姆齐数下界的结果。 改进的下界 更精细的分析可以得到更好的拉姆齐数下界。例如,使用更复杂的概率论技巧,可以改进 \( R(k, k) \) 的下界。Erdős 在 1947 年首次使用概率方法证明了 \( R(k, k) \ge 2^{k/2} / \sqrt{2} \) 量级的结果,这比之前的构造性方法得到的下界有了显著提升。 非对角拉姆齐数 概率方法同样可以用于研究非对角拉姆齐数 \( R(k, l) \) 的下界。例如,我们可以考虑估计 \( R(3, k) \) 的下界。通过类似的随机染色方法,可以得到 \( R(3, k) = \Omega(k^2 / \log k) \) 的下界。 局部引理的应用 对于更复杂的拉姆齐数问题,例如多色拉姆齐数,简单的联合界可能不够精确。这时,更高级的概率工具,如 Lovász 局部引理 (Lovász Local Lemma),可以发挥作用,得到更强的存在性结果。 随机图 (Random Graphs) 本身就是概率方法在图论中的重要应用领域。随机图理论研究的是随机生成的图的性质。最经典的模型是 Erdős-Rényi 随机图模型 \( G(n, p) \)。 Erdős-Rényi 随机图模型 \( G(n, p) \) 在 \( G(n, p) \) 模型中,我们考虑 \( n \) 个顶点的图,对于每对顶点 \( (i, j) \),以概率 \( p \) 独立地决定是否连接一条边。参数 \( p \) 可以是常数,也可以是关于 \( n \) 的函数。 阈值现象 (Threshold Phenomena) 随机图理论中一个重要的概念是阈值现象 (Threshold Phenomena)。对于图的某个性质 \( Q \),如果存在一个函数 \( t(n) \),使得当 \( p(n) \ll t(n) \) 时,随机图 \( G(n, p(n)) \) 几乎必然不具有性质 \( Q \),而当 \( p(n) \gg t(n) \) 时,随机图 \( G(n, p(n)) \) 几乎必然具有性质 \( Q \),则称 \( t(n) \) 是性质 \( Q \) 的一个阈值函数。 例如,图的连通性 (connectivity) 就存在阈值现象。当 \( p(n) = \frac{\ln n}{n} \) 时,是图连通性的一个阈值。当 \( p(n) = o(\frac{\ln n}{n}) \) 时,随机图几乎必然不连通;当 \( p(n) = \omega(\frac{\ln n}{n}) \) 时,随机图几乎必然连通。 图的性质 随机图理论研究各种图的性质,例如: 应用 随机图理论不仅在理论研究中具有重要价值,也在计算机科学、网络科学等领域有广泛应用。例如,在社交网络、复杂网络建模、算法设计与分析等方面,随机图模型都提供了有力的工具。 Lovász 局部引理 (Lovász Local Lemma, LLL) 是概率方法中一个非常强大的工具,尤其在处理“坏”事件之间依赖性较弱的情况时。与联合界不同,局部引理允许我们处理事件之间存在一定依赖性的情况,从而得到更强的存在性结果。 对称形式的 Lovász 局部引理 (Symmetric Lovász Local Lemma) 设 \( A_1, A_2, \ldots, A_n \) 是一组事件。如果对于每个 \( i \),事件 \( A_i \) 与除至多 \( d \) 个其他事件之外的所有事件都相互独立,并且对于所有 \( i \),\( P(A_i) \le p \),如果 \( ep(d+1) \le 1 \),其中 \( e \) 是自然对数的底数,则 \( P(\bigcap_{i=1}^{n} \overline{A_i}) > 0 \)。 非对称形式的 Lovász 局部引理 (Asymmetric Lovász Local Lemma) 设 \( A_1, A_2, \ldots, A_n \) 是一组事件。对于每个 \( i \),设 \( \Gamma(i) \) 是指标集 \( \{1, 2, \ldots, n\} \) 中与 \( A_i \) 不独立的事件的指标集合(不包括 \( i \) 本身)。如果存在实数 \( x_1, x_2, \ldots, x_n \in [0, 1) \) 使得对于所有 \( i \), 对称形式是非对称形式的一个特例,当所有 \( P(A_i) \le p \),且每个事件 \( A_i \) 与至多 \( d \) 个其他事件不独立时,我们可以取所有 \( x_i = 1/(d+1) \)。此时条件变为 \( P(A_i) \le \frac{1}{d+1} (1 - \frac{1}{d+1})^d \approx \frac{1}{e(d+1)} \)。更精确的条件是 \( ep(d+1) \le 1 \)。 应用案例:图的正常 \( k \)-着色 给定一个图 \( G = (V, E) \),正常 \( k \)-着色 (proper \( k \)-coloring) 是指使用 \( k \) 种颜色对顶点进行着色,使得任意相邻的两个顶点颜色不同。我们可以使用 Lovász 局部引理证明,如果图 \( G \) 的最大度 (maximum degree) 为 \( \Delta \),且 \( k \ge e(\Delta + 1) \),则 \( G \) 存在正常 \( k \)-着色。 证明思路: Lovász 局部引理的核心思想在于处理当“坏”事件发生概率很小,且彼此之间依赖性不强时,如何证明“所有坏事件都不发生”的可能性。在组合数学和计算机科学中,很多存在性问题可以转化为避免一系列“坏”事件的问题。 应用领域 Lovász 局部引理在以下领域有广泛应用: 条件放宽 相比于简单的联合界,Lovász 局部引理大大放宽了对事件独立性的要求。联合界要求事件之间几乎完全独立,而局部引理只需要事件之间的依赖性是“局部”的,即每个事件只与少数其他事件有依赖关系。这使得局部引理在很多实际问题中更加适用。 局限性 虽然 Lovász 局部引理非常强大,但它本质上仍然是一个存在性证明工具,它只证明了满足条件的组合对象的存在性,而没有提供构造性方法。在某些情况下,找到满足局部引理条件的参数可能比较困难,或者即使证明了存在性,如何构造出满足条件的对象仍然是一个挑战。尽管如此,Lovász 局部引理仍然是概率方法中一个不可或缺的重要组成部分,为解决各种组合存在性问题提供了强有力的理论武器。 代数组合学 (Algebraic Combinatorics) 是组合数学 (Combinatorics) 的一个分支,它使用抽象代数 (Abstract Algebra) 的工具来研究组合问题。群论 (Group Theory) 是代数学的基础,在计数问题中有着重要的应用。本节将回顾群论中的基本概念,为后续的伯恩赛德引理 (Burnside's Lemma) 和波利亚计数定理 (Pólya Enumeration Theorem) 奠定基础。 ① 群 (Group) 的定义: ② 例子: ③ 子群 (Subgroup): ④ 群同态与同构 (Group Homomorphism and Isomorphism): ⑤ 循环群 (Cyclic Group): ⑥ 置换群 (Permutation Group): 理解这些基本概念是学习伯恩赛德引理和波利亚计数定理的关键。群论提供了一种描述和分析对称性的有力工具,这在组合计数中尤其重要。 伯恩赛德引理 (Burnside's Lemma),有时也称为柯西-弗罗贝尼乌斯引理 (Cauchy-Frobenius Lemma),是组合计数中的一个重要工具,尤其在计算在群作用下不等价的对象的数量时非常有效。它将群作用 (group action) 的轨道 (orbit) 数与群元素的固定点 (fixed point) 数联系起来。 ① 群作用 (Group Action): 类似地,可以定义右作用 (right action)。在组合计数中,左作用更为常用。 ② 轨道 (Orbit) 与固定点 (Fixed Point): ③ 伯恩赛德引理 (Burnside's Lemma) 的叙述: ④ 伯恩赛德引理的证明思路: 利用双计数 (double counting) 的思想,考虑集合 \( S = \{(g, x) \in G \times X \mid g \cdot x = x\} \)。 将 \( X \) 分解为互不相交的轨道 \( X = \bigcup_{O \in X/G} O \)。则 ⑤ 应用例子: ⚝ 应用伯恩赛德引理: 伯恩赛德引理提供了一种系统的方法来处理具有对称性的计数问题,关键在于确定群的作用和计算每个群元素的固定点数。 波利亚计数定理 (Pólya Enumeration Theorem) 是伯恩赛德引理的进一步推广和深化,它不仅可以计算在群作用下不等价的对象的数量,还可以给出各种不等价对象的具体计数,例如,按照颜色分类计数。波利亚计数定理在化学分子计数、电路设计等领域有广泛应用。 ① 轮换指标 (Cycle Index): ② 模式清单 (Pattern Inventory): ③ 波利亚计数定理 (Pólya Enumeration Theorem) 的叙述: ④ 应用例子: ⚝ 计算轮换指标 \( P_{C_4}(x_1, x_2, x_3, x_4) \): ⚝ 计算不等价染色方案总数 (令颜色数为 2,即 \( |R| = 2 \)): 例 3: 用红、蓝两种颜色给正方形的顶点染色,考虑旋转对称性,求红色顶点数为 0, 1, 2, 3, 4 的不等价染色方案数。 波利亚计数定理是更强大的计数工具,可以处理更精细的计数问题,例如按照某种属性分类计数。关键在于计算群的轮换指标,并合理选择颜色权函数。 关联代数 (Incidence Algebra) 是研究偏序集 (Partially Ordered Set, poset) 上函数代数结构的理论。它在组合数学中有很多应用,特别是在反演理论 (Inversion Theory) 和组合恒等式 (Combinatorial Identities) 的证明中。 ① 偏序集 (Partially Ordered Set, Poset): ② 局部有限偏序集 (Locally Finite Poset): ③ 关联代数 (Incidence Algebra) 的定义: 在卷积运算下,关联代数 \( I(P) \) 构成一个结合代数 (associative algebra)。 ④ 关联代数中的重要函数: ⑤ 莫比乌斯反演公式 (Möbius Inversion Formula): 莫比乌斯反演公式提供了一种从累积和 (或累积积) 中反解出原始函数的方法。 ⑥ 关联代数的应用: ⚝ 组合计数: 莫比乌斯反演公式可以用来解决很多组合计数问题,例如计算满足特定条件的对象的数量。通过建立适当的偏序关系和定义相关函数,可以利用莫比乌斯反演公式得到计数结果。 ⚝ 组合恒等式证明: 关联代数和莫比乌斯反演公式是证明组合恒等式的有力工具。通过将恒等式转化为关联代数中的函数关系,可以利用卷积运算和反演公式进行证明。 关联代数提供了一种代数方法来证明组合恒等式。许多组合恒等式可以看作是关联代数中某些函数关系的体现。利用关联代数的性质,特别是卷积运算和莫比乌斯反演公式,可以给出这些恒等式的简洁而深刻的证明。 ① 利用卷积证明恒等式: 从关联代数的角度,考虑偏序集 \( (\mathbb{N}, \le) \),其中 \( \mathbb{N} = \{0, 1, 2, \ldots\} \)。定义函数 \( f, g, h \in I(\mathbb{N}) \) 如下: 考虑卷积 \( (f * g)(0, n) = \sum_{0 \le k \le n} f(0, k) g(k, n) = \sum_{k=0}^n \binom{k-0}{0} \binom{n-k}{n-k} = \sum_{k=0}^n 1 \cdot 1 = n+1 \)。这似乎与恒等式无关。 换一个思路,考虑组合意义。\( \sum_{k=0}^n \binom{n}{k} \) 可以看作是计算 \( n \) 元集合子集数。考虑函数 \( u(x, y) = 1 \) 如果 \( x \le y \),否则为 0 (即 zeta 函数 \( \zeta \))。考虑函数 \( \delta(x, y) \) (狄拉克 delta 函数)。我们知道 \( \zeta * \mu = \delta \)。 考虑另一个恒等式: 考虑二项式定理 \( (x+y)^n = \sum_{k=0}^n \binom{n}{k} x^{n-k} y^k \)。 ② 利用莫比乌斯反演证明恒等式: 考虑恒等式 \( \sum_{d|n} \mu(d) = \delta_{n, 1} \),其中 \( \delta_{n, 1} = \begin{cases} 1, & \text{if } n = 1 \\ 0, & \text{if } n > 1 \end{cases} \)。 关联代数和莫比乌斯反演公式为组合恒等式的证明提供了一种强大的代数框架,通过将组合问题转化为代数关系,可以更深入地理解和证明各种组合恒等式。 网络流 (Network Flow) 是组合优化中的一个重要分支,它研究在一个网络中如何有效地输送“流”。这里的“网络”通常指的是一个有向图,其中边具有容量限制,而“流”可以是各种各样的东西,例如水、电、数据包或产品。网络流理论不仅在理论计算机科学中占有重要地位,而且在运筹学、工业工程、交通运输、通信网络等领域都有广泛的应用。 最大流最小割定理 (Max-flow Min-cut Theorem) 是网络流理论的核心定理之一。它揭示了网络中最大可能的流量与最小割之间的深刻联系。为了理解这个定理,我们首先需要定义一些基本概念。 ① 网络 (Network):一个网络 \(G = (V, E)\) 是一个有向图,其中 \(V\) 是顶点集合,\(E\) 是边集合。网络中包含一个源点 (source) \(s \in V\) 和一个汇点 (sink) \(t \in V\)。每条边 \((u, v) \in E\) 都有一个容量 (capacity) \(c(u, v) \ge 0\),表示这条边可以输送的最大流量。 ② 流 (Flow):一个从源点 \(s\) 到汇点 \(t\) 的流是一个函数 \(f: E \rightarrow \mathbb{R}^+\),满足以下两个条件: ③ 流的值 (Value of Flow):一个流 \(f\) 的值 \(|f|\) 定义为从源点 \(s\) 流出的总流量减去流入源点 \(s\) 的总流量。由于通常网络中只考虑从源点到汇点的流,流入源点的流量通常为0,因此流的值可以简化为从源点流出的总流量,或者等价地,流入汇点的总流量(根据流量守恒)。更精确地,\(|f| = \sum_{v:(s, v) \in E} f(s, v) - \sum_{u:(u, s) \in E} f(u, s)\)。 ④ 割 (Cut):一个 \(s-t\) 割 (s-t cut) 是将顶点集合 \(V\) 划分为两个不相交的集合 \(S\) 和 \(T\) 的划分,使得 \(s \in S\) 且 \(t \in T\)。我们记为 \([S, T]\)。 ⑤ 割的容量 (Capacity of Cut):一个 \(s-t\) 割 \([S, T]\) 的容量 \(c(S, T)\) 定义为从集合 \(S\) 到集合 \(T\) 的所有边的容量之和,即 \(c(S, T) = \sum_{u \in S, v \in T, (u, v) \in E} c(u, v)\)。 有了这些定义,我们现在可以陈述最大流最小割定理: 最大流最小割定理 (Max-flow Min-cut Theorem):在一个网络中,从源点 \(s\) 到汇点 \(t\) 的最大流的值等于所有 \(s-t\) 割的容量的最小值。 \[ \max_{f} |f| = \min_{[S, T]} c(S, T) \] 这个定理的意义在于它提供了一种计算最大流的方法,同时也揭示了最大流和最小割之间的对偶关系。它表明,为了找到网络的最大流量,我们只需要找到一个容量最小的割。 定理证明概要: ① 最大流的值小于等于任何割的容量: ② 存在一个流,其值等于某个割的容量: 最大流最小割定理不仅是一个理论结果,也是解决实际问题的强大工具。例如,在通信网络中,我们可以用它来分析网络的瓶颈,找到限制数据传输速率的关键链路。在物流和供应链管理中,它可以用来优化货物运输路径,最大化运输效率。 为了找到网络中的最大流,人们开发了多种算法。以下介绍几种经典的最大流算法: ① Ford-Fulkerson 算法 ⚝ ⚝ 增广路径 (Augmenting Path):在残留网络 (residual network) 中,一条从源点 \(s\) 到汇点 \(t\) 的路径被称为增广路径。残留网络表示了网络中还可以增加流量的空间。对于原图 \(G\) 和当前流 \(f\),残留网络 \(G_f\) 的构造如下: ⚝ 算法步骤: Ford-Fulkerson 算法的正确性基于最大流最小割定理。当算法终止时,残留网络中不存在增广路径,这意味着从源点 \(s\) 在残留网络中不可达汇点 \(t\)。我们可以构造一个割 \([S, T]\),其中 \(S\) 是从 \(s\) 在残留网络中可达的顶点集合,\(T = V \setminus S\)。可以证明这个割的容量等于当前流的值,因此当前流是最大流,割是最小割。 ⚝ 算法复杂度:Ford-Fulkerson 算法的时间复杂度取决于增广路径的选择和网络容量。在最坏情况下,如果容量是整数,且每次增广路径选择不当,算法的迭代次数可能很大,时间复杂度可能达到 \(O(|E| \cdot |f_{max}|)\),其中 \(|f_{max}|\) 是最大流的值。如果容量是实数,算法甚至可能不终止。 ② Edmonds-Karp 算法 ⚝ ⚝ 算法步骤:与 Ford-Fulkerson 算法类似,只是在步骤 ⓒ 中,使用 BFS 寻找最短增广路径。 ⚝ 算法复杂度:Edmonds-Karp 算法的时间复杂度为 \(O(|V| \cdot |E|^2)\),与最大流的值无关,因此效率更高,且对于任意容量(包括实数容量)都能保证终止。 ③ Dinic 算法 ⚝ ⚝ 层次图:层次图是残留网络的一个子图,只包含从源点 \(s\) 出发,通过最短路径可达的顶点和边。顶点 \(v\) 的层次 \(level(v)\) 定义为从 \(s\) 到 \(v\) 的最短路径长度。层次图只包含满足 \(level(v) = level(u) + 1\) 的边 \((u, v)\)。 ⚝ 阻塞流:在层次图中,一个阻塞流是指从源点 \(s\) 到汇点 \(t\) 的流,使得在层次图中从 \(s\) 到 \(t\) 的任何路径上至少有一条边被“饱和”(即流量等于容量)。 ⚝ 算法步骤: ⚝ 算法复杂度:Dinic 算法的时间复杂度为 \(O(|V|^2 \cdot |E|)\)。在实际应用中,Dinic 算法通常比 Edmonds-Karp 算法更快。 选择合适的算法取决于具体的应用场景和网络规模。对于稠密图,Dinic 算法通常是更好的选择。对于稀疏图,Edmonds-Karp 算法可能也足够高效。Ford-Fulkerson 算法虽然概念简单,但在实际应用中效率较低,通常只作为理论分析的工具。 在之前的章节中,我们已经介绍了图的匹配问题。这里我们将进一步探讨匹配问题,特别是最大权匹配 (maximum weight matching) 问题,并讨论匹配问题在实际问题中的应用。 在许多实际应用中,图的边不仅有容量,还可能有关联的权重。例如,在婚介问题中,边可以表示两个人之间的匹配可能性,权重可以表示匹配的满意度。最大权匹配问题 (maximum weight matching problem) 的目标是在图中找到一个匹配,使得匹配中所有边的权重之和最大。 ① 定义:给定一个无权图 \(G = (V, E)\),每条边 \(e \in E\) 都有一个权重 \(w(e)\)。一个匹配 \(M \subseteq E\) 的权重 \(w(M)\) 定义为匹配中所有边的权重之和,即 \(w(M) = \sum_{e \in M} w(e)\)。最大权匹配问题是找到一个匹配 \(M\),使得 \(w(M)\) 最大。 ② 最大权完美匹配 (Maximum Weight Perfect Matching):如果要求匹配是完美匹配 (perfect matching),则问题变为最大权完美匹配问题。完美匹配是指匹配覆盖了图的所有顶点。只有当图的顶点数是偶数时,才可能存在完美匹配。 ③ 算法:解决最大权匹配问题有多种算法,其中最经典的是 Edmonds' Blossom 算法。Blossom 算法最初用于解决最大基数匹配问题,后来被推广到最大权匹配问题。Blossom 算法的核心思想是处理奇环 (odd cycle),也称为“花 (blossom)”。 ⚝ Blossom 算法的基本思想: ⚝ 花 (Blossom):在寻找增广路径的过程中,可能会遇到奇环。当遇到奇环时,简单的增广路径方法可能会失效。Blossom 算法的关键在于如何处理这些奇环。Blossom 算法将奇环“收缩 (shrink)”成一个伪顶点 (pseudovertex),然后继续寻找增广路径。当找到增广路径后,再将伪顶点“展开 (expand)”回奇环,并更新匹配。 ⚝ 算法步骤(简要描述): Blossom 算法的实现较为复杂,涉及到花的收缩和展开等操作。其时间复杂度取决于具体的实现方式,但通常是多项式时间的。 ④ 匈牙利算法的推广:对于二分图的最大权匹配问题,可以使用匈牙利算法的推广版本,例如 Kuhn-Munkres 算法(也称为匈牙利算法的加权版本)。Kuhn-Munkres 算法利用势函数 (potential function) 的概念,通过不断调整势函数和匹配,最终找到最大权匹配。Kuhn-Munkres 算法的时间复杂度为 \(O(|V|^3)\)。 匹配问题及其变种在实际生活中有着广泛的应用。以下列举一些典型的应用场景: ① 婚介问题 (Assignment Problem) ⚝ ② 任务分配问题 (Task Assignment Problem) ⚝ ③ 交通调度 (Traffic Scheduling) ⚝ ④ 图像处理 (Image Processing) ⚝ ⑤ 生物信息学 (Bioinformatics) ⚝ ⑥ 社交网络 (Social Networks) ⚝ 总而言之,组合优化中的匹配问题和网络流问题不仅具有深刻的理论意义,而且在解决实际问题中发挥着重要作用。通过将实际问题建模为图论问题,并利用相应的算法,我们可以找到最优或近似最优的解决方案,从而提高效率、降低成本、优化资源配置。 在组合数学中,符号方法 (Symbolic Method) 提供了一种强大的框架,用于系统地构建和分析 组合结构 (combinatorial structures)。其核心思想是将组合结构视为由基本构建块通过特定操作组合而成的对象,并使用 生成函数 (generating functions) 来编码这些结构的计数信息。组合类 (combinatorial class) 是符号方法的基础概念。 定义 14.1.1 (组合类):一个 组合类 (combinatorial class) \( \mathcal{C} \) 是一个可数集合,并伴随一个 大小函数 (size function) \( |\cdot| : \mathcal{C} \rightarrow \mathbb{N} \),满足对于任意 \( n \in \mathbb{N} \),集合 \( \mathcal{C}_n = \{ \gamma \in \mathcal{C} \mid |\gamma| = n \} \) 是有限的。我们通常用 \( c_n = |\mathcal{C}_n| \) 表示大小为 \( n \) 的 \( \mathcal{C} \) 类对象的数量。 简单来说,一个组合类就是一类我们想要计数的组合对象,并且这些对象有一个非负整数的大小,相同大小的对象数量是有限的。 示例 14.1.1 (组合类的例子): 组合类的基本运算 (Basic Operations on Combinatorial Classes): ① 不交并 (Disjoint Union): ② 笛卡尔积 (Cartesian Product): ③ 序列构造 (Sequence Construction): ④ 集合构造 (Set Construction): ⑤ 循环构造 (Cycle Construction): 原子类 (Atomic Class): 通过这些基本运算和原子类,我们可以构建和分析各种复杂的组合结构,并使用生成函数来解决计数问题。符号方法的核心思想是将组合结构的构建过程直接转化为生成函数之间的运算关系,从而简化计数分析。 符号方法在组合计数中有着广泛的应用。通过将组合结构的描述转化为符号方程,我们可以自动地得到生成函数方程,进而求解计数问题。 示例 14.1.2 (单词计数): 示例 14.1.3 (平面二叉树计数): 示例 14.1.4 (有标号连通图计数): 符号方法提供了一种系统化的方法来处理各种组合计数问题。通过将组合结构的定义转化为符号方程,并利用生成函数的运算规则,我们可以有效地推导出计数公式或生成函数方程,从而解决复杂的计数问题。 解析组合学 (Analytic Combinatorics) 是一门研究组合结构计数问题渐近性质的学科,它将 复分析 (complex analysis) 的工具应用于生成函数,以提取组合序列的渐近行为。奇点分析 (Singularity Analysis) 是解析组合学中的核心技术之一。 奇点 (Singularity):一个复函数 \( f(z) \) 在点 \( z_0 \) 处是 奇点 (singularity),如果 \( f(z) \) 在 \( z_0 \) 的某个邻域内不是解析的。对于生成函数,奇点的位置和性质决定了组合序列的渐近增长速度。 主奇点 (Dominant Singularity):对于一个生成函数 \( F(z) \),主奇点 (dominant singularity) 是指模最小的奇点。通常,组合生成函数的主奇点是实轴上的正实数 \( \rho \)。主奇点 \( \rho \) 的倒数 \( 1/\rho \) 与组合序列的指数增长速度有关。 奇点分析的基本思想: 转移定理 (Transfer Theorems): 定理 14.2.1 (转移定理 - 简化版): 常用奇点类型与渐近公式: ① 平方根奇点 (Square-root singularity): ② 对数奇点 (Logarithmic singularity): ③ 极点 (Pole): 奇点分析步骤: 奇点分析为我们提供了一种强大的工具,可以从生成函数中提取组合序列的渐近信息,从而深入理解组合结构的计数性质。 渐近计数 (Asymptotic Counting) 是组合数学的一个重要分支,旨在研究当 \( n \) 趋于无穷大时,组合对象计数 \( c_n \) 的渐近行为。解析组合学是进行渐近计数的主要工具。 目的: 常用方法: ② 鞍点法 (Saddle Point Method): ③ 概率方法 (Probabilistic Method): ④ 组合逼近 (Combinatorial Approximation): 渐近公式的类型: 应用示例 (渐近计数): 渐近计数在组合数学、计算机科学、物理学等领域都有广泛的应用。它可以帮助我们理解大规模组合结构的性质,估计算法的平均复杂度,以及在统计物理中研究相变行为等。解析组合学为渐近计数提供了理论基础和有效工具,使得我们可以深入分析复杂组合系统的计数行为。 组合数学在计算机科学中扮演着至关重要的角色。从算法设计与分析到数据结构,再到密码学和网络安全,组合数学的概念和技巧都得到了广泛的应用。它不仅为解决计算问题提供了理论基础,也为开发高效的算法和数据结构提供了数学工具。 组合数学是算法设计与分析的基石之一。许多算法问题的本质都是组合问题,例如计数、排列、选择、匹配等。理解组合数学原理能够帮助我们设计更高效、更优化的算法,并对算法的性能进行精确的分析。 ① 计数问题 (Counting Problems): ⚝ 例 1:考虑一个简单的排序算法,例如冒泡排序 (Bubble Sort)。为了分析其时间复杂度,我们需要计算在最坏情况下比较操作的次数。对于一个长度为 \(n\) 的数组,冒泡排序最多需要进行 \(\binom{n}{2} = \frac{n(n-1)}{2}\) 次比较。这个结果直接来源于组合数学中的组合公式。 ② 排列与组合优化 (Permutation and Combination Optimization): ⚝ 例 2:背包问题 (Knapsack Problem) 是一个经典的组合优化问题。给定一组物品,每种物品都有重量和价值,目标是在总重量不超过背包容量的前提下,使得背包中物品的总价值最大。解决背包问题可以使用动态规划算法,其状态转移方程的构建和优化过程就涉及到组合选择的思想。 ③ 图论算法 (Graph Algorithms): ⚝ 例 3:Dijkstra 算法是求解单源最短路径问题的经典算法。其核心思想是贪心策略,每次选择当前距离源点最近的顶点进行扩展。算法的正确性和效率分析都与图的结构和路径的组合性质密切相关。 ④ 随机算法 (Randomized Algorithms): ⚝ 例 4:考虑随机化的快速排序算法。通过随机选择 pivot 元素,可以使得算法在平均情况下达到 \(O(n \log n)\) 的时间复杂度。对快速排序平均情况下的比较次数进行分析,需要用到期望值 (Expectation) 和组合计数的知识。 ⑤ 算法复杂度分析 (Algorithm Complexity Analysis): ⚝ 例 5:分析归并排序 (Merge Sort) 的时间复杂度。归并排序采用分治策略,将数组递归地分成两半,排序后再合并。其时间复杂度可以通过递推关系式 \(T(n) = 2T(n/2) + O(n)\) 来描述,解这个递推关系式涉及到组合数学中的递推关系和生成函数等技巧。最终可以得到归并排序的时间复杂度为 \(O(n \log n)\)。 数据结构是计算机科学中存储和组织数据的方式。组合数学原理在数据结构的设计和分析中也发挥着重要作用。许多高效的数据结构,其设计思想都蕴含着组合数学的智慧。 ① 树 (Trees) 与图 (Graphs): ⚝ 例 1:二叉搜索树的平均查找时间复杂度与树的结构有关。在理想情况下,平衡的二叉搜索树可以达到 \(O(\log n)\) 的查找效率。树的平衡性、高度、节点数等性质都可以用组合数学的方法进行分析。 ② 哈希表 (Hash Tables): ⚝ 例 2:分析哈希表的平均查找时间复杂度时,需要考虑冲突的概率。假设哈希函数将 \(n\) 个键均匀随机地映射到 \(m\) 个槽位中,可以使用组合数学和概率论的方法来分析冲突的期望次数和哈希表的性能。例如,生日悖论 (Birthday Paradox) 就揭示了在哈希表中冲突发生的概率比直觉想象的要高。 ③ 计数数据结构 (Counting Data Structures): ⚝ 例 3:布隆过滤器是一种用于快速判断一个元素是否在一个集合中的概率数据结构。它使用多个哈希函数和位数组 (bit array) 来实现。布隆过滤器的误判率 (false positive rate) 分析涉及到组合概率的计算。通过合理选择哈希函数的个数和位数组的大小,可以控制误判率在可接受的范围内。 ④ 组合数据结构 (Combinatorial Data Structures): ⚝ 例 4:跳跃表是一种基于概率的平衡数据结构,它通过随机地为节点建立多级索引,实现了与平衡树相近的查找、插入、删除性能,但实现起来更简单。跳跃表的性能分析涉及到概率和组合的期望值计算。 ⑤ 数据压缩 (Data Compression) 中的数据结构: ⚝ 例 5:Huffman 编码是一种经典的前缀编码 (prefix code) 算法,用于数据压缩。Huffman 树是一种用于生成 Huffman 编码的二叉树。Huffman 编码的平均码长和压缩率分析涉及到树的结构和概率的计算。Huffman 算法利用贪心策略构建最优前缀码,其正确性证明和性能分析都与组合优化有关。 组合数学在信息论 (Information Theory) 和编码理论 (Coding Theory) 中扮演着核心角色。信息论研究信息的量化、存储和通信的基本规律,而编码理论则关注如何设计高效可靠的编码方案,以实现信息的有效传输和存储。组合数学为信息论和编码理论提供了理论基础和数学工具。 纠错码是编码理论的重要分支,旨在设计能够检测和纠正信息在传输或存储过程中产生的错误的编码方案。组合设计 (Combinatorial Design) 中的区组设计 (Block Designs)、拉丁方 (Latin Squares) 等概念在纠错码的构造中有着重要的应用。 ① 汉明码 (Hamming Codes): ⚝ 例 1:汉明码 \(Ham(r, 2)\) 的参数为 \([2^r-1, 2^r-1-r, 3]\)。其构造可以使用有限域 (Finite Field) 上的线性代数方法,也可以从组合设计的角度理解。汉明码的最小距离 (Minimum Distance) 为 3,意味着它可以检测两位错误或纠正一位错误。 ② 里德-索洛蒙码 (Reed-Solomon Codes, RS Codes): ⚝ 例 2:RS 码可以看作是多项式插值 (Polynomial Interpolation) 的一种应用。编码过程是将信息符号编码成一个多项式,然后在多个点上求值得到码字 (Codeword)。解码过程则是通过接收到的码字恢复原始多项式,从而纠正错误。RS 码的纠错能力与多项式的次数和有限域的大小有关。 ③ BCH 码 (Bose-Chaudhuri-Hocquenghem Codes): ⚝ 例 3:BCH 码的参数可以灵活选择,以满足不同的纠错需求。BCH 码的解码算法,例如 Peterson-Gorenstein-Zierler 算法和 Berlekamp-Massey 算法,都涉及到复杂的代数运算和组合技巧。 ④ 低密度奇偶校验码 (Low-Density Parity-Check Codes, LDPC Codes): ⚝ 例 4:LDPC 码的性能与图的环长 (Girth) 和度分布 (Degree Distribution) 等图论参数有关。好的 LDPC 码需要精心设计其校验矩阵,以保证其稀疏性和良好的纠错性能。Tanner 图 (Tanner Graph) 是分析 LDPC 码性能的重要工具。 ⑤ 喷泉码 (Fountain Codes): ⚝ 例 5:LT 码 (Luby Transform Codes) 和 Raptor 码 (Raptor Codes) 是两种典型的喷泉码。LT 码的编码过程是随机选择一定数量的原始信息分组进行异或 (XOR) 操作生成编码分组。Raptor 码是 LT 码的改进版本,具有更好的性能和更低的解码复杂度。喷泉码的性能分析涉及到概率分布和期望值计算。 数据压缩旨在减少数据存储空间和传输带宽,提高数据处理效率。组合数学在数据压缩算法的设计和分析中也发挥着重要作用。 ① 霍夫曼编码 (Huffman Coding): ⚝ 例 1:霍夫曼编码的构建过程可以使用贪心策略实现。每次选择频率最低的两个字符合并成一个节点,直到所有字符合并成一棵树。霍夫曼编码的平均码长和压缩率可以通过计算树的加权路径长度 (weighted path length) 来分析。 ② 算术编码 (Arithmetic Coding): ⚝ 例 2:算术编码的压缩率通常比霍夫曼编码更高,尤其是在字符频率分布不均匀的情况下。算术编码的实现需要精确的实数运算,并且对概率模型的选择非常敏感。 ③ LZ 算法 (Lempel-Ziv Algorithms): ⚝ 例 3:LZ77 算法使用滑动窗口 (sliding window) 作为字典,在已编码的数据中搜索最长匹配字符串,并用 (偏移量, 长度, 下一个字符) 三元组进行编码。LZ78 算法则显式地构建字典,并将新的字符串添加到字典中。LZW 算法是 Lempel-Ziv-Welch 算法的简称,广泛应用于 GIF 图像压缩和 Unix compress 工具。 ④ Burrows-Wheeler 变换 (Burrows-Wheeler Transform, BWT): ⚝ 例 4:BWT 变换后的字符串通常具有更好的可压缩性,例如可以通过 Move-to-Front 编码和 Run-Length Encoding 等算法进一步压缩。BWT 变换广泛应用于 bzip2 压缩工具。 ⑤ 上下文模型 (Context Modeling): ⚝ 例 5:PPM (Prediction by Partial Matching) 算法是一种常用的上下文模型算法,它根据不同长度的上下文信息进行预测,并使用算术编码进行压缩。上下文模型的阶数 (order) 和预测策略的选择会影响压缩性能。 组合数学在运筹学 (Operations Research) 和管理科学 (Management Science) 中也有着广泛的应用。运筹学和管理科学关注如何运用数学方法解决实际管理和决策问题,而组合优化 (Combinatorial Optimization) 是运筹学的一个重要分支。 调度问题是指在给定资源和约束条件下,如何安排任务的执行顺序和时间,以达到某种优化目标,例如最小化完成时间、最大化吞吐量、最小化成本等。组合数学为调度问题的建模和求解提供了理论和方法。 ① 作业车间调度 (Job Shop Scheduling): ⚝ 例 1:作业车间调度问题可以使用图论模型进行建模,例如析取图 (Disjunctive Graph)。求解作业车间调度问题可以使用启发式算法 (Heuristic Algorithms)、元启发式算法 (Metaheuristic Algorithms),例如遗传算法 (Genetic Algorithm)、模拟退火算法 (Simulated Annealing)、禁忌搜索算法 (Tabu Search) 等。精确算法 (Exact Algorithms),例如分支定界算法 (Branch and Bound Algorithm),也常用于求解小规模的作业车间调度问题。 ② 流水车间调度 (Flow Shop Scheduling): ⚝ 例 2:流水车间调度问题可以使用 Johnson 算法求解两机器流水车间调度问题,以最小化完工时间。对于多机器流水车间调度问题,可以使用启发式算法和元启发式算法进行求解。 ③ 并行机调度 (Parallel Machine Scheduling): ⚝ 例 3:并行机调度问题可以使用列表调度算法 (List Scheduling Algorithm)、最早完成时间优先 (Earliest Completion Time, ECT) 算法、最长处理时间优先 (Longest Processing Time, LPT) 算法等启发式算法进行求解。对于某些特殊情况,可以使用动态规划算法或整数规划 (Integer Programming) 方法求解。 ④ 资源约束项目调度 (Resource-Constrained Project Scheduling Problem, RCPSP): ⚝ 例 4:RCPSP 可以使用关键路径法 (Critical Path Method, CPM)、计划评审技术 (Program Evaluation and Review Technique, PERT) 等方法进行分析和调度。求解 RCPSP 可以使用启发式算法、元启发式算法和精确算法。 ⑤ 在线调度 (Online Scheduling): ⚝ 例 5:在线调度问题可以使用贪心算法、列表调度算法等在线算法进行求解。例如,List Scheduling 算法在在线并行机调度问题中具有较好的性能。 资源分配问题是指在有限的资源条件下,如何将资源分配给不同的需求方,以达到某种优化目标,例如最大化效益、最小化成本、公平分配等。组合优化方法在资源分配问题中有着广泛的应用。 ① 指派问题 (Assignment Problem): ⚝ 例 1:指派问题可以建模为二分图最大权匹配问题 (Maximum Weight Matching in Bipartite Graphs)。匈牙利算法是一种求解指派问题的有效算法,其时间复杂度为 \(O(n^3)\),其中 \(n\) 是任务数或执行者数。 ② 背包问题 (Knapsack Problem): ⚝ 例 2:0-1 背包问题 (0-1 Knapsack Problem) 是指每种物品只能选择放或不放,不能分割。分数背包问题 (Fractional Knapsack Problem) 则允许物品分割。动态规划算法可以求解 0-1 背包问题,贪心算法可以求解分数背包问题。 ③ 车辆路径问题 (Vehicle Routing Problem, VRP): ⚝ 例 3:VRP 可以使用启发式算法、元启发式算法,例如遗传算法、蚁群算法 (Ant Colony Optimization)、禁忌搜索算法等进行求解。精确算法,例如分支切割法 (Branch and Cut Algorithm),也常用于求解小规模的 VRP 问题。 ④ 频率分配问题 (Frequency Assignment Problem, FAP): ⚝ 例 4:FAP 可以分为图着色模型、信道分配模型、功率控制模型等多种模型。求解 FAP 需要考虑频率复用 (Frequency Reuse)、干扰约束 (Interference Constraint)、容量约束 (Capacity Constraint) 等因素。 ⑤ 公平分配 (Fair Allocation): ⚝ 例 5:蛋糕切割问题 (Cake Cutting Problem) 是一个经典的公平分配问题,旨在将一块蛋糕公平地分给多个参与者,使得每个参与者都认为自己分得的蛋糕是公平的。蛋糕切割问题可以使用协议 (Protocol) 和算法来解决。 组合数学的应用远不止以上列举的领域。随着计算机科学、信息技术和管理科学的不断发展,组合数学将在更多的领域发挥越来越重要的作用。掌握组合数学的基本概念、原理和方法,对于理解和解决复杂问题,培养创新思维,都具有重要的意义。
② 在 \(\sum_{i3.1.2 容斥原理的应用 (Applications of Inclusion-Exclusion Principle)
设 \(A_1, A_2, A_3\) 分别为具有性质 \(P_1, P_2, P_3\) 的集合。我们要求 \(|\overline{A_1} \cap \overline{A_2} \cap \overline{A_3}|\)。
\(|A_1| = \lfloor \frac{1000}{2} \rfloor = 500\)
\(|A_2| = \lfloor \frac{1000}{3} \rfloor = 333\)
\(|A_3| = \lfloor \frac{1000}{5} \rfloor = 200\)
\(|A_1 \cap A_2| = \lfloor \frac{1000}{\text{lcm}(2, 3)} \rfloor = \lfloor \frac{1000}{6} \rfloor = 166\)
\(|A_1 \cap A_3| = \lfloor \frac{1000}{\text{lcm}(2, 5)} \rfloor = \lfloor \frac{1000}{10} \rfloor = 100\)
\(|A_2 \cap A_3| = \lfloor \frac{1000}{\text{lcm}(3, 5)} \rfloor = \lfloor \frac{1000}{15} \rfloor = 66\)
\(|A_1 \cap A_2 \cap A_3| = \lfloor \frac{1000}{\text{lcm}(2, 3, 5)} \rfloor = \lfloor \frac{1000}{30} \rfloor = 33\)
\[ |A_1 \cup A_2 \cup A_3| = |A_1| + |A_2| + |A_3| - (|A_1 \cap A_2| + |A_1 \cap A_3| + |A_2 \cap A_3|) + |A_1 \cap A_2 \cap A_3| \]
\[ |A_1 \cup A_2 \cup A_3| = 500 + 333 + 200 - (166 + 100 + 66) + 33 = 734 \]
\[ |\overline{A_1} \cap \overline{A_2} \cap \overline{A_3}| = |U| - |A_1 \cup A_2 \cup A_3| = 1000 - 734 = 266 \]
\(|A_i \cap A_j|\) 表示第 \(i\) 个元素和第 \(j\) 个元素分别固定在第 \(i\) 和第 \(j\) 个位置,其余 \(n-2\) 个元素任意排列,所以 \(|A_i \cap A_j| = (n-2)!\) (其中 \(i \neq j\))。
以此类推,对于任意 \(k\) 个不同的指标 \(i_1, i_2, \ldots, i_k\),\(|A_{i_1} \cap A_{i_2} \cap \cdots \cap A_{i_k}| = (n-k)!\)。
\[ |A_1 \cup A_2 \cup \cdots \cup A_n| = \sum_{i} |A_i| - \sum_{i
\(\sum_{i
\[ |A_1 \cup A_2 \cup \cdots \cup A_n| = C(n, 1)(n-1)! - C(n, 2)(n-2)! + C(n, 3)(n-3)! - \cdots + (-1)^{n-1} C(n, n)(n-n)! \]3.1.3 错位排列问题 (Derangement Problems)
② 位置 \(k\) 上的元素没有放在位置 \(n\)。此时,我们可以将位置 \(n\) 看作是位置 \(k\) 的“原位置”。这样问题就转化为 \(n-1\) 个元素的错位排列问题,因为对于除了第 \(n\) 个元素之外的 \(n-1\) 个元素,它们都不能放在自己的原位置(包括位置 \(k\) 现在被看作是位置 \(n\) 的原位置)。方案数为 \(D_{n-1}\)。
根据这个递推公式,我们可以快速计算出较小的 \(n\) 的错位排列数。
\(D_1 = 0\)
\(D_2 = 1\)
\(D_3 = (3-1)(D_2 + D_1) = 2(1 + 0) = 2\)
\(D_4 = (4-1)(D_3 + D_2) = 3(2 + 1) = 9\)
\(D_5 = (5-1)(D_4 + D_3) = 4(9 + 2) = 44\)
\(D_6 = (6-1)(D_5 + D_4) = 5(44 + 9) = 265\)
② 舞会问题: \(n\) 对夫妇参加舞会,要求每位男士都不能和自己的妻子跳舞,问有多少种配对跳舞的方式?这也可以转化为错位排列问题。
③ 测试匹配: 在软件测试中,有时需要生成一些测试用例,使得每个测试用例都与预期结果不匹配,这时可以使用错位排列来生成测试用例。3.2 莫比乌斯反演 (Möbius Inversion)
3.2.1 偏序集与关联代数 (Partially Ordered Sets and Incidence Algebra)
① 自反性 (Reflexivity): 对于任意 \(x \in P\),有 \(x \preceq x\)。
② 反对称性 (Antisymmetry): 对于任意 \(x, y \in P\),如果 \(x \preceq y\) 且 \(y \preceq x\),则 \(x = y\)。
③ 传递性 (Transitivity): 对于任意 \(x, y, z \in P\),如果 \(x \preceq y\) 且 \(y \preceq z\),则 \(x \preceq z\)。
① 集合的包含关系 \(\subseteq\) 是集合族上的偏序关系。例如,对于集合 \(P = \{\{1\}, \{2\}, \{1, 2\}, \{1, 2, 3\}\}\),\((P, \subseteq)\) 是一个偏序集。
② 自然数集 \(\mathbb{N}\) 上的整除关系 \(|\) 是偏序关系。例如,对于 \(\mathbb{N}\),\(2|4\),\(3 \nmid 4\),\(( \mathbb{N}, |)\) 是一个偏序集。
③ 实数集 \(\mathbb{R}\) 上的小于等于关系 \(\le\) 是偏序关系。\(( \mathbb{R}, \le)\) 是一个偏序集,实际上它还是一个全序集 (Totally Ordered Set) 或线性序集 (Linearly Ordered Set),因为对于任意 \(x, y \in \mathbb{R}\),要么 \(x \le y\),要么 \(y \le x\)。
② 数乘: \((\alpha f)(x, y) = \alpha f(x, y)\),其中 \(\alpha \in \mathbb{C}\)
③ 卷积 (Convolution): \((f * g)(x, y) = \sum_{x \preceq z \preceq y} f(x, z) g(z, y)\)3.2.2 莫比乌斯函数 (Möbius Function)
\(\mu(1) = 1\)
\(\mu(2) = -1\)
\(\mu(3) = -1\)
\(\mu(4) = 0\) (因为 \(4 = 2^2\) 含有平方因子)
\(\mu(5) = -1\)
\(\mu(6) = \mu(2 \cdot 3) = (-1)^2 = 1\)
\(\mu(7) = -1\)
\(\mu(8) = 0\) (因为 \(8 = 2^3\) 含有平方因子)
\(\mu(9) = 0\) (因为 \(9 = 3^2\) 含有平方因子)
\(\mu(10) = \mu(2 \cdot 5) = (-1)^2 = 1\)3.2.3 莫比乌斯反演公式及其应用 (Möbius Inversion Formula and its Applications)
(1) \(g(y) = \sum_{x \preceq y} f(x)\)
(2) \(f(y) = \sum_{x \preceq y} \mu(x, y) g(x)\)
(1) \(\Rightarrow\) (2):
已知 \(g(y) = \sum_{x \preceq y} f(x)\),即 \(g = f * \zeta\)。两边同时卷积 \(\mu\),得到 \(g * \mu = (f * \zeta) * \mu = f * (\zeta * \mu) = f * \delta = f\)。
所以 \(f = g * \mu\),即 \(f(y) = \sum_{x \preceq y} g(x) \mu(x, y) = \sum_{x \preceq y} \mu(x, y) g(x)\)。
已知 \(f(y) = \sum_{x \preceq y} \mu(x, y) g(x)\),即 \(f = \mu * g\)。两边同时卷积 \(\zeta\),得到 \(f * \zeta = (\mu * g) * \zeta = \mu * (g * \zeta) = (\mu * \zeta) * g = \delta * g = g\)。
所以 \(g = f * \zeta\),即 \(g(y) = \sum_{x \preceq y} f(x) \zeta(x, y) = \sum_{x \preceq y} f(x)\)。
(1) \(g(n) = \sum_{d|n} f(d)\)
(2) \(f(n) = \sum_{d|n} \mu(d) g\left(\frac{n}{d}\right) = \sum_{d|n} \mu\left(\frac{n}{d}\right) g(d)\)
(1) \(g(B) = \sum_{A \subseteq B} f(A)\)
(2) \(f(B) = \sum_{A \subseteq B} \mu(A, B) g(A) = \sum_{A \subseteq B} (-1)^{|B \setminus A|} g(A)\)3.3 多项式反演 (Polynomial Inversion)
3.3.1 拉格朗日反演公式 (Lagrange Inversion Formula)
3.3.2 应用于组合计数 (Applications in Combinatorial Counting)
计算有误,应为:
\[ T_n = \frac{1}{n} [x^{n-1}] e^{nx} = \frac{1}{n} \frac{n^{n-1}}{(n-1)!} = \frac{n^{n-2}}{(n-2)!} \cdot \frac{1}{(n-1)} ? \]
重新计算:
\[ T_n = \frac{1}{n} [x^{n-1}] e^{nx} = \frac{1}{n} \frac{n^{n-1}}{(n-1)!} = \frac{n^{n-1}}{n!} \]
公式推导有误,应为 Cayley's formula: \(n^{n-2}\) for labeled trees. For rooted labeled trees, it is \(n^{n-1}\).
\[ T_n = \frac{1}{n} [x^{n-1}] (e^x)^n = \frac{1}{n} [x^{n-1}] \sum_{k=0}^{\infty} \frac{(nx)^k}{k!} = \frac{1}{n} \frac{n^{n-1}}{(n-1)!} = \frac{n^{n-2}}{(n-2)!} \cdot \frac{1}{(n-1)} ? \]
再次检查,应为:
\[ T_n = \frac{1}{n} [x^{n-1}] (e^x)^n = \frac{1}{n} [x^{n-1}] e^{nx} = \frac{1}{n} \frac{n^{n-1}}{(n-1)!} = \frac{n^{n-2}}{(n-2)!} \cdot \frac{1}{(n-1)} ? \]
还是不对,应该是 \(n^{n-1}\) 棵有根树。
\(T(x) = x e^{T(x)}\), so \(T(x) e^{-T(x)} = x\). Let \(F(y) = y e^{-y}\), \(G(x) = T(x)\). \(\Phi(y) = y/F(y) = e^y\).
\[ [x^n] T(x) = \frac{1}{n} [y^{n-1}] \Phi(y)^n = \frac{1}{n} [y^{n-1}] (e^y)^n = \frac{1}{n} [y^{n-1}] e^{ny} = \frac{1}{n} \frac{n^{n-1}}{(n-1)!} = \frac{n^{n-1}}{n!} \]
仍然有误,应为 \(n^{n-1}\)。
We want to find \(T_n = [x^n] T(x)\).
Using Lagrange Inversion Formula:
\[ [x^n] H(G(x)) = \frac{1}{n} [y^{n-1}] H'(y) \left( \frac{y}{F(y)} \right)^n \]
Let \(H(y) = y\), \(H'(y) = 1\).
\[ [x^n] G(x) = \frac{1}{n} [y^{n-1}] \left( \frac{y}{F(y)} \right)^n = \frac{1}{n} [y^{n-1}] \left( \frac{y}{y e^{-y}} \right)^n = \frac{1}{n} [y^{n-1}] (e^y)^n = \frac{1}{n} [y^{n-1}] e^{ny} = \frac{1}{n} \frac{n^{n-1}}{(n-1)!} = \frac{n^{n-1}}{n!} \]
还是得到 \(\frac{n^{n-1}}{n!}\),哪里出错了?4. chapter 4: 图论基础 (Graph Theory Fundamentals)
4.1 图的基本概念 (Basic Concepts of Graphs)
4.1.1 图的定义与表示 (Definition and Representation of Graphs)
② 有向图 (Directed Graph):边是有序对 \((u, v)\),表示从顶点 \(u\) 到顶点 \(v\) 的一条有向边,边有方向。在有向图中,边 \((u, v)\) 和边 \((v, u)\) 是不同的。
③ 混合图 (Mixed Graph):图中既包含无向边,也包含有向边。
④ 简单图 (Simple Graph):不包含环 (Loop) 和重边 (Multiple Edges) 的图。环是指连接顶点到自身的边,重边是指两个顶点之间存在多条边。
⑤ 多重图 (Multigraph):允许包含重边的图。
⑥ 伪图 (Pseudograph):允许包含环和重边的图。
\[ A_{ij} = \begin{cases} 1, & \text{如果 } \{v_i, v_j\} \in E \\ 0, & \text{如果 } \{v_i, v_j\} \notin E \end{cases} \]
对于有向图:
\[ A_{ij} = \begin{cases} 1, & \text{如果 } (v_i, v_j) \in E \\ 0, & \text{如果 } (v_i, v_j) \notin E \end{cases} \]
邻接矩阵的优点是表示简单,易于实现图的运算,例如判断两个顶点是否相邻。缺点是空间复杂度高,对于稀疏图 (Sparse Graph),即边数远小于顶点数平方的图,会浪费大量存储空间。
对于有向图,如果 \((u, v) \in E\),则在顶点 \(u\) 的邻接表中包含 \(v\)。
\[ A = \begin{pmatrix} 0 & 1 & 1 & 0 \\ 1 & 0 & 1 & 0 \\ 1 & 1 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{pmatrix} \]
顶点 1: [2, 3]
顶点 2: [1, 3]
顶点 3: [1, 2, 4]
顶点 4: [3]4.1.2 顶点的度 (Degree of Vertices)
\[ \sum_{v \in V} d(v) = 2|E| \]
对于有向图,所有顶点的入度之和等于所有顶点的出度之和,都等于边数。
\[ \sum_{v \in V} d_{in}(v) = \sum_{v \in V} d_{out}(v) = |E| \]4.1.3 子图与图的同构 (Subgraphs and Graph Isomorphism)
② 边数相同:\(|E_1| = |E_2|\)。
③ 度序列 (Degree Sequence) 相同:将两个图的顶点度数分别排序后得到的序列相同。
④ 对于任意整数 \(k\),顶点度数为 \(k\) 的顶点个数相同。
⑤ 具有相同数量的圈 (Cycles) 和路径 (Paths) 等。
\(G_1\) 的边集 \(E_1 = \{\{1, 2\}, \{2, 3\}, \{3, 4\}, \{4, 1\}\}\)。
\(G_2\) 的边集 \(E_2 = \{\{1, 2\}, \{1, 3\}, \{1, 4\}, \{2, 3\}\}\)。
两个图的顶点数和边数都为 4。
\(G_1\) 的度序列为 (2, 2, 2, 2)。\(G_2\) 的度序列为 (3, 2, 1, 1)。
由于度序列不同,\(G_1\) 和 \(G_2\) 不同构。
\(G_3\) 的边集 \(E_3 = \{\{1, 2\}, \{2, 3\}, \{3, 4\}, \{4, 5\}, \{5, 6\}, \{6, 1\}, \{1, 3\}, \{4, 6\}\}\)。
\(G_4\) 的边集 \(E_4 = \{\{1, 2\}, \{2, 3\}, \{3, 4\}, \{4, 5\}, \{5, 6\}, \{6, 1\}, \{2, 4\}, \{5, 1\}\}\)。
\(G_3\) 和 \(G_4\) 的度序列都为 (3, 3, 3, 3, 3, 3)。
虽然满足一些必要条件,但这两个图是否同构需要进一步分析。实际上,这两个图是同构的。可以找到一个同构映射,例如:
\(f(1) = 1, f(2) = 2, f(3) = 4, f(4) = 3, f(5) = 5, f(6) = 6\)。4.2 特殊类型的图 (Special Types of Graphs)
4.2.1 完全图、二分图、正则图 (Complete Graphs, Bipartite Graphs, Regular Graphs)
\(K_1\):一个顶点,零条边。
\(K_2\):两个顶点,一条边。
\(K_3\):三角形。
\(K_4\):四面体骨架。
\(K_{2, 3}\):二分图,划分集合大小分别为 2 和 3。
3-正则图:例如立方体图。4.2.2 路径与圈 (Paths and Cycles)
4.3 图的连通性 (Graph Connectivity)
4.3.1 连通图与连通分量 (Connected Graphs and Connected Components)
4.3.2 割点与桥 (Cut Vertices and Bridges)
4.4 树 (Trees)
4.4.1 树的定义与性质 (Definition and Properties of Trees)
① 树是一个无圈连通图。
② 树是一个连通图,且边数比顶点数少 1,即 \(|E| = |V| - 1\)。
③ 树是一个无圈图,且边数比顶点数少 1,即 \(|E| = |V| - 1\)。
④ 树是一个连通图,但删除任意一条边都会使图不连通。
⑤ 树是一个无圈图,但在任意两个不相邻的顶点之间添加一条边,都会产生圈。
⑥ 树中任意两个顶点之间存在唯一路径。
① 树是连通的且无圈。
② 树的边数等于顶点数减 1。
③ 树中度数为 1 的顶点称为叶子节点 (Leaf Node)。任何非平凡树 (至少有两个顶点的树) 至少有两个叶子节点。
④ 树是二分图。4.4.2 生成树 (Spanning Trees)
4.5 平面图与图的嵌入 (Planar Graphs and Graph Embedding)
4.5.1 平面图的定义与欧拉公式 (Definition of Planar Graphs and Euler's Formula)
\[ n - m + f = 2 \]
当 \(m = 0\) 时,图为一个孤立顶点,\(n = 1\),\(m = 0\),\(f = 1\) (整个平面为一个面),\(1 - 0 + 1 = 2\),公式成立。
假设对于边数小于 \(m\) 的连通平面图,欧拉公式成立。
考虑边数为 \(m\) 的连通平面图 \(G\)。
情况 1:\(G\) 是一棵树,则 \(m = n - 1\),树的平面嵌入只有一个面 (外部面),\(f = 1\),\(n - (n - 1) + 1 = 2\),公式成立。
情况 2:\(G\) 不是树,则 \(G\) 包含圈。选取 \(G\) 中的一条边 \(e\) 属于某个圈。删除边 \(e\),得到图 \(G' = G - e\)。\(G'\) 仍然是连通的,且边数为 \(m - 1\)。根据归纳假设,对于 \(G'\),有 \(n - (m - 1) + f' = 2\),其中 \(f'\) 是 \(G'\) 的面数。由于边 \(e\) 属于某个圈,删除 \(e\) 后,将原来圈所包围的区域与外部面合并,面数减少 1,即 \(f = f' - 1\),\(f' = f + 1\)。
代入归纳公式,\(n - (m - 1) + (f + 1) = 2\),化简得到 \(n - m + f + 2 = 2\),即 \(n - m + f = 0\),这与欧拉公式 \(n - m + f = 2\) 不符。
更正证明思路:
情况 2:\(G\) 不是树,则 \(G\) 包含圈。选取 \(G\) 中的一条边 \(e\) 属于某个圈。删除边 \(e\),得到图 \(G' = G - e\)。\(G'\) 仍然是连通的,顶点数不变,边数减少 1,面数减少 1 (因为删除圈上的一条边,合并了两个面为一个面)。对于 \(G'\),有 \(n - (m - 1) + f' = 2\)。由于 \(f' = f + 1\),代入得到 \(n - (m - 1) + (f + 1) = 2\),化简得到 \(n - m + 1 + f + 1 = 2\),即 \(n - m + f + 2 = 2\),因此 \(n - m + f = 0\),仍然错误。
再次更正证明思路:
情况 2:\(G\) 不是树,则 \(G\) 包含圈。选取 \(G\) 中的一条边 \(e\) 属于某个圈。删除边 \(e\),得到图 \(G' = G - e\)。\(G'\) 仍然是连通的,顶点数不变,边数减少 1,面数减少 1 (因为删除圈上的一条边,合并了两个面为一个面)。对于 \(G'\),有 \(n - (m - 1) + f' = 2\)。由于删除一条边,面数减少 1,所以 \(f' = f + 1\),即 \(f = f' - 1\)。
代入归纳公式,\(n - (m - 1) + (f + 1) = 2\),即 \(n - m + 1 + f + 1 = 2\),化简得到 \(n - m + f + 2 = 2\),因此 \(n - m + f = 0\),还是错误。
最终更正证明思路:
情况 2:\(G\) 不是树,则 \(G\) 包含圈。选取 \(G\) 中的一条边 \(e\) 属于某个圈。删除边 \(e\),得到图 \(G' = G - e\)。\(G'\) 仍然是连通的,顶点数不变,边数减少 1,面数减少 1 (因为删除圈上的一条边,合并了两个面为一个面)。对于 \(G'\),有 \(n - (m - 1) + f' = 2\)。由于删除一条边,面数减少 1,所以 \(f' = f + 1\),即 \(f = f' - 1\)。
因此 \(f' = f + 1\)。代入归纳公式 \(n - (m - 1) + f' = 2\),得到 \(n - (m - 1) + (f + 1) = 2\),化简得到 \(n - m + 1 + f + 1 = 2\),即 \(n - m + f + 2 = 2\),所以 \(n - m + f = 0\)。仍然不对。
使用归纳法对图的面数 \(f\) 进行归纳。
当 \(f = 1\) 时,图只有一个面,即外部面。由于图是连通的,且只有一个面,所以图是树。对于树,有 \(m = n - 1\),则 \(n - m + f = n - (n - 1) + 1 = 2\),公式成立。
假设对于面数小于 \(f\) 的连通平面图,欧拉公式成立。
考虑面数为 \(f\) 的连通平面图 \(G\)。由于 \(f > 1\),图 \(G\) 必然包含圈。选取 \(G\) 中的一条边 \(e\) 属于某个圈。收缩边 \(e\) (Contract Edge),即将边 \(e\) 的两个端点合并为一个顶点,并删除边 \(e\)。得到图 \(G'\)。\(G'\) 仍然是连通的,面数减少 1,顶点数减少 1,边数减少 1。设 \(G'\) 的顶点数、边数、面数分别为 \(n'\)、\(m'\)、\(f'\)。则 \(n' = n - 1\),\(m' = m - 1\),\(f' = f - 1\)。根据归纳假设,对于 \(G'\),有 \(n' - m' + f' = 2\)。
代入 \(n'\)、\(m'\)、\(f'\) 的值,\((n - 1) - (m - 1) + (f - 1) = 2\),化简得到 \(n - 1 - m + 1 + f - 1 = 2\),即 \(n - m + f - 1 = 2\),因此 \(n - m + f = 3\),仍然不对。
使用归纳法对图的边数 \(m\) 进行归纳。
当 \(m = 0\) 时,图为一个孤立顶点,\(n = 1\),\(m = 0\),\(f = 1\) (外部面),\(n - m + f = 1 - 0 + 1 = 2\),公式成立。
假设对于边数小于 \(m\) 的连通平面图,欧拉公式成立。
考虑边数为 \(m\) 的连通平面图 \(G\)。
情况 1:\(G\) 是一棵树,则 \(m = n - 1\),\(f = 1\),\(n - m + f = n - (n - 1) + 1 = 2\),公式成立。
情况 2:\(G\) 不是树,则 \(G\) 包含圈。选取 \(G\) 中的一条边 \(e\) 属于某个圈。删除边 \(e\),得到图 \(G' = G - e\)。\(G'\) 仍然是连通的,顶点数不变,边数减少 1,面数不变 (因为删除圈上的一条边,只是将圈的面合并到一起,面数不变)。对于 \(G'\),有 \(n - (m - 1) + f' = 2\)。由于删除边 \(e\) 后,面数不变,所以 \(f' = f\)。
代入归纳公式,\(n - (m - 1) + f = 2\),化简得到 \(n - m + 1 + f = 2\),即 \(n - m + f = 1\),还是不对。
使用归纳法对图的圈数进行归纳。
当图不包含圈时,即为树或森林。对于连通图(树),圈数为 0。此时 \(m = n - 1\),\(f = 1\),\(n - m + f = n - (n - 1) + 1 = 2\)。
假设对于圈数小于 \(c\) 的连通平面图,欧拉公式成立。
考虑圈数为 \(c\) 的连通平面图 \(G\)。选取 \(G\) 中的一个圈。圈上至少有一条边 \(e\)。删除边 \(e\),得到图 \(G' = G - e\)。\(G'\) 的圈数减少,但仍然连通 (因为删除圈上的边不影响连通性)。顶点数不变,边数减少 1,面数不变 (因为删除圈上的边,只是将圈的面合并到一起,面数不变)。对于 \(G'\),有 \(n - (m - 1) + f' = 2\)。由于删除边 \(e\) 后,面数不变,所以 \(f' = f\)。
代入归纳公式,\(n - (m - 1) + f = 2\),化简得到 \(n - m + 1 + f = 2\),即 \(n - m + f = 1\),仍然不对。
使用归纳法对图的面数 \(f\) 进行归纳。
当 \(f = 1\) 时,图只有一个面,即外部面。由于图是连通的,且只有一个面,所以图是树。对于树,有 \(m = n - 1\),则 \(n - m + f = n - (n - 1) + 1 = 2\),公式成立。
假设对于面数小于 \(f\) 的连通平面图,欧拉公式成立。
考虑面数为 \(f\) 的连通平面图 \(G\)。由于 \(f > 1\),图 \(G\) 必然包含圈。选取 \(G\) 中的一条边 \(e\) 属于某个内部面的边界。删除边 \(e\),得到图 \(G' = G - e\)。\(G'\) 仍然是连通的,顶点数不变,边数减少 1,面数减少 1 (因为删除边 \(e\) 后,合并了两个面为一个面)。对于 \(G'\),有 \(n - (m - 1) + f' = 2\)。由于 \(f' = f - 1\),代入得到 \(n - (m - 1) + (f - 1) = 2\),化简得到 \(n - m + 1 + f - 1 = 2\),即 \(n - m + f = 2\)。公式成立。
由欧拉公式 \(n - m + f = 2\),得到 \(f = 2 - n + m\)。
所以 \(2 - n + m \le \frac{2}{3}m\),\(2 - n \le \frac{2}{3}m - m = -\frac{1}{3}m\),\(n - 2 \ge \frac{1}{3}m\),\(m \le 3(n - 2) = 3n - 6\)。
由欧拉公式 \(n - m + f = 2\),得到 \(f = 2 - n + m\)。
所以 \(2 - n + m \le \frac{1}{2}m\),\(2 - n \le \frac{1}{2}m - m = -\frac{1}{2}m\),\(n - 2 \ge \frac{1}{2}m\),\(m \le 2(n - 2) = 2n - 4\)。
对于 \(K_{3, 3}\),\(n = 6\),\(m = 3 \times 3 = 9\)。如果 \(K_{3, 3}\) 是平面图,则应满足 \(m \le 2n - 4\)。但 \(2n - 4 = 2 \times 6 - 4 = 8\)。\(m = 9 > 8\),不满足条件,因此 \(K_{3, 3}\) 不是平面图。4.5.2 图的嵌入与交叉数 (Graph Embedding and Crossing Number)
5. chapter 5: 图的匹配与覆盖 (Graph Matching and Covering)
5.1 匹配 (Matching)
5.1.1 二分图的匹配 (Matching in Bipartite Graphs)
⚝ 匹配 \( M_1 = \{(u_1, v_1), (u_2, v_3)\} \) 是一个匹配,其大小为 \( |M_1| = 2 \)。
⚝ 匹配 \( M_2 = \{(u_1, v_2), (u_2, v_3), (u_3, v_1)\} \) 不是一个匹配,因为 \( (u_3, v_1) \) 不存在于边集 \( E \) 中,且 \( v_1 \) 没有在 \( V \) 中。更正为 \( M_2 = \{(u_1, v_2), (u_2, v_3)\} \) 是一个匹配,其大小为 \( |M_2| = 2 \)。
⚝ 匹配 \( M_3 = \{(u_1, v_1), (u_2, v_2), (u_3, v_3)\} \) 是一个匹配,其大小为 \( |M_3| = 3 \)。实际上,\( M_3 \) 是该二分图的一个最大匹配,也是一个完美匹配。
① 必要性:如果存在增广路径 \( P \),将 \( M \) 中在 \( P \) 上的边去除,并将 \( P \) 上不在 \( M \) 中的边加入到 \( M \) 中,可以得到一个更大的匹配 \( M' \),因此 \( M \) 不是最大匹配。
② 充分性:如果不存在增广路径,假设 \( M \) 不是最大匹配,则存在一个更大的匹配 \( M^* \)。考虑 \( M \triangle M^* = (M \cup M^*) \setminus (M \cap M^*) \),即 \( M \) 和 \( M^* \) 的对称差。\( M \triangle M^* \) 中的每个连通分量要么是交错路径,要么是交错圈。由于 \( |M^*| > |M| \),因此 \( M \triangle M^* \) 中必然存在至少一个连通分量,其边数在 \( M^* \) 中多于在 \( M \) 中。这个连通分量不可能是交错圈(圈中 \( M \) 和 \( M^* \) 的边数相等),所以必须是交错路径,且这条交错路径必然是增广路径,这与假设矛盾。
⚝ 顶点 \( u_3 \) 和 \( v_2 \) 是未匹配顶点。
⚝ 路径 \( P = u_3 - v_3 - u_2 - v_2 \) 是一条交错路径,但不是增广路径,因为它不是从 \( U \) 的未匹配顶点到 \( V \) 的未匹配顶点。
⚝ 路径 \( P' = u_3 - v_3 - u_2 - v_2 - u_1 - v_1 \) 不是交错路径,因为 \( (u_2, v_2) \) 和 \( (u_1, v_1) \) 都是匹配边。
⚝ 路径 \( P'' = u_3 - v_3 - u_2 - v_2 \) 不是增广路径,因为起点 \( u_3 \) 是 \( U \) 中的未匹配顶点,但终点 \( v_2 \) 不是 \( V \) 中的未匹配顶点(相对于 \( M_1 \) 而言,\( v_2 \) 是未匹配的,但是路径的定义需要明确起点和终点是否是未匹配的)。
⚝ 路径 \( P''' = u_3 - v_3 - u_2 - v_2 \) 实际上应该考虑从 \( U \) 的未匹配点出发,到 \( V \) 的未匹配点结束的路径。考虑路径 \( P''' = u_3 - v_2 \)。 这不是路径,因为 \( (u_3, v_2) \notin E \)。
⚝ 考虑路径 \( P'''' = u_3 - v_3 - u_2 - v_2 \)。 这不是增广路径,因为终点 \( v_2 \) 不是未匹配顶点(相对于路径而言,起点和终点是否是未匹配顶点需要更精确的定义)。
⚝ 正确的增广路径应该是:从 \( U \) 的未匹配顶点出发,沿着非匹配边,匹配边,非匹配边...交替前进,直到到达 \( V \) 的未匹配顶点。
⚝ 对于 \( M_1 = \{(u_1, v_1), (u_2, v_3)\} \),未匹配顶点为 \( u_3 \in U \) 和 \( v_2 \in V \)。
⚝ 路径 \( P = u_3 - v_3 - u_2 - v_2 \) 不是增广路径,因为 \( v_3 - u_2 \) 是匹配边,\( u_3 - v_3 \) 和 \( u_2 - v_2 \) 应该是非匹配边,但 \( (u_3, v_3) \notin E \) 。
⚝ 路径 \( P = u_3 - v_2 \) 不是路径,因为 \( (u_3, v_2) \notin E \)。
⚝ 路径 \( P = u_3 - v_3 - u_2 - v_2 \) 应该修正为:从 \( u_3 \) 出发,尝试寻找增广路径。从 \( u_3 \) 可以到达 \( v_3 \),边 \( (u_3, v_3) \) 不是匹配边。从 \( v_3 \) 出发,匹配边是 \( (v_3, u_2) \)。从 \( u_2 \) 出发,可以到达 \( v_2 \),边 \( (u_2, v_2) \) 不是匹配边。顶点 \( v_2 \) 是未匹配顶点。因此,增广路径为 \( P = u_3 - v_3 - u_2 - v_2 \)。
⚝ 增广路径 \( P = u_3 - v_3 - u_2 - v_2 \) 的边序列为 \( (u_3, v_3), (v_3, u_2), (u_2, v_2) \)。交错性不明显。重新考虑增广路径的定义。
① \( v_1 \in U \) 是未匹配顶点,\( v_{2k+1} \in V \) 是未匹配顶点。
② 路径 \( P \) 中边交替属于 \( E \setminus M \) 和 \( M \)。即 \( (v_i, v_{i+1}) \in E \setminus M \) 如果 \( i \) 是奇数,\( (v_i, v_{i+1}) \in M \) 如果 \( i \) 是偶数。
⚝ 从 \( u_3 \) 出发,可以到达 \( v_3 \),边 \( (u_3, v_3) \in E \setminus M_1 \)。
⚝ 从 \( v_3 \) 出发,匹配边是 \( (v_3, u_2) \in M_1 \)。
⚝ 从 \( u_2 \) 出发,可以到达 \( v_2 \),边 \( (u_2, v_2) \in E \setminus M_1 \)。
⚝ 顶点 \( v_2 \) 是未匹配顶点。
⚝ 因此,增广路径为 \( P = u_3 - v_3 - u_2 - v_2 \)。 边序列为 \( (u_3, v_3) \in E \setminus M_1 \),\( (v_3, u_2) \in M_1 \),\( (u_2, v_2) \in E \setminus M_1 \)。 这不是交错路径,因为匹配边和非匹配边的顺序不对。
① 从 \( U \) 的未匹配顶点 \( u_3 \) 开始。
② 从 \( u_3 \) 出发,可以沿着非匹配边 \( (u_3, v_3) \) 到达 \( v_3 \)。但是 \( (u_3, v_3) \) 是匹配边,\( M_1 = \{(u_1, v_1), (u_2, v_3)\} \)。 \( (u_3, v_3) \in E \) 吗? 例 5.1.1.1 中 \( E = \{(u_1, v_1), (u_1, v_2), (u_2, v_2), (u_2, v_3), (u_3, v_3)\} \)。 是的,\( (u_3, v_3) \in E \)。 边 \( (u_3, v_3) \) 相对于 \( M_1 \) 是非匹配边。
③ 从 \( v_3 \) 出发,\( v_3 \) 是匹配顶点,匹配边是 \( (v_3, u_2) \in M_1 \)。 从 \( v_3 \) 沿着匹配边回到 \( u_2 \)。
④ 从 \( u_2 \) 出发,可以沿着非匹配边 \( (u_2, v_2) \) 到达 \( v_2 \)。 边 \( (u_2, v_2) \) 相对于 \( M_1 \) 是非匹配边。
⑤ 顶点 \( v_2 \) 是未匹配顶点。 找到增广路径 \( u_3 - v_3 - u_2 - v_2 \)。 路径上的边依次为 \( (u_3, v_3) \notin M_1 \),\( (v_3, u_2) \in M_1 \),\( (u_2, v_2) \notin M_1 \)。 是交错路径。起点 \( u_3 \) 和终点 \( v_2 \) 都是未匹配顶点,所以是增广路径。
\( M_1 = \{(u_1, v_1), (u_2, v_3)\} \)。 增广路径 \( P = u_3 - v_3 - u_2 - v_2 \) 的边集为 \( \{(u_3, v_3), (v_3, u_2), (u_2, v_2)\} \)。
\( P \cap M_1 = \{(v_3, u_2)\} = \{(u_2, v_3)\} \)。
\( P \setminus M_1 = \{(u_3, v_3), (u_2, v_2)\} \)。
新的匹配 \( M_1' = (M_1 \setminus (P \cap M_1)) \cup (P \setminus M_1) = (\{(u_1, v_1), (u_2, v_3)\} \setminus \{(u_2, v_3)\}) \cup \{(u_3, v_3), (u_2, v_2)\} = \{(u_1, v_1)\} \cup \{(u_3, v_3), (u_2, v_2)\} = \{(u_1, v_1), (u_2, v_2), (u_3, v_3)\} \)。
\( M_1' = \{(u_1, v_1), (u_2, v_2), (u_3, v_3)\} \) 的大小为 3,比 \( M_1 \) 的大小 2 增加 1。
① 初始化匹配 \( M = \emptyset \)。
② 循环:
▮▮▮▮ⓒ 从 \( U \) 中所有未匹配顶点开始,进行 BFS 搜索。
▮▮▮▮ⓓ BFS 过程中,交替搜索非匹配边(从 \( U \) 到 \( V \))和匹配边(从 \( V \) 到 \( U \))。
▮▮▮▮ⓔ 如果在 BFS 过程中,从某个 \( U \) 中的未匹配顶点出发,到达 \( V \) 中的未匹配顶点,则找到一条增广路径 \( P \)。
▮▮▮▮ⓕ 利用增广路径 \( P \) 扩充匹配 \( M \),即 \( M = (M \setminus P) \cup (P \setminus M) \)。
▮▮▮▮ⓖ 如果 BFS 搜索无法找到增广路径,则算法结束,当前匹配 \( M \) 为最大匹配。
⚝ 从 \( U \) 的未匹配顶点开始,放入队列。
⚝ 维护一个父指针 (Parent Pointer) 数组,记录路径。
⚝ 维护一个访问标记 (Visited Mark) 数组,避免重复访问顶点。
⚝ BFS 的层交替对应 \( U \) 和 \( V \)。奇数层从 \( U \) 到 \( V \) 走非匹配边,偶数层从 \( V \) 到 \( U \) 走匹配边。5.1.2 霍尔定理 (Hall's Marriage Theorem)
① 必要性:如果存在从 \( U \) 到 \( V \) 的匹配 \( M \),对于任意 \( A \subseteq U \),考虑匹配 \( M \) 中与 \( A \) 中顶点关联的边集合 \( M_A \subseteq M \)。\( M_A \) 覆盖了 \( A \) 中的所有顶点,且 \( M_A \) 的端点在 \( V \) 中的集合 \( V_A \) 满足 \( |V_A| = |M_A| = |A| \)。由于 \( V_A \subseteq N(A) \),因此 \( |N(A)| \ge |V_A| = |A| \)。
⚝ 从 \( u_0 \) 开始,访问所有可以通过交错路径到达的顶点集合。设 \( U' \subseteq U \) 是从 \( u_0 \) 出发通过交错路径可以到达的 \( U \) 中顶点集合,\( V' \subseteq V \) 是从 \( u_0 \) 出发通过交错路径可以到达的 \( V \) 中顶点集合。显然 \( u_0 \in U' \)。
⚝ 由于 \( M \) 是最大匹配,所以不存在以 \( u_0 \) 为起点的增广路径,因此 \( V' \) 中所有顶点都是匹配顶点。
⚝ 考虑集合 \( A = U' \)。对于任意 \( u \in U' \setminus \{u_0\} \),由于 \( u \) 是通过交错路径从 \( u_0 \) 到达的,且路径的最后一步是匹配边,所以 \( u \) 是匹配顶点。对于 \( u \in U' \setminus \{u_0\} \),设 \( (u, v) \in M \)。则 \( v \in V' \)。因此,\( |V'| = |U'| - 1 \)。
⚝ 另一方面,\( N(U') \subseteq V' \)。因为对于任意 \( u \in U' \) 和 \( v \in N(u) \),如果 \( v \notin V' \),则边 \( (u, v) \) 必须是匹配边(否则可以沿着非匹配边 \( (u, v) \) 到达 \( v \),从而 \( v \in V' \),矛盾)。如果 \( (u, v) \in M \),则存在 \( u' \in U \) 使得 \( (v, u') \in M \)。由于 \( u \in U' \) 可以从 \( u_0 \) 通过交错路径到达,那么 \( v \) 也可以从 \( u_0 \) 通过交错路径到达(通过非匹配边到达 \( u \),再通过匹配边到达 \( v \)),因此 \( v \in V' \),矛盾。所以 \( N(U') \subseteq V' \)。
⚝ 因此,\( N(U') = V' \)。 霍尔条件要求 \( |N(U')| \ge |U'| \),但我们得到 \( |N(U')| = |V'| = |U'| - 1 < |U'| \),矛盾。
⚝ 所以,假设不成立,即存在从 \( U \) 到 \( V \) 的匹配。
⚝ 将男士集合看作 \( U \),女士集合看作 \( V \)。如果男士 \( u \in U \) 对女士 \( v \in V \) 有好感,则在 \( U \) 和 \( V \) 之间连边 \( (u, v) \)。问题转化为是否存在完美匹配。
⚝ 根据霍尔定理,存在完美匹配当且仅当对于任意男士集合 \( A \subseteq U \),他们有好感的女士集合 \( N(A) \) 的大小满足 \( |N(A)| \ge |A| \)。5.1.3 最大匹配算法 (Maximum Matching Algorithms)
① 初始化匹配 \( M = \emptyset \)。
② 循环:
▮▮▮▮ⓒ 进行 BFS 搜索,找到最大集合的顶点不相交的最短增广路径集合 \( \mathcal{P} \)。
▮▮▮▮ⓓ 如果 \( \mathcal{P} = \emptyset \),则算法结束,\( M \) 为最大匹配。
▮▮▮▮ⓔ 对于 \( \mathcal{P} \) 中的每条增广路径 \( P \),扩充匹配 \( M \),即 \( M = M \triangle P \)。
⚝ 首先,通过 BFS 找到所有最短增广路径的长度 \( l \)。
⚝ 然后,通过 DFS 搜索,找到一组顶点不相交的最短增广路径。在 DFS 过程中,确保选择的路径之间没有公共顶点。
① 匹配是图论中的基本概念,二分图匹配问题在实际应用中非常重要。
② 增广路径是寻找最大匹配的关键工具。增广路径算法通过不断寻找增广路径并扩充匹配来得到最大匹配。
③ 霍尔定理给出了二分图存在完美匹配的充要条件。
④ Hopcroft-Karp 算法是对增广路径算法的改进,提高了二分图最大匹配算法的效率。
⑤ 对于非二分图,可以使用花算法来寻找最大匹配。5.2 覆盖 (Covering)
5.2.1 顶点覆盖与边覆盖 (Vertex Cover and Edge Cover)
⚝ 顶点集合 \( C_1 = \{2, 3\} \) 是一个顶点覆盖,因为边 \( (1, 2), (1, 3), (2, 3), (2, 4), (3, 5) \) 都至少有一个端点在 \( C_1 \) 中。
⚝ 顶点集合 \( C_2 = \{2, 3, 4\} \) 也是一个顶点覆盖。
⚝ 顶点集合 \( C_3 = \{1, 2, 3\} \) 不是顶点覆盖,因为边 \( (2, 4) \) 的端点 4 不在 \( C_3 \) 中。
⚝ 顶点集合 \( C_4 = \{2, 3\} \) 是一个最小顶点覆盖。
⚝ 边集合 \( L_2 = \{(1, 2), (2, 4), (3, 5), (2, 3)\} \) 是一个边覆盖。
⚝ 边集合 \( L_3 = \{(1, 2), (2, 4), (3, 5)\} \) 需要补充边来覆盖顶点 3。例如 \( L_4 = \{(1, 2), (2, 4), (3, 5), (2, 3)\} \) 或 \( L_5 = \{(1, 2), (2, 4), (3, 5), (1, 3)\} \)。
⚝ 最小边覆盖可以是 \( L_6 = \{(1, 2), (2, 4), (3, 5)\} \) 吗? 不行,顶点 3 没有被覆盖。
⚝ 最小边覆盖可能是 \( L_7 = \{(1, 2), (2, 4), (3, 5), (2, 3)\} \) 或 \( L_8 = \{(1, 3), (2, 4), (3, 5), (1, 2)\} \)。 边数都是 4。
⚝ 考虑匹配 \( M = \{(1, 2), (2, 4), (3, 5)\} \)。这不是匹配,因为顶点 2 关联了两条边。
⚝ 考虑匹配 \( M = \{(1, 2), (3, 5)\} \)。 未覆盖顶点 3, 4。 需要边覆盖所有顶点。
① 图 \( G \) 存在顶点覆盖。例如,顶点集合 \( V \) 本身就是一个顶点覆盖。
② 图 \( G \) 存在边覆盖,当且仅当图 \( G \) 没有孤立顶点 (Isolated Vertex)(度数为 0 的顶点)。如果图 \( G \) 有孤立顶点,则无法用边覆盖它。如果图 \( G \) 没有孤立顶点,则一定存在边覆盖。例如,可以为每个连通分量构造边覆盖。5.2.2 最小覆盖与最大匹配的关系 (Relationship between Minimum Cover and Maximum Matching)
设二分图为 \( G = (U \cup V, E) \)。设 \( M \) 是 \( G \) 的最大匹配。
① 证明最小顶点覆盖的大小 \( \ge \) 最大匹配的大小:对于任意顶点覆盖 \( C \),匹配 \( M \) 的每条边都至少有一个端点在 \( C \) 中。由于 \( M \) 中的边没有公共端点,因此至少需要 \( |M| \) 个顶点才能覆盖 \( M \) 中的所有边。所以 \( |C| \ge |M| \)。因此,最小顶点覆盖的大小 \( \ge \) 最大匹配的大小。
② 证明存在一个顶点覆盖 \( C \) ,使得 \( |C| = |M| \):构造一个顶点覆盖 \( C \)。
⚝ 设 \( M \) 是 \( G \) 的最大匹配。
⚝ 从 \( U \) 中所有未匹配顶点开始,进行交错路径搜索(DFS 或 BFS)。
⚝ 设 \( S \subseteq U \) 是从 \( U \) 中未匹配顶点出发,通过交错路径可以到达的 \( U \) 中顶点集合。
⚝ 设 \( T \subseteq V \) 是从 \( U \) 中未匹配顶点出发,通过交错路径可以到达的 \( V \) 中顶点集合。
⚝ 构造顶点集合 \( C = (U \setminus S) \cup T \)。
⚝ 证明 \( C \) 是顶点覆盖。考虑任意边 \( (u, v) \in E \)。
▮▮▮▮ⓐ 如果 \( u \in U \setminus S \),则 \( u \in C \),边 \( (u, v) \) 被覆盖。
▮▮▮▮ⓑ 如果 \( u \in S \),则考虑 \( v \)。如果 \( (u, v) \in M \),则 \( v \in T \)。因为如果 \( u \in S \) 可以通过交错路径到达,且 \( (u, v) \in M \),则 \( v \) 也可以通过交错路径到达(路径延长一条边),所以 \( v \in T \subseteq C \)。边 \( (u, v) \) 被覆盖。
▮▮▮▮ⓒ 如果 \( u \in S \) 且 \( (u, v) \notin M \),则 \( v \) 必须在 \( T \) 中。否则,如果 \( v \notin T \),则可以从 \( u \) 沿着非匹配边 \( (u, v) \) 到达 \( v \),从而 \( v \in T \),矛盾。所以 \( v \in T \subseteq C \)。边 \( (u, v) \) 被覆盖。
⚝ 因此,\( C = (U \setminus S) \cup T \) 是顶点覆盖。
⚝ 证明 \( |C| = |M| \)。考虑匹配 \( M \) 中端点在 \( T \) 中的边集合 \( M_T = \{(u, v) \in M \mid v \in T \} \)。对于 \( v \in T \),由于交错路径的性质,与 \( v \) 匹配的顶点 \( u \) 必须在 \( S \) 中。所以 \( M_T = \{(u, v) \in M \mid u \in S, v \in T \} \)。
⚝ 考虑匹配 \( M \) 中端点在 \( U \setminus S \) 中的边集合 \( M_{U \setminus S} = \{(u, v) \in M \mid u \in U \setminus S \} \)。对于 \( u \in U \setminus S \),与 \( u \) 匹配的顶点 \( v \) 不能在 \( T \) 中。否则,如果 \( v \in T \),则存在交错路径从 \( U \) 的未匹配顶点到 \( v \),再通过匹配边 \( (v, u) \) 到达 \( u \),从而 \( u \in S \),矛盾。所以,如果 \( (u, v) \in M \) 且 \( u \in U \setminus S \),则 \( v \in V \setminus T \)。
⚝ 因此,匹配 \( M \) 可以划分为两个不相交的集合 \( M_T \) 和 \( M_{U \setminus S} \)。且 \( M_T \) 的端点在 \( T \) 中,\( M_{U \setminus S} \) 的端点在 \( U \setminus S \) 中。
⚝ 考虑 \( C = (U \setminus S) \cup T \)。\( |C| = |U \setminus S| + |T| \)。
⚝ 匹配 \( M_T \) 的大小为 \( |T| \)。匹配 \( M_{U \setminus S} \) 的大小为 \( |U \setminus S| \)。因此,\( |M| = |M_T| + |M_{U \setminus S}| = |T| + |U \setminus S| = |C| \)。
⚝ 所以,存在顶点覆盖 \( C \) ,使得 \( |C| = |M| \)。根据①,\( C \) 是最小顶点覆盖。
① \( \alpha_0(G) + \beta_0(G) = |V| \)
② \( \alpha_1(G) + \beta_1(G) = |V| \)
① \( \alpha_0(G) + \beta_0(G) = |V| \)。设 \( C \) 是顶点覆盖,则 \( V \setminus C \) 是独立集。反之,设 \( I \) 是独立集,则 \( V \setminus I \) 是顶点覆盖。
② \( \alpha_1(G) + \beta_1(G) = |V| \)。设 \( M \) 是最大匹配。构造边覆盖 \( L \)。
⚝ 对于最大匹配 \( M \) 中的每条边,加入到 \( L \) 中。\( L = M \)。
⚝ 对于未被 \( M \) 覆盖的顶点,由于图 \( G \) 没有孤立顶点,所以每个未匹配顶点都至少有一条边与之关联。为每个未匹配顶点任意选择一条关联边加入到 \( L \) 中。
⚝ 这样构造的 \( L \) 是边覆盖。且 \( |L| = |M| + (|V| - 2|M|) = |V| - |M| \)。这里假设最大匹配 \( M \) 覆盖了 \( 2|M| \) 个顶点,剩余 \( |V| - 2|M| \) 个未匹配顶点。
⚝ 最小边覆盖的大小 \( \alpha_1(G) \le |V| - \beta_1(G) \)。
⚝ 反过来,设 \( L \) 是最小边覆盖。构造匹配 \( M \)。
▮▮▮▮ⓐ 从 \( L \) 中选择一个最大匹配 \( M \subseteq L \)。
▮▮▮▮ⓑ 对于 \( L \setminus M \) 中的每条边,它们不能再加入到 \( M \) 中,否则 \( M \) 不是最大匹配。
▮▮▮▮ⓒ 考虑 \( L \) 中的边构成的子图。每个顶点的度数至少为 1。
⚝ 最小边覆盖的大小 \( \alpha_1(G) \ge |V| - \beta_1(G) \)。
⚝ 综合得到 \( \alpha_1(G) + \beta_1(G) = |V| \)。
① 顶点覆盖和边覆盖是图论中重要的覆盖概念。
② Konig 定理揭示了二分图中最小顶点覆盖和最大匹配之间的关系。
③ Gallai 定理给出了最小顶点覆盖、最大独立集、最小边覆盖和最大匹配之间的大小关系。5.3 独立集 (Independent Set)
5.3.1 最大独立集 (Maximum Independent Set)
⚝ 顶点集合 \( I_1 = \{1, 4, 5\} \) 不是独立集,因为顶点 1 和 5 不相邻,但顶点 1 和 4 不相邻,顶点 4 和 5 不相邻。 顶点 1 和 3 相邻。
⚝ 顶点集合 \( I_2 = \{4, 5\} \) 是独立集,因为顶点 4 和 5 不相邻。
⚝ 顶点集合 \( I_3 = \{1, 4\} \) 是独立集,因为顶点 1 和 4 不相邻。
⚝ 顶点集合 \( I_4 = \{5, 4\} \) 是独立集。
⚝ 顶点集合 \( I_5 = \{1, 4\} \) 是独立集。
⚝ 顶点集合 \( I_6 = \{1, 5\} \) 是独立集。
⚝ 顶点集合 \( I_7 = \{4, 5\} \) 是最大独立集,大小为 2。 实际上 \( I_8 = \{1, 4\} \) 和 \( I_9 = \{1, 5\} \) 也是独立集,大小为 2。 顶点集合 \( I_{10} = \{4, 5\} \) 也是独立集,大小为 2。 最大独立集的大小是 2。5.3.2 独立集与覆盖的关系 (Relationship between Independent Set and Cover)
① 如果 \( C \) 是顶点覆盖,则 \( V \setminus C \) 是独立集:假设 \( V \setminus C \) 不是独立集,则存在 \( u, v \in V \setminus C \) 且 \( (u, v) \in E \)。由于 \( u, v \notin C \),所以边 \( (u, v) \) 的两个端点都不在 \( C \) 中,这与 \( C \) 是顶点覆盖矛盾。因此,\( V \setminus C \) 是独立集。
② 如果 \( I \) 是独立集,则 \( V \setminus I \) 是顶点覆盖:假设 \( V \setminus I \) 不是顶点覆盖,则存在边 \( (u, v) \in E \) 使得 \( u, v \notin V \setminus I \)。这意味着 \( u, v \in I \)。由于 \( (u, v) \in E \) 且 \( u, v \in I \),则 \( I \) 不是独立集,矛盾。因此,\( V \setminus I \) 是顶点覆盖。
① 构造二分图 \( G = (U \cup V, E) \)。
② 使用增广路径算法或 Hopcroft-Karp 算法找到 \( G \) 的最大匹配 \( M \)。
③ 最大独立集的大小为 \( |U| + |V| - |M| \)。
④ 构造最小顶点覆盖 \( C = (U \setminus S) \cup T \),其中 \( S \) 和 \( T \) 是在 Konig 定理证明中定义的集合。
⑤ 最大独立集为 \( I = V \setminus C = V \setminus ((U \setminus S) \cup T) = (U \cap S) \cup (V \setminus T) = S \cup (V \setminus T) \)。
① 独立集是图论中的重要概念,与顶点覆盖互补。
② 最大独立集问题是 NP-完全问题,但在二分图中可以有效求解。
③ 利用顶点覆盖和独立集之间的关系,以及 Konig 定理,可以求解二分图的最大独立集。6. chapter 6: 图的着色 (Graph Coloring)
6.1 顶点着色 (Vertex Coloring)
6.1.1 图的色数 (Chromatic Number of a Graph)
给定一个图 \( G = (V, E) \),一个正常顶点着色 (Proper Vertex Coloring) 是一个函数 \( c: V \rightarrow \{1, 2, \ldots, k\} \) (或使用颜色集合 \( \{c_1, c_2, \ldots, c_k\} \)),使得对于任意边 \( (u, v) \in E \),都有 \( c(u) \neq c(v) \)。
图 \( G \) 的色数 (Chromatic Number),记作 \( \chi(G) \),是使得图 \( G \) 存在正常顶点 \( k \)-着色的最小正整数 \( k \)。
⚝ 完全图 (Complete Graph) \( K_n \): 完全图 \( K_n \) 中每对顶点之间都存在边。因此,要对 \( K_n \) 进行正常顶点着色,必须每个顶点都使用不同的颜色。所以,\( \chi(K_n) = n \)。例如,\( \chi(K_1) = 1 \),\( \chi(K_2) = 2 \),\( \chi(K_3) = 3 \)。
图 \( G \) 的色数 \( \chi(G) \) 至少为 团数 (Clique Number) \( \omega(G) \)。团数 \( \omega(G) \) 是图 \( G \) 中最大团 (完全子图) 的顶点数。因为团中的所有顶点都互相连接,它们必须被赋予不同的颜色。因此,\( \chi(G) \ge \omega(G) \)。
贪婪着色 (Greedy Coloring) 提供了一个色数的上界。对于任意顶点排序 \( v_1, v_2, \ldots, v_n \),我们依次为顶点 \( v_i \) 分配可用的最小颜色编号,使得 \( v_i \) 与其已着色的邻居颜色不同。贪婪着色使用的颜色数不会超过 \( \Delta(G) + 1 \),其中 \( \Delta(G) \) 是图 \( G \) 的最大度 (Maximum Degree)。因此,\( \chi(G) \le \Delta(G) + 1 \)。 这被称为 威尔士-鲍威尔定理 (Welsh-Powell Theorem)。
对于连通图 \( G \),如果 \( G \) 不是完全图或奇圈,则 \( \chi(G) \le \Delta(G) \)。这意味着,除了完全图和奇圈之外,我们总能用最多 \( \Delta(G) \) 种颜色对图进行顶点着色。这个定理给出了一个比威尔士-鲍威尔定理更紧的上界,尤其当图不是完全图或奇圈时。
图 \( G \) 是二分图当且仅当它不包含奇圈。对于非空二分图 \( G \),\( \chi(G) = 2 \)。
判断一个图是否是 \( k \)-可着色性问题是一个NP-完全问题,当 \( k \ge 3 \) 时。当 \( k = 2 \) 时,判断图是否是 2-可着色(即二分图)可以在多项式时间内完成(例如,使用广度优先搜索或深度优先搜索来检查是否存在奇圈)。
顶点着色在很多领域都有应用,例如:
⚝ 时间表安排 (Scheduling):例如,考试时间安排,可以将课程视为顶点,如果两门课程有学生同时选修,则在它们之间连边。顶点着色可以用来分配考试时间,使得同一学生选修的课程考试时间不冲突,并尽可能减少考试时间段的数量。
⚝ 频率分配 (Frequency Assignment):在无线通信中,基站需要分配频率。如果两个基站覆盖区域重叠,则它们不能使用相同的频率以避免干扰。顶点着色可以用来分配频率,使得相邻基站使用不同频率,并最小化使用的频率数量。
⚝ 地图着色 (Map Coloring):经典的地图着色问题,要求用最少的颜色对地图上的区域进行着色,使得相邻区域颜色不同。这可以转化为平面图的顶点着色问题,其中区域是顶点,相邻区域之间连边。四色定理表明任何平面地图都可以用四种颜色着色。6.1.2 四色定理 (Four Color Theorem)
四色问题最早在1852年由弗朗西斯·古德里 (Francis Guthrie) 提出。长期以来,数学家们尝试证明或证伪这个猜想。许多数学家为此做出了贡献,包括德摩根 (De Morgan)、凯利 (Cayley)、肯普 (Kempe) 和泰特 (Tait) 等。
四色定理的证明是图论发展史上的一个里程碑事件,它首次大规模地使用了计算机来辅助数学证明。这个证明引起了数学界的广泛讨论,一方面,它解决了长期以来的一个著名难题;另一方面,计算机辅助证明的方式也引发了一些争议,因为传统的数学证明通常要求能够被人手工验证,而四色定理的证明过于依赖计算机,难以人工验证全部细节。
⚝ 五色定理 (Five Color Theorem):使用肯普链方法可以相对容易地证明五色定理,即任何平面图都是 5-可着色的。五色定理是四色定理的一个较弱版本,但其证明思想是理解四色定理的基础。
四色定理是一个深刻而重要的结果,它不仅解决了地图着色问题,也推动了图论的发展,并引发了关于数学证明方法论的讨论。虽然证明过程复杂且依赖计算机,但四色定理的结论简洁而优美,是组合数学中的一颗璀璨明珠。6.2 边着色 (Edge Coloring)
6.2.1 图的边色数 (Edge Chromatic Number of a Graph)
给定一个图 \( G = (V, E) \),一个正常边着色 (Proper Edge Coloring) 是一个函数 \( c: E \rightarrow \{1, 2, \ldots, k\} \) (或使用颜色集合 \( \{c_1, c_2, \ldots, c_k\} \)),使得对于任意两条相邻的边 \( e_1 = (u, v) \) 和 \( e_2 = (u, w) \) (或 \( e_2 = (x, v) \)),都有 \( c(e_1) \neq c(e_2) \)。
图 \( G \) 的边色数 (Edge Chromatic Number),也称为 色指数 (Chromatic Index),记作 \( \chi'(G) \),是使得图 \( G \) 存在正常边 \( k \)-着色的最小正整数 \( k \)。
⚝ 完全图 (Complete Graph) \( K_3 \): \( K_3 \) 是一个三角形。它的最大度 \( \Delta(K_3) = 2 \)。我们需要至少 3 种颜色来对 \( K_3 \) 进行边着色。实际上,\( \chi'(K_3) = 3 \)。
图 \( G \) 的边色数 \( \chi'(G) \) 至少为最大度 \( \Delta(G) \)。因为在一个度为 \( \Delta(G) \) 的顶点处,有 \( \Delta(G) \) 条边相交,这些边必须颜色各异。因此,\( \chi'(G) \ge \Delta(G) \)。
维辛定理是关于边色数的最重要定理,它指出:对于任何简单图 \( G \),其边色数 \( \chi'(G) \) 只能是 \( \Delta(G) \) 或 \( \Delta(G) + 1 \)。
即,\( \Delta(G) \le \chi'(G) \le \Delta(G) + 1 \)。
⚝ 第一类图 (Class 1 Graph):如果 \( \chi'(G) = \Delta(G) \),则称 \( G \) 为 第一类图 (Class 1 Graph)。
⚝ 第二类图 (Class 2 Graph):如果 \( \chi'(G) = \Delta(G) + 1 \),则称 \( G \) 为 第二类图 (Class 2 Graph)。
柯尼希定理 (König's Theorem) 指出,对于二分图 \( G \),\( \chi'(G) = \Delta(G) \)。因此,所有二分图都是第一类图。
对于完全图 \( K_n \),
⚝ 当 \( n \) 是偶数时,\( \chi'(K_n) = n - 1 = \Delta(K_n) \),所以 \( K_{2n} \) 是第一类图。
⚝ 当 \( n \) 是奇数时,\( \chi'(K_n) = n = \Delta(K_n) + 1 \),所以 \( K_{2n+1} \) 是第二类图。
判断一个图是否是 \( k \)-边可着色性问题也是一个NP-完全问题,当 \( k \ge 3 \) 时。当 \( k = 2 \) 时,问题等价于判断图是否是匹配的集合的并,可以在多项式时间内解决。
边着色与图的匹配密切相关。一个 \( k \)-边着色可以将图的边集划分为 \( k \) 个匹配 \( M_1, M_2, \ldots, M_k \),其中每个 \( M_i \) 是一个匹配(即,\( M_i \) 中的任意两条边都不相邻)。反之,如果可以将图的边集划分为 \( k \) 个匹配,则可以得到一个 \( k \)-边着色。因此,边着色问题可以看作是将边集分解为最少数量的匹配的问题。
边着色在很多领域都有应用,例如:
⚝ 调度问题 (Scheduling):例如,作业车间调度问题,可以将机器视为顶点,作业视为边,边着色可以用来安排作业在机器上的执行时间,避免冲突,并最小化完成所有作业的时间。
⚝ 网络路由 (Network Routing):在通信网络中,边着色可以用于分配网络链路的颜色(例如,波长),使得在同一节点连接的链路使用不同的颜色,避免干扰。
⚝ 时间表安排 (Timetabling):类似于顶点着色在考试时间安排中的应用,边着色也可以用于更复杂的调度问题。6.2.2 维辛定理 (Vizing's Theorem)
对于任何简单图 \( G \),其边色数 \( \chi'(G) \) 要么等于最大度 \( \Delta(G) \),要么等于 \( \Delta(G) + 1 \)。即,
\[ \chi'(G) \in \{\Delta(G), \Delta(G) + 1\} \]
维辛定理极大地简化了边色数的研究。它告诉我们,对于任何图,我们只需要检查两种可能性:\( \Delta(G) \) 和 \( \Delta(G) + 1 \)。这使得确定边色数变得更加容易,尽管确定具体是哪一个值仍然可能是一个难题(NP-完全问题)。
维辛定理的证明相对复杂,但其核心思想是使用肯普链 (Kempe Chain) 的概念,类似于四色定理和五色定理的证明中使用的技巧。证明通常采用归纳法,并结合颜色交换和路径分析等方法。
根据维辛定理,图可以分为两类:
⚝ 第二类图 (Class 2 Graph):如果 \( \chi'(G) = \Delta(G) + 1 \),则图 \( G \) 属于第二类。
虽然维辛定理给出了边色数的可能取值,但判断一个图是第一类图还是第二类图是一个困难的问题。一般而言,确定图的类别是NP-完全的。
① 二分图 (Bipartite Graphs):根据柯尼希定理,所有二分图都是第一类图。
② 偶数阶完全图 (Complete Graphs \( K_{2n} \)):\( K_{2n} \) 是第一类图。
③ 路 (Paths)、偶圈 (Even Cycles) 等。
④ 立方图 (Cubic Graphs) (最大度为 3 的图) 中,除了 \( K_4 \) 之外,很多都是第一类图。
① 奇数阶完全图 (Complete Graphs \( K_{2n+1} \)):\( K_{2n+1} \) 是第二类图。
② 奇圈 (Odd Cycles):\( C_{2n+1} \) 是第二类图。
③ 立方图 \( K_4 \):\( K_4 \) 是第二类图。
④ 扇图 (Fan Graph) \( F_n \) (由一个顶点连接到路径 \( P_n \) 的所有顶点构成,当 \( n \ge 2 \)) 是第二类图。
维辛定理在理论研究和实际应用中都非常重要。
⚝ 理论研究:维辛定理是研究边着色的基础,许多关于边着色的更深入的理论结果都建立在维辛定理之上。
⚝ 算法设计:虽然确定边色数是NP-完全的,但维辛定理缩小了搜索范围,为设计近似算法或启发式算法提供了理论基础。
⚝ 实际应用:在调度问题、网络路由等领域,维辛定理可以帮助分析问题,并为设计有效的解决方案提供指导。
维辛定理是图论中关于边着色的核心定理,它确定了图的边色数只能取两个可能的值:\( \Delta(G) \) 或 \( \Delta(G) + 1 \)。维辛定理不仅在理论上具有重要意义,也在实际应用中发挥着关键作用。理解维辛定理是深入研究边着色问题和应用的基础。6.3 色多项式 (Chromatic Polynomial)
6.3.1 色多项式的定义与性质 (Definition and Properties of Chromatic Polynomial)
对于图 \( G = (V, E) \),色多项式 (Chromatic Polynomial) \( P(G, k) \) 是一个函数,对于每个正整数 \( k \),\( P(G, k) \) 等于用 \( k \) 种颜色对 \( G \) 进行正常顶点着色的方案数。
⚝ 完全图 \( K_n \):
▮▮▮▮⚝ \( P(K_1, k) = k \)。用 \( k \) 种颜色着色一个顶点,有 \( k \) 种方案。
▮▮▮▮⚝ \( P(K_2, k) = k(k-1) \)。第一个顶点有 \( k \) 种颜色选择,第二个顶点必须与第一个顶点颜色不同,有 \( k-1 \) 种选择。
▮▮▮▮⚝ \( P(K_3, k) = k(k-1)(k-2) \)。第一个顶点有 \( k \) 种颜色选择,第二个顶点有 \( k-1 \) 种选择,第三个顶点必须与前两个顶点颜色不同,有 \( k-2 \) 种选择。
▮▮▮▮⚝ 一般地,\( P(K_n, k) = k(k-1)(k-2)\cdots(k-n+1) = \frac{k!}{(k-n)!} = P(k, n) \) (降阶乘多项式)。
▮▮▮▮⚝ \( P(\overline{K}_n, k) = k^n \)。每个顶点都可以独立地选择 \( k \) 种颜色,因此共有 \( k^n \) 种着色方案。
▮▮▮▮⚝ \( P(P_1, k) = k \)。
▮▮▮▮⚝ \( P(P_2, k) = k(k-1) \)。
▮▮▮▮⚝ \( P(P_3, k) = k(k-1)^2 \)。
▮▮▮▮⚝ 一般地,\( P(P_n, k) = k(k-1)^{n-1} \)。
▮▮▮▮⚝ \( P(C_3, k) = P(K_3, k) = k(k-1)(k-2) \)。
▮▮▮▮⚝ \( P(C_4, k) = k(k-1)(k-2)(k-3) + k(k-1)(k-2) = k(k-1)(k-2)^2 \)。
▮▮▮▮⚝ 一般地,\( P(C_n, k) = (k-1)^n + (-1)^n (k-1) \)。
对于任何图 \( G \),\( P(G, k) \) 确实是关于 \( k \) 的多项式。这可以通过归纳法和删除-收缩递推关系证明。
色多项式 \( P(G, k) \) 的度数等于图 \( G \) 的顶点数 \( |V(G)| \)。
色多项式 \( P(G, k) \) 的首项系数为 1。
色多项式 \( P(G, k) \) 的常数项为 0,除非图没有边(空图),此时常数项为 \( 1 \) (当 \( n=0 \) 时,\( P(\overline{K}_0, k) = 1 \))。更准确地说,当 \( k=0 \) 时,\( P(G, 0) = 0 \) (除非图没有顶点,此时 \( P(\emptyset, k) = 1 \))。
色多项式 \( P(G, k) \) 的系数是交错符号的。具体来说,如果 \( P(G, k) = \sum_{i=0}^{n} a_i k^i \),其中 \( n = |V(G)| \),则 \( (-1)^{n-i} a_i \ge 0 \)。
图 \( G \) 的色数 \( \chi(G) \) 是使得 \( P(G, k) > 0 \) 的最小正整数 \( k \)。
这是计算色多项式的重要工具。对于图 \( G \) 和任意一条边 \( e = (u, v) \in E(G) \),令 \( G - e \) 表示从 \( G \) 中删除边 \( e \) 得到的图,令 \( G / e \) 表示通过收缩边 \( e \) (将顶点 \( u \) 和 \( v \) 合并为一个顶点)得到的图。则有:
\[ P(G, k) = P(G - e, k) - P(G / e, k) \]
这个递推关系可以将计算复杂图的色多项式问题转化为计算更简单图的色多项式问题。
如果图 \( G \) 由连通分支 \( G_1, G_2, \ldots, G_c \) 组成,则 \( P(G, k) = P(G_1, k) P(G_2, k) \cdots P(G_c, k) \)。6.3.2 色多项式的计算 (Calculation of Chromatic Polynomial)
1. 选择一条边 \( e = (u, v) \in E(G) \)。
2. 构造两个新图:
▮▮▮▮⚝ 删除图 (Deletion Graph) \( G - e \):从 \( G \) 中删除边 \( e \),顶点和其余边保持不变。
▮▮▮▮⚝ 收缩图 (Contraction Graph) \( G / e \):将边 \( e \) 的两个端点 \( u \) 和 \( v \) 合并为一个新的顶点,并删除所有连接到 \( v \) 的边(除了 \( e \) 之外,因为 \( e \) 已经被收缩了)。原来与 \( u \) 或 \( v \) 相邻的顶点现在与新合并的顶点相邻。如果有重边或自环,需要根据具体定义处理(通常简单图的收缩会删除重边和自环)。
3. 递归应用公式:\( P(G, k) = P(G - e, k) - P(G / e, k) \)。
4. 基本情况 (Base Cases):
▮▮▮▮⚝ 如果图 \( G \) 没有边(即空图 \( \overline{K}_n \)),则 \( P(\overline{K}_n, k) = k^n \)。
▮▮▮▮⚝ 如果图 \( G \) 是完全图 \( K_n \),则 \( P(K_n, k) = k(k-1)\cdots(k-n+1) \)。
▮▮▮▮⚝ 如果图 \( G \) 包含环 (自环),则 \( P(G, k) = 0 \) (因为无法正常着色)。
计算圈 \( C_4 \) 的色多项式。设 \( C_4 \) 的边为 \( e \)。
1. 选择 \( C_4 \) 的一条边 \( e \)。
2. 删除边 \( e \) 得到路径 \( P_4 = C_4 - e \)。
3. 收缩边 \( e \) 得到三角形 \( K_3 = C_4 / e \)。
4. 应用删除-收缩公式:\( P(C_4, k) = P(P_4, k) - P(K_3, k) \)。
我们已知 \( P(P_4, k) = k(k-1)^3 \) 和 \( P(K_3, k) = k(k-1)(k-2) \)。
所以,\( P(C_4, k) = k(k-1)^3 - k(k-1)(k-2) \)。
展开化简:
\[ \begin{aligned} P(C_4, k) &= k(k-1)^3 - k(k-1)(k-2) \\ &= k(k-1)[(k-1)^2 - (k-2)] \\ &= k(k-1)[(k^2 - 2k + 1) - (k-2)] \\ &= k(k-1)(k^2 - 3k + 3) \\ &= k(k-1)(k^2 - 3k + 3) \\ &= k(k^3 - 3k^2 + 3k - k^2 + 3k - 3) \\ &= k(k^3 - 4k^2 + 6k - 3) \\ &= k^4 - 4k^3 + 6k^2 - 3k \end{aligned} \]
因此,\( P(C_4, k) = k^4 - 4k^3 + 6k^2 - 3k \)。
⚝ 当 \( k = 1 \),\( P(C_4, 1) = 1 - 4 + 6 - 3 = 0 \),无法用 1 种颜色着色。
⚝ 当 \( k = 2 \),\( P(C_4, 2) = 2^4 - 4 \cdot 2^3 + 6 \cdot 2^2 - 3 \cdot 2 = 16 - 32 + 24 - 6 = 2 \),可以用 2 种颜色着色,方案数为 2。
⚝ 当 \( k = 3 \),\( P(C_4, 3) = 3^4 - 4 \cdot 3^3 + 6 \cdot 3^2 - 3 \cdot 3 = 81 - 108 + 54 - 9 = 28 \),可以用 3 种颜色着色,方案数为 28。
⚝ 当 \( k = 4 \),\( P(C_4, 4) = 4^4 - 4 \cdot 4^3 + 6 \cdot 4^2 - 3 \cdot 4 = 256 - 256 + 96 - 12 = 84 \),可以用 4 种颜色着色,方案数为 84。
使用删除-收缩递推关系计算色多项式,在最坏情况下,时间复杂度可能是指数级的。因为每次操作可能会增加递归调用的次数。然而,对于一些特殊结构的图,或者通过优化选择删除的边,可以提高计算效率。
色多项式不仅是一个理论工具,也有一些实际应用:
⚝ 计算着色方案数 (Counting Colorings):色多项式可以直接给出用 \( k \) 种颜色着色图的方案数。
⚝ 确定色数 (Determining Chromatic Number):通过找到使得 \( P(G, k) > 0 \) 的最小正整数 \( k \),可以确定图的色数 \( \chi(G) \)。
⚝ 图的性质研究 (Studying Graph Properties):色多项式的系数和根的性质与图的结构性质有关,可以用来研究图的组合性质。
色多项式是图论中一个强大的工具,它将图的着色问题转化为多项式代数问题。通过删除-收缩递推关系,我们可以计算图的色多项式,并利用色多项式研究图的着色性质和结构特征。虽然计算色多项式在一般情况下是困难的,但它为我们理解图的着色提供了深刻的视角。7. chapter 7: 区组设计 (Block Designs)
7.1 平衡不完全区组设计 (Balanced Incomplete Block Designs - BIBD)
7.1.1 BIBD 的定义与参数 (Definition and Parameters of BIBD)
一个 \( (V, \mathcal{B}) \) 称为 平衡不完全区组设计 (Balanced Incomplete Block Design, BIBD),如果它满足以下条件:
① \( V \) 是一个包含 \( v \) 个 处理 (treatments) 的集合。
② \( \mathcal{B} \) 是由 \( V \) 的子集构成的集合,称为 区组 (blocks)。
③ 每个区组 \( B \in \mathcal{B} \) 包含 \( k \) 个不同的处理,其中 \( k < v \) (不完全性)。
④ 每个处理 \( x \in V \) 恰好出现在 \( r \) 个区组中。
⑤ 每一对不同的处理 \( \{x, y\} \subseteq V \) 恰好同时出现在 \( \lambda \) 个区组中 (平衡性)。
① \( v = |V| \) 是 处理数 (number of treatments)。
② \( b = |\mathcal{B}| \) 是 区组数 (number of blocks)。
③ \( k \) 是 区组大小 (block size),即每个区组包含的处理数。
④ \( r \) 是 重复数 (replication number),即每个处理在区组中出现的次数。
⑤ \( \lambda \) 是 成对平衡数 (pairwise balance) 或 关联数 (index),即每对处理同时出现在区组中的次数。
对于一个参数为 \( (v, b, r, k, \lambda) \) 的 BIBD,以下关系成立:
① \( vr = bk \)
② \( \lambda(v-1) = r(k-1) \)
① 考虑 关联矩阵 (incidence matrix) \( N \) ,这是一个 \( v \times b \) 的矩阵,其中 \( N_{ij} = 1 \) 如果第 \( i \) 个处理出现在第 \( j \) 个区组中,否则 \( N_{ij} = 0 \)。
计算矩阵 \( N \) 的所有元素的和,可以从两个角度出发:
⚝ 从处理的角度:每个处理出现 \( r \) 次,共有 \( v \) 个处理,所以总和为 \( vr \)。
⚝ 从区组的角度:每个区组大小为 \( k \),共有 \( b \) 个区组,所以总和为 \( bk \)。
因此,\( vr = bk \)。
另一方面,对于任意一个与 \( x \) 不同的处理 \( y \),对 \( \{x, y\} \) 共同出现的次数为 \( \lambda \)。因此,对于处理 \( x \),其他 \( v-1 \) 个处理每个都与 \( x \) 共同出现 \( \lambda \) 次,总共共同出现 \( \lambda(v-1) \) 次。
所以,\( \lambda(v-1) = r(k-1) \)。
由定理 7.1.1,我们可以得到 BIBD 参数必须满足的必要条件:
① \( bk = vr \) 必须是整数。
② \( r(k-1) = \lambda(v-1) \) 必须是整数。
③ \( b \ge v \) (费舍尔不等式,将在 7.2.2 节讨论)。
④ \( r \ge k \)。
考虑 \( v = 7 \) 个处理 \( V = \{1, 2, 3, 4, 5, 6, 7\} \),区组大小 \( k = 3 \),成对平衡数 \( \lambda = 1 \)。
根据参数关系,我们可以计算出 \( r \) 和 \( b \)。
\( r = \frac{\lambda(v-1)}{k-1} = \frac{1 \times (7-1)}{3-1} = \frac{6}{2} = 3 \)
\( b = \frac{vr}{k} = \frac{7 \times 3}{3} = 7 \)
所以,参数为 \( (7, 7, 3, 3, 1) \) 的 BIBD 可能存在。
以下是一个这样的 BIBD 的区组集合 \( \mathcal{B} \):
\[ \mathcal{B} = \{ \{1, 2, 3\}, \{1, 4, 5\}, \{1, 6, 7\}, \{2, 4, 6\}, \{2, 5, 7\}, \{3, 4, 7\}, \{3, 5, 6\} \} \]
验证这个设计是否为 BIBD:
① 处理数 \( v = 7 \)。
② 区组数 \( b = 7 \)。
③ 区组大小 \( k = 3 \)。
④ 每个处理的重复数 \( r = 3 \)。例如,处理 1 出现在区组 \( \{1, 2, 3\}, \{1, 4, 5\}, \{1, 6, 7\} \) 中,共 3 次。
⑤ 每对处理的成对平衡数 \( \lambda = 1 \)。例如,处理对 \( \{1, 2\} \) 只出现在区组 \( \{1, 2, 3\} \) 中,共 1 次。7.1.2 BIBD 的构造方法 (Construction Methods of BIBD)
设 \( G \) 是一个 \( v \) 阶加法群。一个 \( k \) 元子集 \( D = \{d_1, d_2, \ldots, d_k\} \subseteq G \) 称为 \( (v, k, \lambda) \) 差集 (difference set),如果对于每个非零元素 \( g \in G \setminus \{0\} \),恰好有 \( \lambda \) 对 \( (d_i, d_j) \) (其中 \( d_i, d_j \in D \)) 使得 \( d_i - d_j = g \) 或 \( d_j - d_i = g \)。
设 \( D = \{d_1, d_2, \ldots, d_k\} \) 是 \( v \) 阶加法群 \( G \) 中的一个 \( (v, k, \lambda) \) 差集。令 \( \mathcal{B} = \{D + g \mid g \in G \} \),其中 \( D + g = \{d + g \mid d \in D \} \)。则 \( (G, \mathcal{B}) \) 是一个参数为 \( (v, v, k, k, \lambda) \) 的 BIBD。这样的 BIBD 也被称为 循环 BIBD (cyclic BIBD)。
1. 找到一个 \( (v, k, \lambda) \) 差集 \( D \) 在 \( v \) 阶加法群 \( G \) 中。
2. 通过将差集 \( D \) 循环平移群 \( G \) 中的所有元素,生成区组集合 \( \mathcal{B} = \{D + g \mid g \in G \} \)。
取 \( v = 7 \),加法群为 \( \mathbb{Z}_7 = \{0, 1, 2, 3, 4, 5, 6\} \)。
考虑差集 \( D = \{1, 2, 4\} \subseteq \mathbb{Z}_7 \)。这里 \( k = 3 \)。
计算差集 \( D \) 的所有非零差:
\( 1-2 \equiv -1 \equiv 6 \pmod{7} \)
\( 1-4 \equiv -3 \equiv 4 \pmod{7} \)
\( 2-1 \equiv 1 \pmod{7} \)
\( 2-4 \equiv -2 \equiv 5 \pmod{7} \)
\( 4-1 \equiv 3 \pmod{7} \)
\( 4-2 \equiv 2 \pmod{7} \)
差的集合为 \( \{\pm 1, \pm 2, \pm 3\} \equiv \{1, 2, 3, 4, 5, 6\} \pmod{7} \)。每个非零差都出现一次,所以 \( \lambda = 1 \)。
因此,\( D = \{1, 2, 4\} \) 是一个 \( (7, 3, 1) \) 差集。
\( D + 0 = \{1, 2, 4\} \)
\( D + 1 = \{2, 3, 5\} \)
\( D + 2 = \{3, 4, 6\} \)
\( D + 3 = \{4, 5, 0\} \equiv \{0, 4, 5\} \)
\( D + 4 = \{5, 6, 1\} \equiv \{1, 5, 6\} \)
\( D + 5 = \{6, 0, 2\} \equiv \{0, 2, 6\} \)
\( D + 6 = \{0, 1, 3\} \equiv \{0, 1, 3\} \)
\[ \mathcal{B} = \{ \{1, 2, 4\}, \{2, 3, 5\}, \{3, 4, 6\}, \{4, 5, 7\}, \{5, 6, 1\}, \{6, 7, 2\}, \{7, 1, 3\} \} \]
这与例子 7.1.1 中的法诺平面是同构的。
设 \( q \) 是一个素数幂,\( \mathbb{F}_q \) 是 \( q \) 阶有限域。取 \( V = \mathbb{F}_q \)。
⚝ 若要构造参数为 \( (q, q, k, k, \lambda) \) 的 BIBD,可以利用适当的子集作为初始区组,然后通过加法群 \( (\mathbb{F}_q, +) \) 的平移生成所有区组。
⚝ 若要构造参数为 \( (q^2, q+1, k, k, \lambda) \) 的 BIBD,可以考虑射影几何中的结构。
取 \( q = 3 \),有限域 \( \mathbb{F}_3 = \{0, 1, 2\} \)。
考虑 \( v = q = 3 \),\( k = 2 \),\( \lambda = 1 \)。
计算 \( r = \frac{\lambda(v-1)}{k-1} = \frac{1 \times (3-1)}{2-1} = 2 \),\( b = \frac{vr}{k} = \frac{3 \times 2}{2} = 3 \)。
我们需要构造一个 \( (3, 3, 2, 2, 1) \) BIBD。
取初始区组 \( B_1 = \{0, 1\} \)。
生成区组集合 \( \mathcal{B} = \{B_1 + g \mid g \in \mathbb{F}_3 \} \):
\( B_1 + 0 = \{0, 1\} \)
\( B_1 + 1 = \{1, 2\} \)
\( B_1 + 2 = \{2, 0\} \equiv \{0, 2\} \)
区组集合为 \( \mathcal{B} = \{ \{0, 1\}, \{1, 2\}, \{0, 2\} \} \)。
这是一个参数为 \( (3, 3, 2, 2, 1) \) 的 BIBD。
⚝ 递归构造 (Recursive Construction):利用已知的 BIBD 构造新的 BIBD。
⚝ 组合设计分解 (Decomposition of Designs):将一个大的设计分解成若干个小的设计。
⚝ 图论方法 (Graph Theory Methods):利用图的结构性质构造 BIBD。7.2 对称区组设计 (Symmetric Block Designs)
7.2.1 对称 BIBD 的性质 (Properties of Symmetric BIBD)
一个 BIBD 如果满足 \( v = b \),则称之为 对称平衡不完全区组设计 (Symmetric Balanced Incomplete Block Design, SBIBD) 或 对称区组设计 (symmetric block design)。
设 \( (V, \mathcal{B}) \) 是一个参数为 \( (v, k, \lambda) \) 的对称 BIBD。则它具有以下性质:
① \( r = k \)。
② \( \lambda(v-1) = k(k-1) \)。
③ 任意两个不同的区组 \( B_1, B_2 \in \mathcal{B} \) 恰好有 \( \lambda \) 个共同的处理,即 \( |B_1 \cap B_2| = \lambda \)。
① 已在定义中说明。
② 由 BIBD 的参数关系 \( \lambda(v-1) = r(k-1) \) 和 \( r = k \) 直接得到 \( \lambda(v-1) = k(k-1) \)。
③ 考虑任意两个不同的区组 \( B_1, B_2 \in \mathcal{B} \)。设 \( |B_1 \cap B_2| = x \)。我们需要证明 \( x = \lambda \)。
考虑不在 \( B_1 \cap B_2 \) 中的处理。
⚝ 在 \( B_1 \) 中但不在 \( B_2 \) 中的处理有 \( k - x \) 个。
⚝ 在 \( B_2 \) 中但不在 \( B_1 \) 中的处理有 \( k - x \) 个。
⚝ 既不在 \( B_1 \) 也不在 \( B_2 \) 中的处理有 \( v - 2k + x \) 个。
区组 \( B_2 \) 中有 \( k \) 个处理,每个处理与 \( p \) 共同出现 \( \lambda \) 次,所以处理 \( p \) 需要与 \( B_2 \) 中的处理在 \( \lambda k \) 个区组中共同出现。但是,这似乎不是直接证明 \( |B_1 \cap B_2| = \lambda \) 的好方法。
考虑关联矩阵 \( N \) ( \( v \times b \) 矩阵,这里 \( v = b \))。对于对称 BIBD,\( N \) 是一个 \( v \times v \) 的方阵。
我们计算 \( N N^T \) 的 \( (i, j) \) 元。
\[ (N N^T)_{ij} = \sum_{l=1}^{v} N_{il} N_{jl}^T = \sum_{l=1}^{v} N_{il} N_{lj} \]
⚝ 当 \( i = j \) 时,\( (N N^T)_{ii} = \sum_{l=1}^{v} N_{il}^2 = \sum_{l=1}^{v} N_{il} \)。这表示第 \( i \) 个处理在所有区组中出现的次数,即重复数 \( r = k \)。
⚝ 当 \( i \neq j \) 时,\( (N N^T)_{ij} = \sum_{l=1}^{v} N_{il} N_{jl} \)。这表示第 \( i \) 个处理和第 \( j \) 个处理同时出现在区组中的次数,即成对平衡数 \( \lambda \)。
因此,\( N N^T \) 是一个 \( v \times v \) 矩阵,对角线元素为 \( k \),非对角线元素为 \( \lambda \)。
\[ N N^T = \begin{pmatrix} k & \lambda & \lambda & \cdots & \lambda \\ \lambda & k & \lambda & \cdots & \lambda \\ \lambda & \lambda & k & \cdots & \lambda \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \lambda & \lambda & \lambda & \cdots & k \end{pmatrix} = (k-\lambda)I + \lambda J \]
其中 \( I \) 是 \( v \times v \) 单位矩阵,\( J \) 是 \( v \times v \) 全 1 矩阵。
\[ (N^T N)_{ij} = \sum_{l=1}^{v} N^T_{il} N_{lj} = \sum_{l=1}^{v} N_{li} N_{lj} \]
⚝ 当 \( i = j \) 时,\( (N^T N)_{ii} = \sum_{l=1}^{v} N_{li}^2 = \sum_{l=1}^{v} N_{li} \)。这表示第 \( i \) 个区组包含的处理数,即区组大小 \( k \)。
⚝ 当 \( i \neq j \) 时,\( (N^T N)_{ij} = \sum_{l=1}^{v} N_{li} N_{lj} \)。这表示第 \( i \) 个区组和第 \( j \) 个区组共同包含的处理数,即 \( |B_i \cap B_j| \)。
因此,当 \( i \neq j \) 时,\( (N^T N)_{ij} = |B_i \cap B_j| = \lambda \)。
法诺平面对应的 BIBD 参数为 \( (7, 7, 3, 3, 1) \),是一个对称 BIBD,参数为 \( (v, k, \lambda) = (7, 3, 1) \)。
任意两个区组的交集大小为 \( \lambda = 1 \)。例如,\( \{1, 2, 3\} \cap \{1, 4, 5\} = \{1\} \),大小为 1。7.2.2 费舍尔不等式 (Fisher's Inequality)
对于任意一个 BIBD \( (V, \mathcal{B}) \),如果 \( k < v \),则区组数 \( b \ge v \)。等号成立当且仅当 BIBD 是对称的。
设 \( N \) 是 BIBD 的 \( v \times b \) 关联矩阵。考虑矩阵乘积 \( N N^T \)。
如 7.2.1 节证明性质 7.2.1 ③ 时所述,\( (N N^T)_{ij} \) 表示:
⚝ 当 \( i = j \) 时,\( (N N^T)_{ii} = r \)。
⚝ 当 \( i \neq j \) 时,\( (N N^T)_{ij} = \lambda \)。
所以,\( N N^T = (r-\lambda)I + \lambda J \),这是一个 \( v \times v \) 矩阵。
由于 \( N N^T = (r-\lambda)I + \lambda J \),我们可以计算其特征值。
设 \( \mathbf{j} = (1, 1, \ldots, 1)^T \) 是全 1 列向量。
\( J \mathbf{j} = v \mathbf{j} \),所以 \( \mathbf{j} \) 是 \( J \) 的特征向量,特征值为 \( v \)。
对于任何与 \( \mathbf{j} \) 正交的向量 \( \mathbf{x} \),即 \( \mathbf{j}^T \mathbf{x} = 0 \),有 \( J \mathbf{x} = \mathbf{0} = 0 \mathbf{x} \),所以 \( \mathbf{x} \) 是 \( J \) 的特征向量,特征值为 0。
因此,\( J \) 的特征值为 \( v \) (重数为 1) 和 0 (重数为 \( v-1 \))。
⚝ 对应于 \( J \) 的特征值 \( v \),\( N N^T \) 的特征值为 \( (r-\lambda) + \lambda v = r + \lambda(v-1) = r + r(k-1) = rk \) (利用 \( \lambda(v-1) = r(k-1) \))。
⚝ 对应于 \( J \) 的特征值 0,\( N N^T \) 的特征值为 \( (r-\lambda) + \lambda \times 0 = r-\lambda \)。由于 0 是 \( J \) 的 \( v-1 \) 重特征值,所以 \( r-\lambda \) 是 \( N N^T \) 的 \( v-1 \) 重特征值。
行列式是所有特征值的乘积:
\[ \det(N N^T) = (rk) (r-\lambda)^{v-1} \]
由于 \( r = \frac{\lambda(v-1)}{k-1} \),且 \( k < v \),所以 \( k-1 < v-1 \),如果 \( \lambda > 0 \),则 \( r > \lambda \),即 \( r-\lambda > 0 \)。
如果 BIBD 是非退化的,即 \( r > 0 \) 和 \( k > 0 \),则 \( rk > 0 \)。
因此,\( \det(N N^T) = (rk) (r-\lambda)^{v-1} > 0 \)。
所以 \( N N^T \) 是非奇异矩阵,即 \( \text{rank}(N N^T) = v \)。
由于 \( N \) 是 \( v \times b \) 矩阵,所以 \( \text{rank}(N) \le \min(v, b) \)。
因此,\( v = \text{rank}(N N^T) \le \text{rank}(N) \le \min(v, b) \)。
要使 \( v \le \min(v, b) \) 成立,必须有 \( v \le b \)。
所以 \( b \ge v \)。
反之,如果 BIBD 是对称的,则 \( b = v \)。
费舍尔不等式给出了 BIBD 的区组数 \( b \) 的下界,说明区组数不能太少。对于非对称的 BIBD,区组数必须严格大于处理数。7.3 循环区组设计 (Cyclic Block Designs)
7.3.1 循环 BIBD 的构造 (Construction of Cyclic BIBD)
一个 BIBD \( (V, \mathcal{B}) \) 称为 循环的 (cyclic),如果处理集合 \( V = \mathbb{Z}_v = \{0, 1, \ldots, v-1\} \) (或同构于 \( \mathbb{Z}_v \)),且区组集合 \( \mathcal{B} \) 在模 \( v \) 的加法群作用下是封闭的。即如果 \( B = \{b_1, b_2, \ldots, b_k\} \in \mathcal{B} \),则 \( B + 1 = \{b_1+1, b_2+1, \ldots, b_k+1\} \pmod{v} \) 也属于 \( \mathcal{B} \)。
1. 确定 BIBD 的参数 \( (v, k, \lambda) \)。计算 \( r = \frac{\lambda(v-1)}{k-1} \) 和 \( b = \frac{vr}{k} \)。
2. 寻找一个或多个初始区组 \( B_1, B_2, \ldots, B_t \)。
3. 通过循环移位生成区组集合:
\[ \mathcal{B} = \{ B_i + j \pmod{v} \mid i = 1, 2, \ldots, t; j = 0, 1, \ldots, \frac{b}{t} - 1 \} \]
其中 \( t \) 是初始区组的个数,\( \frac{b}{t} \) 必须是整数。通常情况下,我们希望使用尽可能少的初始区组,理想情况是只用一个初始区组,即 \( t = 1 \) 或 \( t \) 是 \( b \) 的一个较小的因子。
构造参数为 \( (7, 3, 1) \) 的循环 BIBD。
参数 \( v = 7, k = 3, \lambda = 1 \)。计算 \( r = 3, b = 7 \)。
我们只需要一个初始区组。取初始区组 \( B_1 = \{1, 2, 4\} \subseteq \mathbb{Z}_7 \)。
通过循环移位生成区组集合:
\( B_1 + 0 = \{1, 2, 4\} \)
\( B_1 + 1 = \{2, 3, 5\} \)
\( B_1 + 2 = \{3, 4, 6\} \)
\( B_1 + 3 = \{4, 5, 0\} \equiv \{0, 4, 5\} \)
\( B_1 + 4 = \{5, 6, 1\} \equiv \{1, 5, 6\} \)
\( B_1 + 5 = \{6, 0, 2\} \equiv \{0, 2, 6\} \)
\( B_1 + 6 = \{0, 1, 3\} \equiv \{0, 1, 3\} \)
区组集合 \( \mathcal{B} = \{ \{1, 2, 4\}, \{2, 3, 5\}, \{3, 4, 6\}, \{4, 5, 0\}, \{5, 6, 1\}, \{6, 0, 2\}, \{0, 1, 3\} \} \)。
这与例子 7.1.2 利用差集方法构造的 BIBD 相同,也是法诺平面的区组设计形式。
寻找初始区组通常需要尝试和错误,或者利用差集理论。对于某些参数,已经有系统的方法来构造初始区组。7.3.2 应用实例 (Application Examples)
BIBD 特别适用于以下情况:
⚝ 区组大小 \( k \) 小于处理数 \( v \),即不完全区组设计。
⚝ 需要保证每对处理在实验中被公平地比较,即平衡性。
例如,要安排 7 支球队进行循环赛,每轮比赛 3 场,每队每轮比赛最多参加一场。可以使用参数为 \( (7, 7, 3, 3, 1) \) 的 BIBD。
将 7 支球队作为 7 个处理,7 个区组作为 7 轮比赛。每个区组 \( \{i, j, k\} \) 表示在对应轮次中,安排球队 \( i, j, k \) 之间进行比赛 (具体如何配对还需要进一步设计,例如可以考虑每轮比赛 \( (i, j), (k, l), \ldots \) 这样的配对)。由于是 BIBD,每两支球队会在同一轮比赛中“相遇”一次 (作为对手或共同的对手),保证了赛程的平衡性。
区组设计作为组合数学的重要分支,在理论研究和实际应用中都具有重要价值。循环 BIBD 由于其构造的规律性和应用的广泛性,是区组设计理论中一个活跃的研究领域。随着计算机技术的发展,利用计算机搜索和构造 BIBD 也成为一种重要的研究手段。8. chapter 8: 拉丁方与正交拉丁方 (Latin Squares and Orthogonal Latin Squares)
8.1 拉丁方的定义与性质 (Definition and Properties of Latin Squares)
8.1.1 标准型拉丁方 (Standard Latin Squares)
\[ L = \begin{pmatrix} 1 & 2 & 3 \\ 2 & 3 & 1 \\ 3 & 1 & 2 \end{pmatrix} \]
检查每一行和每一列,符号 \(1, 2, 3\) 都恰好出现一次。
\[ L = \begin{pmatrix} 1 & 2 & 3 & 4 \\ 2 & 1 & 4 & 3 \\ 3 & 4 & 1 & 2 \\ 4 & 3 & 2 & 1 \end{pmatrix} \]
第一行是 \(1, 2, 3, 4\),第一列是 \(1, 2, 3, 4\)。
① 对于任意 \(n\) 阶拉丁方,每一行和每一列都包含了符号集合 \(S\) 的所有元素。
② 交换拉丁方的任意两行(或任意两列),结果仍然是一个拉丁方。
③ 将拉丁方中的所有符号进行一致的置换,结果仍然是一个拉丁方。
④ 一个 \(n\) 阶拉丁方共有 \(n!^{n}\) 种可能的行排列方式,但并非所有排列都能构成拉丁方。
① 根据拉丁方的定义,这是显然的。
② 交换两行或两列后,每行每列仍然包含所有符号且只出现一次。
③ 符号置换不影响每行每列符号的完整性和唯一性。
④ 第一行有 \(n!\) 种排列方式,对于每一行,后续行的选择会受到约束,直接计算总数较为复杂,但可以肯定的是远小于 \(n!^{n}\)。
对于任意 \(n \ge 1\),我们可以构造一个 \(n\) 阶拉丁方 \(L\),其中 \(L_{ij} = (i+j-2) \pmod{n} + 1\),这里 \(i, j \in \{1, 2, \ldots, n\}\)。
当 \(n=4\) 时,\(L_{ij} = (i+j-2) \pmod{4} + 1\)。
\[ L = \begin{pmatrix} (1+1-2)\pmod{4}+1 & (1+2-2)\pmod{4}+1 & (1+3-2)\pmod{4}+1 & (1+4-2)\pmod{4}+1 \\ (2+1-2)\pmod{4}+1 & (2+2-2)\pmod{4}+1 & (2+3-2)\pmod{4}+1 & (2+4-2)\pmod{4}+1 \\ (3+1-2)\pmod{4}+1 & (3+2-2)\pmod{4}+1 & (3+3-2)\pmod{4}+1 & (3+4-2)\pmod{4}+1 \\ (4+1-2)\pmod{4}+1 & (4+2-2)\pmod{4}+1 & (4+3-2)\pmod{4}+1 & (4+4-2)\pmod{4}+1 \end{pmatrix} = \begin{pmatrix} 1 & 2 & 3 & 4 \\ 2 & 3 & 4 & 1 \\ 3 & 4 & 1 & 2 \\ 4 & 1 & 2 & 3 \end{pmatrix} \]
这是一个 4 阶拉丁方。8.1.2 拉丁方的计数 (Counting Latin Squares)
① 行置换 (Row Permutation)
② 列置换 (Column Permutation)
③ 符号置换 (Symbol Permutation)
令 \(L(n)\) 表示 \(n\) 阶拉丁方的数量,\(L_s(n)\) 表示 \(n\) 阶标准型拉丁方的数量,\(I(n)\) 表示 \(n\) 阶不同构拉丁方的数量。
⚝ \(L(1) = 1\), \(L_s(1) = 1\), \(I(1) = 1\)
⚝ \(L(2) = 2\), \(L_s(2) = 1\), \(I(2) = 1\)
⚝ \(L(3) = 12\), \(L_s(3) = 1\), \(I(3) = 1\)
⚝ \(L(4) = 576\), \(L_s(4) = 4\), \(I(4) = 2\)
⚝ \(L(5) = 161,280\), \(L_s(5) = 56\), \(I(5) = 6\)
⚝ \(L(6) = 812,851,200\), \(L_s(6) = 9,408\), \(I(6) = ?\) (精确值未知,计算非常复杂)
⚝ \(L(7) \approx 3.7759757 \times 10^{15}\), \(L_s(7) = 16,942,808,000\), \(I(7) = ?\) (精确值未知)
在计数和研究拉丁方时,通常考虑标准型拉丁方,因为任何一个拉丁方都可以通过行置换、列置换和符号置换转化为标准型拉丁方。因此,标准型拉丁方的计数在一定程度上代表了不同构拉丁方的基本结构。
可以使用回溯算法 (Backtracking Algorithm) 来生成和计数标准型拉丁方。基本思路是从第一行第二列开始,逐个位置尝试填入符号,并检查是否满足拉丁方的条件。如果当前位置填入符号后仍然满足条件,则继续填充下一个位置;如果不满足条件,则回溯到上一个位置,尝试其他符号。
1
def is_latin_square(matrix, n):
2
# 检查行和列是否满足拉丁方条件
3
for row in matrix:
4
if len(set(row)) != n or any(x not in range(1, n + 1) for x in row):
5
return False
6
for col_index in range(n):
7
col = [matrix[row_index][col_index] for row_index in range(n)]
8
if len(set(col)) != n or any(x not in range(1, n + 1) for x in col):
9
return False
10
return True
11
12
def count_standard_latin_squares(n):
13
if n <= 0:
14
return 0
15
if n == 1:
16
return 1
17
18
count = 0
19
matrix = [[0] * n for _ in range(n)]
20
matrix[0] = list(range(1, n + 1)) # 第一行固定为标准型
21
22
def solve(row, col):
23
nonlocal count
24
if row == n:
25
if is_latin_square(matrix, n):
26
count += 1
27
return
28
29
next_row, next_col = (row, col + 1) if col < n - 1 else (row + 1, 0)
30
if row == 0: # 第一行已固定
31
solve(next_row, next_col)
32
return
33
34
if col == 0: # 第一列已固定
35
matrix[row][col] = row + 1 # 标准型第一列
36
solve(next_row, next_col)
37
return
38
39
for num in range(1, n + 1):
40
valid = True
41
# 检查行冲突
42
if num in matrix[row][:col]:
43
valid = False
44
# 检查列冲突
45
for r in range(row):
46
if matrix[r][col] == num:
47
valid = False
48
if valid:
49
matrix[row][col] = num
50
solve(next_row, next_col)
51
matrix[row][col] = 0 # 回溯
52
53
solve(1, 1) # 从 (1, 1) 位置开始填充
54
return count
55
56
# 计算 4 阶标准型拉丁方数量
57
n = 4
58
standard_latin_squares_count = count_standard_latin_squares(n)
59
print(f"{n} 阶标准型拉丁方数量: {standard_latin_squares_count}") # 输出 4 阶标准型拉丁方数量: 4
8.2 正交拉丁方 (Orthogonal Latin Squares - OLS)
8.2.1 OLS 的定义与存在性 (Definition and Existence of OLS)
\[ L_1 = \begin{pmatrix} 0 & 1 & 2 & 3 \\ 1 & 0 & 3 & 2 \\ 2 & 3 & 0 & 1 \\ 3 & 2 & 1 & 0 \end{pmatrix}, \quad L_2 = \begin{pmatrix} 0 & 1 & 2 & 3 \\ 2 & 3 & 0 & 1 \\ 3 & 2 & 1 & 0 \\ 1 & 0 & 3 & 2 \end{pmatrix} \]
将它们叠放在一起,得到有序对矩阵 \((L_1, L_2)\):
\[ (L_1, L_2) = \begin{pmatrix} (0,0) & (1,1) & (2,2) & (3,3) \\ (1,2) & (0,3) & (3,0) & (2,1) \\ (2,3) & (3,2) & (0,1) & (1,0) \\ (3,1) & (2,0) & (1,3) & (0,2) \end{pmatrix} \]
检查所有 16 个有序对,它们都是不同的。因此,\(L_1\) 和 \(L_2\) 是一对 4 阶正交拉丁方。
考虑一个 \(n\) 阶 OLS 集合 \(L_1, L_2, \ldots, L_k\)。我们可以将它们都转化为标准型,即第一行都是 \(1, 2, \ldots, n\)。考虑这些拉丁方的第二行第一列的元素。由于它们都是标准型,第一行第一列元素都是 1。为了保证正交性,第二行第一列的元素不能相同。又因为符号集合大小为 \(n\),所以最多有 \(n-1\) 个拉丁方。更严格的证明需要更细致的分析,但这个思路给出了 \(n-1\) 上界的直观解释。
当 \(n = p^k\) 是素数幂时,存在 \(n\) 阶有限域 \(GF(n)\)。设 \(GF(n) = \{a_0, a_1, \ldots, a_{n-1}\}\),其中 \(a_0 = 0, a_1 = 1\)。对于 \(GF(n)\) 中的每个非零元素 \(x \in GF(n)^*\),定义一个 \(n \times n\) 矩阵 \(L_x\),其 \((i, j)\) 元素为:
\[ (L_x)_{ij} = a_i + x a_j, \quad i, j \in \{0, 1, \ldots, n-1\} \]
其中加法和乘法运算在 \(GF(n)\) 中进行。可以证明,对于 \(GF(n)^*\) 中的每个非零元素 \(x\),\(L_x\) 都是一个拉丁方,且对于不同的非零元素 \(x, y \in GF(n)^*\) (\(x \neq y\)), \(L_x\) 和 \(L_y\) 是正交的。由于 \(GF(n)^*\) 包含 \(n-1\) 个元素,因此可以构造出一个包含 \(n-1\) 个 \(n\) 阶正交拉丁方的完备集合。
\(n = 3\) 是素数,有限域 \(GF(3) = \{0, 1, 2\}\) (模 3 运算)。非零元素为 \(GF(3)^* = \{1, 2\}\)。
当 \(x = 1\) 时,\(L_1\):
\[ L_1 = \begin{pmatrix} 0+1\cdot 0 & 0+1\cdot 1 & 0+1\cdot 2 \\ 1+1\cdot 0 & 1+1\cdot 1 & 1+1\cdot 2 \\ 2+1\cdot 0 & 2+1\cdot 1 & 2+1\cdot 2 \end{pmatrix} = \begin{pmatrix} 0 & 1 & 2 \\ 1 & 2 & 0 \\ 2 & 0 & 1 \end{pmatrix} \]
当 \(x = 2\) 时,\(L_2\):
\[ L_2 = \begin{pmatrix} 0+2\cdot 0 & 0+2\cdot 1 & 0+2\cdot 2 \\ 1+2\cdot 0 & 1+2\cdot 1 & 1+2\cdot 2 \\ 2+2\cdot 0 & 2+2\cdot 1 & 2+2\cdot 2 \end{pmatrix} = \begin{pmatrix} 0 & 2 & 1 \\ 1 & 0 & 2 \\ 2 & 1 & 0 \end{pmatrix} \]
可以验证 \(L_1\) 和 \(L_2\) 都是拉丁方,且它们是正交的。因此,\(\{L_1, L_2\}\) 是一个 3 阶完备 OLS 集合。8.2.2 欧拉猜想与麦克尼什-曼恩定理 (Euler's Conjecture and MacNeish-Mann Theorem)
⚝ 对于 \(n = 2\) 和 \(n = 6\),不存在正交拉丁方。
⚝ 对于所有其他 \(n \neq 2, 6\),都存在至少一对正交拉丁方。
⚝ 当 \(n\) 是素数幂时,存在完备正交拉丁方集(\(n-1\) 个)。
⚝ 麦克尼什-曼恩定理给出了 OLS 集合大小的一个上界。8.3 应用于实验设计 (Applications in Experimental Design)
8.3.1 因子设计 (Factorial Designs)
拉丁方设计适用于有两个区组变量和一个处理变量的情况。假设我们有三个因素:行区组 (Row Block),列区组 (Column Block),和处理 (Treatment)。我们希望消除行区组和列区组的干扰,只考察处理因素的影响。
例如,在农业实验中,我们可能需要考察不同肥料 (处理) 对作物产量的影响,同时考虑到土壤肥力在行和列方向上的差异 (行区组和列区组)。
使用 \(n\) 阶拉丁方,其中行代表行区组,列代表列区组,拉丁方中的符号代表处理。每个处理在每一行和每一列都出现一次,保证了处理与行区组和列区组的正交性。
假设要比较 4 种肥料 (A, B, C, D) 对小麦产量的影响,实验田被划分为 4 行 4 列的方阵,行和列可能存在土壤肥力差异。使用一个 4 阶拉丁方进行设计:
\[ \begin{pmatrix} A & B & C & D \\ B & A & D & C \\ C & D & A & B \\ D & C & B & A \end{pmatrix} \]
在这个设计中:
⚝ 行代表行区组 (例如,从北到南的土壤梯度)
⚝ 列代表列区组 (例如,从东到西的土壤湿度梯度)
⚝ 拉丁方中的字母 A, B, C, D 代表 4 种肥料处理。
当需要考察更多的处理因素时,可以使用正交拉丁方设计。如果存在 \(k\) 个互相正交的 \(n\) 阶拉丁方,我们可以设计一个实验,同时考察 \(k+2\) 个因素,其中两个因素作为区组变量,\(k\) 个因素作为处理变量。
例如,在工业实验中,可能需要同时考察温度、压力、时间和催化剂类型等多个因素对化学反应产率的影响。
使用一组 \(k\) 个 \(n\) 阶正交拉丁方 \(L_1, L_2, \ldots, L_k\)。行和列仍然代表两个区组变量。对于 \(k\) 个处理因素,分别用 \(L_1, L_2, \ldots, L_k\) 中的符号来表示。
假设要考察 3 个因素 (肥料种类、灌溉方式、播种密度) 对玉米产量的影响,每个因素有 3 个水平。实验田划分为 \(3 \times 3\) 方阵,行和列代表土壤差异区组。由于存在一对 3 阶正交拉丁方 \(L_1, L_2\),我们可以设计实验如下:
\[ L_1 = \begin{pmatrix} 0 & 1 & 2 \\ 1 & 2 & 0 \\ 2 & 0 & 1 \end{pmatrix}, \quad L_2 = \begin{pmatrix} 0 & 2 & 1 \\ 1 & 0 & 2 \\ 2 & 1 & 0 \end{pmatrix} \]
实验设计:
⚝ 行:行区组
⚝ 列:列区组
⚝ \(L_1\):肥料种类 (水平 0, 1, 2 代表三种肥料)
⚝ \(L_2\):灌溉方式 (水平 0, 1, 2 代表三种灌溉方式)
⚝ 播种密度:可以固定为一个水平,或者在每个单元格内随机分配。8.3.2 农业实验设计 (Agricultural Experimental Design)
① 品种比较实验:比较不同作物品种的产量、抗病性等指标。可以使用拉丁方设计来消除田间土壤差异的影响,更准确地评估品种间的差异。
② 肥料效应实验:研究不同肥料种类、施肥量、施肥时间对作物生长的影响。拉丁方设计可以控制土壤肥力梯度,提高肥料效应评估的准确性。
③ 灌溉方式实验:比较不同灌溉方式 (如滴灌、喷灌、漫灌) 对作物水分利用效率和产量的影响。拉丁方设计可以控制田间水分分布不均的影响。
④ 农药药效实验:评估不同农药种类、浓度、施药频率对病虫害防治效果和作物安全性的影响。拉丁方设计可以减少田间病虫害分布不均匀造成的误差。
⚝ 控制双向区组效应:拉丁方设计可以同时控制行和列两个方向的区组效应,适用于田间存在明显土壤梯度或其他系统性变异的情况。
⚝ 提高实验效率:相比完全随机设计和随机区组设计,拉丁方设计在控制区组效应的同时,保持了较高的实验效率。
⚝ 设计灵活:可以根据实验因素的个数和水平数选择合适的拉丁方或正交拉丁方设计。
⚝ 适用条件限制:拉丁方设计要求行区组数、列区组数和处理数相等,当因素水平数较多或区组结构复杂时,可能不适用。
⚝ 交互效应假设:拉丁方设计通常假设区组效应和处理效应之间没有交互作用,如果交互作用显著,拉丁方设计的分析结果可能存在偏差。
⚝ 自由度损失:拉丁方设计中,误差自由度相对较小,当实验规模较小时,可能影响统计检验的效力。
为了克服拉丁方设计的局限性,研究者们提出了多种改进和扩展的设计方法,例如:
⚝ 裂区设计 (Split-plot Design):适用于处理因素之间需要分层施加的实验。
⚝ 条区设计 (Strip-plot Design):适用于两个处理因素分别在行和列方向上施加的实验。
⚝ 格子设计 (Lattice Design):适用于处理数较多,但需要控制区组效应的情况。
⚝ 平衡不完全区组设计 (Balanced Incomplete Block Design, BIBD):适用于处理数多于区组大小的情况。9. chapter 9: 有限几何 (Finite Geometry)
9.1 仿射平面 (Affine Planes)
9.1.1 仿射平面的公理系统 (Axiomatic System of Affine Planes)
这个公理确保了仿射平面不是退化的,即不是一条直线或者一个点。不共线 (Non-collinear) 的意思是这三个点不在同一条直线上。
对于平面上任意两个不同的点,存在且仅存在一条直线经过这两点。这与欧几里得几何中的直线公理一致。
这是仿射平面的核心特征,它定义了平行线的概念。注意这里的“平行”关系是仿射平面的关键。在仿射几何中,平行被定义为不相交或重合。
这个公理保证了平面不是由一条直线构成的,确保了平面的“二维性”。
如果直线 \(l\) 平行于直线 \(m\),直线 \(m\) 平行于直线 \(n\),那么直线 \(l\) 也平行于直线 \(n\)。此外,平行关系是自反的(\(l \parallel l\))和对称的(如果 \(l \parallel m\),则 \(m \parallel l\))。
结合公理 1 和公理 2 可以推导出,每条直线上至少有两个点。实际上,在非退化的仿射平面中,每条直线都包含至少两个点。
根据公理 3,对于任何直线和不在线上的点,都存在平行线,这保证了仿射平面中平行线的存在。
⚝ \(l_2 = \{P_3, P_4\}\)
⚝ \(l_3 = \{P_1, P_3\}\)
⚝ \(l_4 = \{P_2, P_4\}\)
⚝ \(l_5 = \{P_1, P_4\}\)
⚝ \(l_6 = \{P_2, P_3\}\)9.1.2 仿射平面的构造 (Construction of Affine Planes)
\[ l_{a,b} = \{a + t(b-a) \mid t \in F\} = \{(x_1 + t(x_2-x_1), y_1 + t(y_2-y_1)) \mid t \in F\} \]
其中 \(b-a = (x_2-x_1, y_2-y_1)\) 是方向向量,\(t\) 取遍 \(F\) 中的所有元素。
⚝ 直线的数量:每条直线包含 \(q\) 个点。通过每个点有 \(q+1\) 条直线。总共有 \(q^2\) 个点,所以直线的总数是 \(q^2 \times (q+1) / q = q(q+1)\)。另一种计算方式是,直线的斜率有 \(q\) 种可能(对应于 \(y = mx + c\) 中的 \(m \in F\)),加上垂直的直线(斜率“无穷大”),共 \(q+1\) 个方向。每个方向有 \(q\) 条平行的直线(通过不同的截距 \(c\) 或不同的点)。因此,总共有 \(q(q+1)\) 条直线。
\[ \{(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)\} \]
每条直线有 3 个点。例如,过 \((0, 0)\) 和 \((1, 0)\) 的直线是 \(\{(0, 0), (1, 0), (2, 0)\}\) (即 \(y = 0\))。过 \((0, 0)\) 和 \((0, 1)\) 的直线是 \(\{(0, 0), (0, 1), (0, 2)\}\) (即 \(x = 0\))。过 \((0, 0)\) 和 \((1, 1)\) 的直线是 \(\{(0, 0), (1, 1), (2, 2)\}\) (即 \(y = x\))。9.2 射影平面 (Projective Planes)
9.2.1 射影平面的公理系统 (Axiomatic System of Projective Planes)
这个公理确保了射影平面不是退化的,并且具有一定的复杂性。
与仿射平面类似,射影平面中任意两点之间也存在唯一的连接直线。
这是射影平面与仿射平面的最显著区别。在射影平面中,不存在平行线,任何两条不同的直线都必须相交。实际上,在射影平面中,任意两条不同的直线恰好相交于一个点。
这个公理是公理 1 的对偶形式,保证了射影平面的对偶性结构。不共点 (Non-concurrent) 指的是这三条直线不交于同一点。
假设两条直线 \(l\) 和 \(m\) 相交于两点 \(P\) 和 \(Q\)。根据公理 2,通过 \(P\) 和 \(Q\) 的直线是唯一的,因此 \(l\) 和 \(m\) 必须是同一条直线,这与“两条不同的直线”矛盾。因此,任意两条不同的直线恰好相交于一点。
射影平面具有很强的对偶性。在射影平面的任何定理中,如果交换“点”和“直线”,“共线”和“共点”,“相交”和“连接”等概念,得到的仍然是射影平面中的一个定理。公理 1 和公理 4,公理 2 和公理 3 之间的对称性就体现了这种对偶性。
在有限射影平面中,如果每条直线上有 \(n+1\) 个点,则每个点上也有 \(n+1\) 条直线。射影平面的阶 (Order) 定义为 \(n\)。一个阶为 \(n\) 的射影平面,每条线上有 \(n+1\) 个点,每个点在 \(n+1\) 条线上,总共有 \(n^2 + n + 1\) 个点和 \(n^2 + n + 1\) 条线。
⚝ \(l_2 = \{1, 4, 5\}\)
⚝ \(l_3 = \{1, 6, 7\}\)
⚝ \(l_4 = \{2, 4, 6\}\)
⚝ \(l_5 = \{2, 5, 7\}\)
⚝ \(l_6 = \{3, 4, 7\}\)
⚝ \(l_7 = \{3, 5, 6\}\)9.2.2 射影平面的构造 (Construction of Projective Planes)
⚝ 无穷远点 (Points at Infinity):形如 \((x: y: 0)\) 的点,其中 \(x\) 和 \(y\) 不同时为零。共有 \((q^2 - 1) / (q - 1) = q + 1\) 个无穷远点。
点:\(PG(2, 2)\) 有 \(2^2 + 2 + 1 = 7\) 个点。例如,可以表示为:
\[ (1: 0: 0), (0: 1: 0), (0: 0: 1), (1: 1: 0), (1: 0: 1), (0: 1: 1), (1: 1: 1) \]
直线:\(PG(2, 2)\) 也有 7 条直线。例如,直线 \(x + y = 0\) (即 \(x = y\)) 可以表示为点集 \(\{(0: 0: 1), (1: 1: 0), (1: 1: 1)\}\)。9.3 有限域与有限几何 (Finite Fields and Finite Geometry)
9.3.1 有限域的基本概念 (Basic Concepts of Finite Fields)
+ 0 1 \(\alpha\) \(\alpha+1\) 0 0 1 \(\alpha\) \(\alpha+1\) 1 1 0 \(\alpha+1\) \(\alpha\) \(\alpha\) \(\alpha\) \(\alpha+1\) 0 1 \(\alpha+1\) \(\alpha+1\) \(\alpha\) 1 0 × 0 1 \(\alpha\) \(\alpha+1\) 0 0 0 0 0 1 0 1 \(\alpha\) \(\alpha+1\) \(\alpha\) 0 \(\alpha\) \(\alpha+1\) 1 \(\alpha+1\) 0 \(\alpha+1\) 1 \(\alpha\) 9.3.2 利用有限域构造有限几何 (Constructing Finite Geometry using Finite Fields)
⚝ \(k\) 维子空间 (k-flats):\(AG(n, q)\) 的 \(k\) 维子空间(例如,1 维是直线,2 维是平面)是 \(F^n\) 中形如 \(v_0 + V\) 的集合,其中 \(v_0 \in F^n\),\(V\) 是 \(F^n\) 的 \(k\) 维子空间。
⚝ \(k\) 维子空间 (k-flats):\(PG(n, q)\) 的 \(k\) 维子空间对应于 \(F^{n+1}\) 中 \((k+1)\) 维子空间。例如,\(PG(n, q)\) 的直线(1 维子空间)对应于 \(F^{n+1}\) 中的二维子空间,平面(2 维子空间)对应于 \(F^{n+1}\) 中的三维子空间。
⚝ 极空间 (Polar Space) 和 卵形空间 (Ovoid):与有限域上的二次型和双线性型有关。
⚝ 有限几何码 (Finite Geometry Codes):利用有限几何结构构造纠错码,例如,利用射影平面构造射影几何码。10. chapter 10: Ramsey 理论初步 (Introduction to Ramsey Theory)
10.1 Ramsey 数 (Ramsey Numbers)
10.1.1 Ramsey 定理 (Ramsey's Theorem)
不妨设 \(V\) 认识 \(A\), \(B\), \(C\) 这三个人。现在考虑 \(A\), \(B\), \(C\) 之间的关系。
▮▮▮▮ⓐ 如果 \(A\), \(B\), \(C\) 中有任何两个人认识,例如 \(A\) 认识 \(B\),那么 \(V\), \(A\), \(B\) 这三个人彼此都认识,构成了一个“朋友”三人组。
▮▮▮▮ⓑ 如果 \(A\), \(B\), \(C\) 彼此都不认识,那么 \(A\), \(B\), \(C\) 这三个人构成了一个“陌生人”三人组。
不妨设 \(V\) 不认识 \(X\), \(Y\), \(Z\) 这三个人。现在考虑 \(X\), \(Y\), \(Z\) 之间的关系。
▮▮▮▮ⓐ 如果 \(X\), \(Y\), \(Z\) 中有任何两个人不认识,例如 \(X\) 不认识 \(Y\),那么 \(V\), \(X\), \(Y\) 这三个人彼此都不认识,构成了一个“陌生人”三人组。
▮▮▮▮ⓑ 如果 \(X\), \(Y\), \(Z\) 彼此都认识,那么 \(X\), \(Y\), \(Z\) 这三个人构成了一个“朋友”三人组。
\(R(2, s) = s\)。考虑一个 \(K_s\)。对 \(K_s\) 的边进行红蓝着色。任取一条边,如果它是红色的,则这条红色边构成红色 \(K_2\)。如果所有边都是蓝色的,则 \(K_s\) 本身就是一个蓝色 \(K_s\)。因此,\(R(2, s) \leq s\)。另一方面,考虑 \(K_{s-1}\),将其所有边都涂成蓝色,则不存在红色 \(K_2\),但存在蓝色 \(K_{s-1}\),如果 \(s > 2\),则不存在蓝色 \(K_s\)。但是,如果考虑 \(K_{s}\) 的蓝色完全图,则存在蓝色 \(K_s\)。所以,实际上 \(R(2, s) = s\)。同理,\(R(r, 2) = r\)。
考虑一个顶点数为 \(n = R(r-1, s) + R(r, s-1)\) 的完全图 \(K_n\)。任取 \(K_n\) 中的一个顶点 \(v\)。将 \(K_n\) 中与 \(v\) 相连的边分为两组:红色边集合 \(R\) 和蓝色边集合 \(B\)。设 \(V_R\) 是与 \(v\) 通过红色边相连的顶点集合,\(V_B\) 是与 \(v\) 通过蓝色边相连的顶点集合。则 \(|V_R| + |V_B| = n - 1 = R(r-1, s) + R(r, s-1) - 1\)。
考虑由 \(V_R\) 导出的子图 \(K_{|V_R|}\)。根据 Ramsey 数的定义,\(K_{|V_R|}\) 中必然包含一个红色 \(K_{r-1}\) 或一个蓝色 \(K_s\)。
▮▮▮▮ⓐ 如果 \(K_{|V_R|}\) 包含一个蓝色 \(K_s\),则 \(K_n\) 中也包含蓝色 \(K_s\),定理得证。
▮▮▮▮ⓑ 如果 \(K_{|V_R|}\) 包含一个红色 \(K_{r-1}\),设这个红色 \(K_{r-1}\) 的顶点集合为 \(U \subseteq V_R\)。由于 \(V_R\) 中的顶点都与 \(v\) 通过红色边相连,所以 \(U \cup \{v\}\) 中的所有顶点都与 \(v\) 通过红色边相连。又因为 \(U\) 导出的子图是红色 \(K_{r-1}\),所以 \(U \cup \{v\}\) 导出的子图是红色 \(K_r\)。因此,\(K_n\) 中包含红色 \(K_r\),定理得证。
考虑由 \(V_B\) 导出的子图 \(K_{|V_B|}\)。根据 Ramsey 数的定义,\(K_{|V_B|}\) 中必然包含一个红色 \(K_r\) 或一个蓝色 \(K_{s-1}\)。
▮▮▮▮ⓐ 如果 \(K_{|V_B|}\) 包含一个红色 \(K_r\),则 \(K_n\) 中也包含红色 \(K_r\),定理得证。
▮▮▮▮ⓑ 如果 \(K_{|V_B|}\) 包含一个蓝色 \(K_{s-1}\),设这个蓝色 \(K_{s-1}\) 的顶点集合为 \(W \subseteq V_B\)。由于 \(V_B\) 中的顶点都与 \(v\) 通过蓝色边相连,所以 \(W \cup \{v\}\) 中的所有顶点都与 \(v\) 通过蓝色边相连。又因为 \(W\) 导出的子图是蓝色 \(K_{s-1}\),所以 \(W \cup \{v\}\) 导出的子图是蓝色 \(K_s\)。因此,\(K_n\) 中包含蓝色 \(K_s\),定理得证。
\[ R(r, s) \leq R(r-1, s) + R(r, s-1) \]
这个不等式为我们估计 Ramsey 数的上界提供了方法。10.1.2 Ramsey 数的界限 (Bounds on Ramsey Numbers)
⚝ \(R(4, 3) = R(3, 4) = 9\)
⚝ \(R(4, 4) = 18\)
⚝ \(R(5, 3) = R(3, 5) = 14\)
\[ R(r, s) \leq R(r-1, s) + R(r, s-1) \]
结合基础情况 \(R(r, 2) = r\) 和 \(R(2, s) = s\),我们可以利用这个递推式来得到 Ramsey 数的上界。
\[ R(3, 3) \leq R(2, 3) + R(3, 2) = 3 + 3 = 6 \]
所以 \(R(3, 3) \leq 6\)。实际上,我们已经知道 \(R(3, 3) = 6\)。
\(R(2, s) = s = \binom{2+s-2}{2-1} = \binom{s}{1} = s\)。
\(R(r, 2) = r = \binom{r+2-2}{r-1} = \binom{r}{r-1} = r\)。
基础情况成立。
根据递推不等式和归纳假设:
\[ R(r, s) \leq R(r-1, s) + R(r, s-1) \]
\[ \leq \binom{(r-1)+s-2}{(r-1)-1} + \binom{r+(s-1)-2}{r-1} \]
\[ = \binom{r+s-3}{r-2} + \binom{r+s-3}{r-1} \]
根据二项式系数的加法公式 \(\binom{n}{k} + \binom{n}{k-1} = \binom{n+1}{k}\),我们有:
\[ R(r, s) \leq \binom{(r+s-3)+1}{r-1} = \binom{r+s-2}{r-1} \]
因此,归纳步骤成立。
\[ c_1 \frac{2^{r/2}}{\sqrt{r}} \leq R(r, r) \leq c_2 \frac{4^r}{\sqrt{r}} \]
更精确的下界结果为:
\[ R(r, r) \geq \frac{1}{e\sqrt{2}} r 2^{r/2} (1 + o(1)) \]10.2 图 Ramsey 数 (Graph Ramsey Numbers)
10.2.1 图 Ramsey 数的性质 (Properties of Graph Ramsey Numbers)
▮▮▮▮证明:如果 \(K_n\) 的红蓝边着色包含红色 \(G_1\) 或蓝色 \(G_2\),则必然包含红色 \(G_1'\) 或蓝色 \(G_2'\)。
▮▮▮▮实际上,对于不连通图 \(G\),图 Ramsey 数通常由其“最大”的连通分支决定。
⚝ \(R(K_3, K_4) = 9\)
⚝ \(R(K_3, K_5) = 14\)
⚝ \(R(K_3, C_4) = 6\),其中 \(C_4\) 是 4 圈 (cycle of length 4)。
⚝ \(R(K_3, P_4) = 5\),其中 \(P_4\) 是 4 路 (path of length 4)。
⚝ \(R(C_4, C_4) = 6\)10.2.2 小 Ramsey 数的确定 (Determination of Small Ramsey Numbers)
⚝ 将五边形的边 \((v_1, v_2), (v_2, v_3), (v_3, v_4), (v_4, v_5), (v_5, v_1)\) 涂成红色。
⚝ 将五边形的对角线 \((v_1, v_3), (v_1, v_4), (v_2, v_4), (v_2, v_5), (v_3, v_5)\) 涂成蓝色。
⚝ 下界 \(R(3, 4) > 8\): 需要构造 \(K_8\) 的红蓝边着色,使得其中既不包含红色 \(K_3\),也不包含蓝色 \(K_4\)。这样的构造是存在的,但比较复杂。10.3 无穷 Ramsey 理论 (Infinite Ramsey Theory)
10.3.1 无穷 Ramsey 定理 (Infinite Ramsey Theorem)
10.3.2 应用与拓展 (Applications and Extensions)
11. chapter 11: 概率方法 (Probabilistic Method)
11.1 概率方法的基本思想 (Basic Ideas of Probabilistic Method)
11.1.1 存在性证明 (Existence Proofs)
① 定义一个合适的概率空间:这通常涉及到定义一个样本空间 \( \Omega \) 和一个概率分布 \( P \)。在组合数学中,样本空间通常由我们感兴趣的组合对象构成,例如图、集合划分、拉丁方等。概率分布则定义了每个组合对象被选中的概率,最常见的选择是均匀分布。
② 定义“好的”事件:根据要证明的存在性命题,定义一个或多个事件 \( A_1, A_2, \ldots, A_n \),使得如果事件 \( A_i \) 发生,则我们所需要的组合对象就存在。
③ 计算事件发生的概率:计算每个事件 \( A_i \) 发生的概率 \( P(A_i) \)。
④ 证明存在性:如果能够证明 \( \sum_{i} P(A_i) > 0 \) (或者更简单地,如果存在某个 \( i \) 使得 \( P(A_i) > 0 \)),则可以得出结论:存在一个样本点(即组合对象)使得至少一个“好的”事件发生,从而证明了所需组合对象的存在性。
① 概率空间:考虑 \( n \) 个顶点的完全图 \( K_n \),随机地给每条边 \( e \) 赋予颜色红色或蓝色,两种颜色概率均为 \( 1/2 \),且颜色选择相互独立。
② “坏”事件:对于顶点集 \( S \subseteq V \) 且 \( |S| = k \),定义事件 \( A_S \) 为 “\( S \) 导出的子图是红色的 \( K_k \) 或蓝色的 \( K_k \)” 。我们的目标是证明存在一个染色方案,使得所有的 \( A_S \) 都不发生,即没有单色 \( K_k \)。
③ 计算概率:对于一个特定的 \( k \) 顶点集 \( S \),\( S \) 导出子图共有 \( \binom{k}{2} \) 条边。要使 \( S \) 导出红色 \( K_k \),所有边必须是红色,概率为 \( (1/2)^{\binom{k}{2}} \)。同样,导出蓝色 \( K_k \) 的概率也是 \( (1/2)^{\binom{k}{2}} \)。因此,事件 \( A_S \) 发生的概率为 \( P(A_S) = 2 \cdot (1/2)^{\binom{k}{2}} = 2^{1 - \binom{k}{2}} \)。
④ 联合概率:我们希望所有“坏”事件 \( A_S \) 都不发生。考虑所有 \( k \) 顶点集 \( S \) 的数量为 \( \binom{n}{k} \)。利用联合界 (union bound),所有“坏”事件至少发生一个的概率上界为:
\[ P(\bigcup_{S} A_S) \le \sum_{S} P(A_S) = \binom{n}{k} \cdot 2^{1 - \binom{k}{2}} \]
如果上述概率小于 1,即 \( \binom{n}{k} \cdot 2^{1 - \binom{k}{2}} < 1 \),则存在染色方案使得没有单色 \( K_k \)。此时,\( R(k, k) > n \)。
\[ (\frac{en}{k})^k \cdot 2^{1 - \frac{k(k-1)}{2}} < 1 \]
取 \( n = \lfloor 2^{k/2 - 1} \rfloor \),可以验证当 \( k \ge 3 \) 时,上述不等式成立。因此,存在一个图,既不包含 \( k \) 团,其补图也不包含 \( k \) 团,所以 \( R(k, k) > 2^{k/2 - 1} \)。11.1.2 期望值方法 (Method of Expectation)
① 定义一个合适的概率空间:与存在性证明类似,定义样本空间 \( \Omega \) 和概率分布 \( P \)。
② 定义一个随机变量:定义一个关于样本空间 \( \Omega \) 的随机变量 \( X \),这个随机变量 \( X \) 的值通常是我们关心的组合对象的某个参数,例如图的边数、独立集的大小、匹配数等。
③ 计算期望值:计算随机变量 \( X \) 的期望值 \( E[X] \)。
④ 利用期望值证明存在性:
▮▮▮▮⚝ 如果我们想证明存在一个组合对象,使得参数值至少为 \( E \),并且我们定义的 \( X \) 使得值越大越“好”,那么由于存在样本点使得 \( X \ge E[X] \),我们就证明了存在性。
▮▮▮▮⚝ 如果我们想证明存在一个组合对象,使得参数值至多为 \( E \),并且我们定义的 \( X \) 使得值越小越“好”,那么由于存在样本点使得 \( X \le E[X] \),我们就证明了存在性。
① 概率空间:对于图 \( G = (V, E) \),随机地将每个顶点 \( v \in V \) 放入集合 \( S \) 或 \( V \setminus S \),概率均为 \( 1/2 \),且选择相互独立。这定义了一个随机割 \( (S, V \setminus S) \)。
② 随机变量:定义随机变量 \( X \) 为随机割 \( (S, V \setminus S) \) 的大小,即横跨割的边数。
③ 计算期望值:对于任意一条边 \( e = \{u, v\} \in E \),边 \( e \) 横跨割当且仅当顶点 \( u \) 和 \( v \) 分别在 \( S \) 和 \( V \setminus S \) 中,或者反过来。由于顶点 \( u \) 和 \( v \) 的选择是独立的,因此边 \( e \) 横跨割的概率为:
\[ P(e \text{ 横跨割}) = P(u \in S, v \notin S) + P(u \notin S, v \in S) = \frac{1}{2} \cdot \frac{1}{2} + \frac{1}{2} \cdot \frac{1}{2} = \frac{1}{2} \]
设 \( E \) 为图 \( G \) 的边集,\( |E| = m \)。随机变量 \( X \) 可以表示为指示随机变量之和: \( X = \sum_{e \in E} I_e \),其中 \( I_e \) 是指示变量,当边 \( e \) 横跨割时 \( I_e = 1 \),否则 \( I_e = 0 \)。\( E[I_e] = P(e \text{ 横跨割}) = 1/2 \)。
根据期望的线性性,随机割大小的期望值为:
\[ E[X] = E[\sum_{e \in E} I_e] = \sum_{e \in E} E[I_e] = \sum_{e \in E} \frac{1}{2} = \frac{|E|}{2} = \frac{m}{2} \]
④ 存在性结论:由于随机割大小的期望值是 \( m/2 \),因此必然存在至少一个割,其大小不小于期望值 \( m/2 \)。这证明了任何图都存在一个割,其大小至少为总边数的一半。11.2 图论中的概率方法 (Probabilistic Method in Graph Theory)
11.2.1 Ramsey 数的下界估计 (Lower Bound Estimation of Ramsey Numbers)
11.2.2 随机图 (Random Graphs)
① 连通性 (Connectivity):如上所述,连通性存在阈值。
② 团数 (Clique Number) 和 色数 (Chromatic Number):随机图的团数和色数随着 \( p \) 和 \( n \) 的变化而变化,其行为可以通过概率方法进行分析。
③ 哈密顿圈 (Hamiltonian Cycle):研究随机图中哈密顿圈的存在性及其阈值。
④ 谱性质 (Spectral Properties):研究随机图的邻接矩阵或拉普拉斯矩阵的特征值分布等谱性质。11.3 Lovász 局部引理 (Lovász Local Lemma)
11.3.1 局部引理及其应用 (Local Lemma and its Applications)
\[ P(A_i) \le x_i \prod_{j \in \Gamma(i)} (1 - x_j) \]
则 \( P(\bigcap_{i=1}^{n} \overline{A_i}) \ge \prod_{i=1}^{n} (1 - x_i) > 0 \)。
① 概率空间:随机地为每个顶点 \( v \in V \) 从 \( k \) 种颜色中均匀独立地选择一种颜色。
② “坏”事件:对于每条边 \( e = \{u, v\} \in E \),定义事件 \( A_e \) 为 “边 \( e \) 的两个端点 \( u \) 和 \( v \) 被染成相同颜色”。我们的目标是证明存在一种着色方案,使得所有 \( A_e \) 都不发生,即得到正常 \( k \)-着色。
③ 计算概率:对于每条边 \( e = \{u, v\} \),\( P(A_e) = 1/k \)。
④ 依赖性分析:事件 \( A_e \) 与哪些事件不独立?事件 \( A_e \) 只与那些与边 \( e \) 有公共顶点的边对应的事件不独立。对于边 \( e = \{u, v\} \),与其共享顶点 \( u \) 或 \( v \) 的边最多有 \( 2(\Delta - 1) \) 条(因为最大度为 \( \Delta \),除去边 \( e \) 本身,每个顶点最多连出 \( \Delta - 1 \) 条其他边)。因此,每个事件 \( A_e \) 与至多 \( d = 2\Delta \) 个其他事件不独立(更精确的分析可以得到 \( d \le 2\Delta - 2 \),但 \( 2\Delta \) 足够用于说明问题)。
⑤ 应用局部引理:使用对称形式的局部引理,取 \( p = 1/k \) 和 \( d = 2\Delta \)。条件 \( ep(d+1) \le 1 \) 变为 \( e \cdot \frac{1}{k} \cdot (2\Delta + 1) \le 1 \),即 \( k \ge e(2\Delta + 1) \)。实际上,更精细的依赖性分析可以得到条件 \( k \ge e(\Delta + 1) \) 就足够保证存在正常 \( k \)-着色。11.3.2 避免坏事件 (Avoiding Bad Events)
① 图论:如图的正常着色、避免特定子图、拉姆齐数下界等。
② 离散几何:如图的穿刺数、几何图的性质等。
③ 算法设计:在随机算法的去随机化 (derandomization) 过程中,局部引理有时可以提供理论基础。
④ 编码理论:构造具有特定性质的编码。
⑤ 网络和分布式计算:分析分布式算法的性质,例如避免冲突。12. chapter 12: 代数组合初步 (Introduction to Algebraic Combinatorics)
12.1 群与计数 (Groups and Counting)
12.1.1 群的基本概念 (Basic Concepts of Groups)
群 \( (G, *) \) 是一个集合 \( G \) 配备一个二元运算 \( * \),满足以下四个公理:
▮▮▮▮ⓐ 封闭性 (Closure): 对于任意 \( a, b \in G \),\( a * b \in G \)。
▮▮▮▮ⓑ 结合律 (Associativity): 对于任意 \( a, b, c \in G \),\( (a * b) * c = a * (b * c) \)。
▮▮▮▮ⓒ 单位元 (Identity Element): 存在一个元素 \( e \in G \),称为单位元,对于任意 \( a \in G \),\( e * a = a * e = a \)。
▮▮▮▮ⓓ 逆元 (Inverse Element): 对于任意 \( a \in G \),存在一个元素 \( a^{-1} \in G \),称为 \( a \) 的逆元,使得 \( a * a^{-1} = a^{-1} * a = e \)。
⚝ 整数加法群 \( (\mathbb{Z}, +) \): 整数集合 \(\mathbb{Z}\) 在加法运算下构成群。单位元是 0,整数 \( n \) 的逆元是 \( -n \)。
⚝ 非零实数乘法群 \( (\mathbb{R} \setminus \{0\}, \times) \): 非零实数集合 \(\mathbb{R} \setminus \{0\}\) 在乘法运算下构成群。单位元是 1,非零实数 \( r \) 的逆元是 \( 1/r \)。
⚝ 对称群 \( (S_n, \circ) \): \( n \) 个元素的集合 \( \{1, 2, \ldots, n\} \) 上的所有置换 (permutations) 构成的集合 \( S_n \),在置换的复合运算 \( \circ \) 下构成群。单位元是恒等置换,每个置换都有逆置换。对称群 \( S_n \) 在计数问题中非常重要,尤其是在考虑对称性的问题中。
集合 \( G \) 的子集 \( H \) 如果在与 \( G \) 相同的运算下也构成群,则称 \( H \) 是 \( G \) 的子群。
⚝ 判断子群的常用方法: 子集 \( H \) 是群 \( G \) 的子群,当且仅当:
▮▮▮▮ⓐ \( H \) 非空。
▮▮▮▮ⓑ 对于任意 \( a, b \in H \),\( a * b \in H \)。
▮▮▮▮ⓒ 对于任意 \( a \in H \),\( a^{-1} \in H \)。
或者,更简洁的条件是:
▮▮▮▮ⓐ \( H \) 非空。
▮▮▮▮ⓑ 对于任意 \( a, b \in H \),\( a * b^{-1} \in H \)。
⚝ 群同态 (Group Homomorphism): 设 \( (G, *) \) 和 \( (G', \cdot) \) 是两个群,一个映射 \( \phi: G \to G' \) 称为群同态,如果对于任意 \( a, b \in G \),满足 \( \phi(a * b) = \phi(a) \cdot \phi(b) \)。
⚝ 群同构 (Group Isomorphism): 如果群同态 \( \phi: G \to G' \) 是双射 (bijective),则称 \( \phi \) 是群同构,称群 \( G \) 与 \( G' \) 同构,记作 \( G \cong G' \)。同构的群在代数结构上是相同的。
如果群 \( G \) 的所有元素都是某个固定元素 \( g \in G \) 的幂次,即 \( G = \{g^n \mid n \in \mathbb{Z}\} \),则称 \( G \) 为循环群,\( g \) 称为 \( G \) 的生成元 (generator)。
⚝ 例子: 整数加法群 \( (\mathbb{Z}, +) \) 是循环群,生成元可以是 1 或 -1。
置换群是元素为集合的置换,运算为置换复合的群。对称群 \( S_n \) 是最重要的置换群之一。
⚝ 轮换 (Cycle): 一个轮换 \( (a_1 \, a_2 \, \ldots \, a_k) \) 表示将 \( a_1 \) 映射到 \( a_2 \),\( a_2 \) 映射到 \( a_3 \),…,\( a_k \) 映射到 \( a_1 \),其余元素保持不变的置换。
⚝ 不交轮换分解: 任何一个置换都可以分解成若干个不交轮换的乘积。例如,在 \( S_5 \) 中,置换 \( \pi = \begin{pmatrix} 1 & 2 & 3 & 4 & 5 \\ 2 & 3 & 1 & 5 & 4 \end{pmatrix} \) 可以分解为不交轮换 \( (1 \, 2 \, 3)(4 \, 5) \)。12.1.2 伯恩赛德引理 (Burnside's Lemma)
设 \( G \) 是一个群,\( X \) 是一个集合。群 \( G \) 在集合 \( X \) 上的一个左作用 (left action) 是一个映射 \( G \times X \to X \),记作 \( (g, x) \mapsto g \cdot x \),满足以下两个条件:
▮▮▮▮ⓐ 单位元作用: 对于单位元 \( e \in G \) 和任意 \( x \in X \),\( e \cdot x = x \)。
▮▮▮▮ⓑ 相容性: 对于任意 \( g, h \in G \) 和任意 \( x \in X \),\( g \cdot (h \cdot x) = (g h) \cdot x \)。
设 \( G \) 在集合 \( X \) 上有一个作用。
⚝ 轨道 (Orbit): 对于 \( x \in X \),\( x \) 在 \( G \) 作用下的轨道 \( \text{Orb}_G(x) \) 定义为 \( \{g \cdot x \mid g \in G\} \subseteq X \)。轨道是 \( X \) 的一个划分,即 \( X \) 可以分解为互不相交的轨道的并。
⚝ 固定点 (Fixed Point): 对于 \( g \in G \),\( g \) 的固定点集 \( \text{Fix}_X(g) \) 定义为 \( \{x \in X \mid g \cdot x = x\} \subseteq X \)。固定点是作用下保持不变的元素。
设 \( G \) 是一个有限群,作用在一个有限集合 \( X \) 上。轨道数 (number of orbits),通常记作 \( |X/G| \) 或 \( N \),等于群 \( G \) 的所有元素固定点个数的平均值。用公式表示为:
\[ N = |X/G| = \frac{1}{|G|} \sum_{g \in G} |\text{Fix}_X(g)| \]
其中 \( |G| \) 是群 \( G \) 的阶数 (元素的个数),\( |\text{Fix}_X(g)| \) 是元素 \( g \) 的固定点集中元素的个数。
证明伯恩赛德引理的关键在于建立轨道和稳定化子群 (stabilizer subgroup) 之间的关系,并利用轨道-稳定化子群定理 (Orbit-Stabilizer Theorem)。
⚝ 稳定化子群 (Stabilizer Subgroup): 对于 \( x \in X \),\( x \) 的稳定化子群 \( \text{Stab}_G(x) \) 定义为 \( \{g \in G \mid g \cdot x = x\} \subseteq G \)。稳定化子群是 \( G \) 的一个子群。
⚝ 轨道-稳定化子群定理 (Orbit-Stabilizer Theorem): 对于 \( x \in X \),有 \( |\text{Orb}_G(x)| = [G : \text{Stab}_G(x)] = \frac{|G|}{|\text{Stab}_G(x)|} \),其中 \( [G : \text{Stab}_G(x)] \) 是稳定化子群 \( \text{Stab}_G(x) \) 在 \( G \) 中的指数 (index)。
⚝ 两种方式计数 \( |S| \):
▮▮▮▮ⓐ 对 \( g \in G \) 求和:\( |S| = \sum_{g \in G} |\{x \in X \mid g \cdot x = x\}| = \sum_{g \in G} |\text{Fix}_X(g)| \)。
▮▮▮▮ⓑ 对 \( x \in X \) 求和:\( |S| = \sum_{x \in X} |\{g \in G \mid g \cdot x = x\}| = \sum_{x \in X} |\text{Stab}_G(x)| \)。
\[ \sum_{x \in X} |\text{Stab}_G(x)| = \sum_{O \in X/G} \sum_{x \in O} |\text{Stab}_G(x)| \]
对于同一个轨道 \( O \) 中的任意两个元素 \( x, y \in O \),它们的稳定化子群是共轭的 (conjugate),因此大小相同,即 \( |\text{Stab}_G(x)| = |\text{Stab}_G(y)| \)。对于 \( x \in O \),由轨道-稳定化子群定理,\( |O| = \frac{|G|}{|\text{Stab}_G(x)|} \),所以 \( |\text{Stab}_G(x)| = \frac{|G|}{|O|} \)。
因此,
\[ \sum_{x \in O} |\text{Stab}_G(x)| = \sum_{x \in O} \frac{|G|}{|O|} = |O| \cdot \frac{|G|}{|O|} = |G| \]
所以,
\[ \sum_{x \in X} |\text{Stab}_G(x)| = \sum_{O \in X/G} |G| = |X/G| \cdot |G| = N \cdot |G| \]
结合两种计数方式,得到 \( \sum_{g \in G} |\text{Fix}_X(g)| = N \cdot |G| \),从而得到伯恩赛德引理的公式:
\[ N = |X/G| = \frac{1}{|G|} \sum_{g \in G} |\text{Fix}_X(g)| \]
例 1: 用红、蓝两种颜色给正方形的顶点染色,考虑旋转对称性,有多少种不同的染色方案?
⚝ 集合 \( X \): 所有可能的染色方案。不考虑对称性,每个顶点有 2 种颜色,共 \( 2^4 = 16 \) 种染色方案,即 \( |X| = 16 \)。
⚝ 群 \( G \): 正方形的旋转对称群,是 4 阶循环群 \( C_4 = \{e, r, r^2, r^3\} \),其中 \( e \) 是恒等变换(旋转 0 度),\( r \) 是旋转 90 度,\( r^2 \) 是旋转 180 度,\( r^3 \) 是旋转 270 度。
⚝ 计算每个旋转的固定点数 \( |\text{Fix}_X(g)| \):
▮▮▮▮ⓐ \( g = e \) (旋转 0 度): 所有染色方案都是固定点,\( |\text{Fix}_X(e)| = 16 \)。
▮▮▮▮ⓑ \( g = r \) (旋转 90 度): 所有顶点颜色必须相同才是固定点,有 2 种方案 (全红或全蓝),\( |\text{Fix}_X(r)| = 2 \)。
▮▮▮▮ⓒ \( g = r^2 \) (旋转 180 度): 对顶点 1 和 3,顶点 2 和 4 颜色必须分别相同,有 \( 2^2 = 4 \) 种方案,\( |\text{Fix}_X(r^2)| = 4 \)。
▮▮▮▮ⓓ \( g = r^3 \) (旋转 270 度): 与旋转 90 度类似,所有顶点颜色必须相同,有 2 种方案,\( |\text{Fix}_X(r^3)| = 2 \)。
\[ N = \frac{1}{|C_4|} \sum_{g \in C_4} |\text{Fix}_X(g)| = \frac{1}{4} (16 + 2 + 4 + 2) = \frac{24}{4} = 6 \]
因此,考虑旋转对称性,共有 6 种不同的染色方案。12.1.3 波利亚计数定理 (Pólya Enumeration Theorem)
设 \( G \) 是作用在集合 \( \{1, 2, \ldots, n\} \) 上的置换群。对于 \( g \in G \),将 \( g \) 分解为不交轮换的乘积。设 \( j_k(g) \) 是 \( g \) 的轮换分解中长度为 \( k \) 的轮换的个数,其中 \( 1 \le k \le n \)。则对于每个 \( g \in G \),有 \( \sum_{k=1}^n k \cdot j_k(g) = n \)。
群 \( G \) 的轮换指标 \( P_G(x_1, x_2, \ldots, x_n) \) 是一个关于变量 \( x_1, x_2, \ldots, x_n \) 的多项式,定义为:
\[ P_G(x_1, x_2, \ldots, x_n) = \frac{1}{|G|} \sum_{g \in G} x_1^{j_1(g)} x_2^{j_2(g)} \cdots x_n^{j_n(g)} \]
轮换指标概括了群 \( G \) 中所有置换的轮换结构信息。
设 \( R \) 是一组颜色,\( C \) 是颜色集合。我们考虑用 \( R \) 中的颜色给 \( n \) 个位置染色。设 \( w: R \to \mathbb{C}[y_1, y_2, \ldots] \) 是一个权函数,将每种颜色 \( c \in R \) 赋予一个关于变量 \( y_1, y_2, \ldots \) 的多项式权 \( w(c) \)。对于一个染色方案 \( \mathbf{c} = (c_1, c_2, \ldots, c_n) \),其中 \( c_i \in R \) 是第 \( i \) 个位置的颜色,定义染色方案 \( \mathbf{c} \) 的权为 \( W(\mathbf{c}) = \prod_{i=1}^n w(c_i) \)。
模式清单 (pattern inventory) 是所有不等价染色方案的权之和。
设 \( G \) 是作用在集合 \( \{1, 2, \ldots, n\} \) 上的置换群,\( R \) 是一组颜色。用 \( R \) 中的颜色给 \( n \) 个位置染色,考虑群 \( G \) 的作用下的等价关系。如果用颜色 \( c \in R \) 染色第 \( i \) 个位置的权是 \( w(c) \),则模式清单 \( PI \) 由轮换指标 \( P_G(x_1, x_2, \ldots, x_n) \) 通过替换变量 \( x_k \) 为颜色权的和 \( \sum_{c \in R} [w(c)]^k \) 得到:
\[ PI = P_G \left( \sum_{c \in R} w(c), \sum_{c \in R} [w(c)]^2, \ldots, \sum_{c \in R} [w(c)]^n \right) \]
特别地,如果只关心不等价染色方案的总数,可以令所有颜色权都为 1,即 \( w(c) = 1 \) 对于所有 \( c \in R \)。此时 \( \sum_{c \in R} [w(c)]^k = |R| \),模式清单 \( PI \) 就是不等价染色方案的总数,公式简化为:
\[ N = P_G(|R|, |R|, \ldots, |R|) = \frac{1}{|G|} \sum_{g \in G} |R|^{c(g)} \]
其中 \( c(g) = \sum_{k=1}^n j_k(g) \) 是置换 \( g \) 的轮换分解中轮换的个数。
例 2: 用红、蓝两种颜色给正方形的顶点染色,考虑旋转对称性,有多少种不同的染色方案?(与例 1 相同的问题,用波利亚计数定理求解)
⚝ 群 \( G \): 正方形的旋转对称群 \( C_4 = \{e, r, r^2, r^3\} \)。
⚝ 计算每个旋转的轮换分解和轮换指标:
▮▮▮▮ⓐ \( g = e \) (旋转 0 度): 恒等置换,轮换分解为 \( (1)(2)(3)(4) \),\( j_1(e) = 4, j_2(e) = j_3(e) = j_4(e) = 0 \)。
▮▮▮▮ⓑ \( g = r \) (旋转 90 度): 轮换分解为 \( (1 \, 2 \, 3 \, 4) \),\( j_4(r) = 1, j_1(r) = j_2(r) = j_3(r) = 0 \)。
▮▮▮▮ⓒ \( g = r^2 \) (旋转 180 度): 轮换分解为 \( (1 \, 3)(2 \, 4) \),\( j_2(r^2) = 2, j_1(r^2) = j_3(r^2) = j_4(r^2) = 0 \)。
▮▮▮▮ⓓ \( g = r^3 \) (旋转 270 度): 轮换分解为 \( (1 \, 4 \, 3 \, 2) = (1 \, 2 \, 3 \, 4)^{-1} \),轮换分解为 \( (1 \, 4 \, 3 \, 2) \),\( j_4(r^3) = 1, j_1(r^3) = j_2(r^3) = j_3(r^3) = 0 \)。
\[ P_{C_4}(x_1, x_2, x_3, x_4) = \frac{1}{4} (x_1^4 + x_4^1 + x_2^2 + x_4^1) = \frac{1}{4} (x_1^4 + x_2^2 + 2x_4) \]
\[ N = P_{C_4}(2, 2, 2, 2) = \frac{1}{4} (2^4 + 2^2 + 2 \cdot 2) = \frac{1}{4} (16 + 4 + 4) = \frac{24}{4} = 6 \]
结果与伯恩赛德引理相同。
⚝ 设红色权为 \( r \),蓝色权为 \( b \)。令 \( w(\text{red}) = r \),\( w(\text{blue}) = b \)。
⚝ 计算 \( \sum_{c \in R} [w(c)]^k = w(\text{red})^k + w(\text{blue})^k = r^k + b^k \)。
⚝ 应用波利亚计数定理,模式清单为:
\[ PI = P_{C_4}(r+b, r^2+b^2, r^3+b^3, r^4+b^4) = \frac{1}{4} [(r+b)^4 + (r^2+b^2)^2 + 2(r^4+b^4)] \]
展开并化简:
\[ PI = \frac{1}{4} [(r^4 + 4r^3b + 6r^2b^2 + 4rb^3 + b^4) + (r^4 + 2r^2b^2 + b^4) + 2(r^4+b^4)] \]
\[ PI = \frac{1}{4} [4r^4 + 4r^3b + 8r^2b^2 + 4rb^3 + 4b^4] = r^4 + r^3b + 2r^2b^2 + rb^3 + b^4 \]
各项系数分别表示红色顶点数为 4, 3, 2, 1, 0 的不等价染色方案数。
⚝ 红色顶点数为 4 的方案数:\( r^4 \) 系数为 1。
⚝ 红色顶点数为 3 的方案数:\( r^3b \) 系数为 1。
⚝ 红色顶点数为 2 的方案数:\( r^2b^2 \) 系数为 2。
⚝ 红色顶点数为 1 的方案数:\( rb^3 \) 系数为 1。
⚝ 红色顶点数为 0 的方案数:\( b^4 \) 系数为 1。
总方案数 \( 1+1+2+1+1 = 6 \),与例 1 和例 2 结果一致。12.2 关联代数与组合恒等式 (Incidence Algebra and Combinatorial Identities)
12.2.1 关联代数的应用 (Applications of Incidence Algebra)
偏序集 \( (P, \preceq) \) 是一个集合 \( P \) 配备一个二元关系 \( \preceq \),满足以下三个条件:
▮▮▮▮ⓐ 自反性 (Reflexivity): 对于任意 \( x \in P \),\( x \preceq x \)。
▮▮▮▮ⓑ 反对称性 (Antisymmetry): 对于任意 \( x, y \in P \),如果 \( x \preceq y \) 且 \( y \preceq x \),则 \( x = y \)。
▮▮▮▮ⓒ 传递性 (Transitivity): 对于任意 \( x, y, z \in P \),如果 \( x \preceq y \) 且 \( y \preceq z \),则 \( x \preceq z \)。
如果对于任意 \( x, y \in P \),区间 \( [x, y] = \{z \in P \mid x \preceq z \preceq y\} \) 是有限集,则称偏序集 \( P \) 是局部有限的。在组合数学中,我们通常考虑局部有限偏序集。
设 \( P \) 是一个局部有限偏序集,在其上的关联代数 \( I(P) \) 是由所有函数 \( f: P \times P \to \mathbb{C} \) 组成的集合,满足条件:如果 \( x \not\preceq y \),则 \( f(x, y) = 0 \)。
关联代数 \( I(P) \) 上的运算定义如下:
⚝ 加法: \( (f + g)(x, y) = f(x, y) + g(x, y) \)。
⚝ 标量乘法: \( (\alpha f)(x, y) = \alpha f(x, y) \),其中 \( \alpha \in \mathbb{C} \)。
⚝ 卷积 (Convolution): \( (f * g)(x, y) = \sum_{x \preceq z \preceq y} f(x, z) g(z, y) \)。
⚝ 狄拉克 \(\delta\) 函数 (Delta Function): \( \delta(x, y) = \begin{cases} 1, & \text{if } x = y \\ 0, & \text{if } x \neq y \end{cases} \)。狄拉克 \(\delta\) 函数是关联代数 \( I(P) \) 的单位元,即对于任意 \( f \in I(P) \),有 \( f * \delta = \delta * f = f \)。
⚝ zeta 函数 (Zeta Function): \( \zeta(x, y) = \begin{cases} 1, & \text{if } x \preceq y \\ 0, & \text{if } x \not\preceq y \end{cases} \)。zeta 函数在关联代数中起着重要作用。
⚝ 莫比乌斯函数 (Möbius Function): 莫比乌斯函数 \( \mu \) 是 zeta 函数 \( \zeta \) 在卷积意义下的逆,即 \( \mu * \zeta = \zeta * \mu = \delta \)。莫比乌斯函数是反演理论的核心。
设 \( P \) 是一个局部有限偏序集,\( f, g \) 是定义在 \( P \) 上的函数。
⚝ 形式 1: 如果对于所有 \( y \in P \),有 \( g(y) = \sum_{x \preceq y} f(x) \),则对于所有 \( y \in P \),有 \( f(y) = \sum_{x \preceq y} \mu(x, y) g(x) \)。
⚝ 形式 2: 如果对于所有 \( x \in P \),有 \( g(x) = \sum_{y \succeq x} f(y) \),则对于所有 \( x \in P \),有 \( f(x) = \sum_{y \succeq x} \mu(x, y) g(y) \)。
⚝ 计算莫比乌斯函数: 利用 \( \mu * \zeta = \delta \) 的定义,可以递推计算莫比乌斯函数。对于 \( x \preceq y \),有 \( (\mu * \zeta)(x, y) = \sum_{x \preceq z \preceq y} \mu(x, z) \zeta(z, y) = \delta(x, y) \)。当 \( x = y \) 时,\( \mu(x, x) \zeta(x, x) = \mu(x, x) = \delta(x, x) = 1 \),所以 \( \mu(x, x) = 1 \)。当 \( x < y \) 时,\( \sum_{x \preceq z \preceq y} \mu(x, z) \zeta(z, y) = \mu(x, x) \zeta(x, y) + \sum_{x < z \preceq y} \mu(x, z) \zeta(z, y) = \zeta(x, y) + \sum_{x < z \preceq y} \mu(x, z) = 0 \)。由于 \( \zeta(x, y) = 1 \) (当 \( x \preceq y \)),所以对于 \( x < y \),有 \( 1 + \sum_{x < z \preceq y} \mu(x, z) = 0 \),即 \( \mu(x, y) = - \sum_{x \preceq z < y} \mu(x, z) \)。利用这个递推公式可以计算偏序集上任意两点的莫比乌斯函数值。12.2.2 组合恒等式的代数证明 (Algebraic Proofs of Combinatorial Identities)
很多组合恒等式可以通过证明关联代数中某些函数的卷积关系得到。例如,考虑二项式系数的恒等式:
\[ \sum_{k=0}^n \binom{n}{k} = 2^n \]
这个恒等式可以从集合的角度理解:\( \binom{n}{k} \) 是 \( n \) 元集合的 \( k \) 元子集数,\( \sum_{k=0}^n \binom{n}{k} \) 是 \( n \) 元集合的所有子集数,而 \( 2^n \) 也是 \( n \) 元集合的所有子集数。
⚝ \( f(k, n) = \binom{n-k}{0} = 1 \) (当 \( k \le n \)),否则为 0。
⚝ \( g(k, n) = \binom{n-k}{n-k} = 1 \) (当 \( k \le n \)),否则为 0。
⚝ \( h(k, n) = 2^{n-k} \) (当 \( k \le n \)),否则为 0。
\[ \sum_{k=0}^n \binom{n}{k} (-1)^k = 0 \quad (n \ge 1) \]
\[ \sum_{k=0}^n \binom{n}{k} = \binom{n}{0} + \binom{n}{1} + \cdots + \binom{n}{n} = 2^n \]
\[ \sum_{k=0}^n \binom{n}{k} (-1)^k = \binom{n}{0} - \binom{n}{1} + \binom{n}{2} - \cdots + (-1)^n \binom{n}{n} = 0 \quad (n \ge 1) \]
令 \( x = 1, y = 1 \),得到 \( (1+1)^n = 2^n = \sum_{k=0}^n \binom{n}{k} \)。
令 \( x = 1, y = -1 \),得到 \( (1-1)^n = 0^n = \sum_{k=0}^n \binom{n}{k} 1^{n-k} (-1)^k = \sum_{k=0}^n \binom{n}{k} (-1)^k \)。当 \( n \ge 1 \) 时,\( 0^n = 0 \)。当 \( n = 0 \) 时,\( 0^0 = 1 = \binom{0}{0} (-1)^0 \)。所以 \( \sum_{k=0}^n \binom{n}{k} (-1)^k = \delta_{n, 0} \),其中 \( \delta_{n, 0} \) 是克罗内克 delta 函数。
莫比乌斯反演公式可以直接用来证明某些组合恒等式。例如,考虑除法偏序集 \( (\mathbb{N}^+, |) \),其中 \( \mathbb{N}^+ = \{1, 2, 3, \ldots\} \),\( a | b \) 表示 \( a \) 整除 \( b \)。在这个偏序集上,莫比乌斯函数 \( \mu(d) \) 有明确的表达式:
\[ \mu(d) = \begin{cases} 1, & \text{if } d = 1 \\ (-1)^k, & \text{if } d = p_1 p_2 \cdots p_k \text{ 是 } k \text{ 个不同素数的乘积} \\ 0, & \text{if } d \text{ 有平方因子} \end{cases} \]
zeta 函数 \( \zeta(a, b) = 1 \) 如果 \( a | b \),否则为 0。
这个恒等式正是 \( (\mu * \zeta)(1, n) = \delta(1, n) = \delta_{n, 1} \) 的体现,因为 \( (\mu * \zeta)(1, n) = \sum_{d: 1|d|n} \mu(1, d) \zeta(d, n) = \sum_{d|n} \mu(d) \zeta(d, n) = \sum_{d|n} \mu(d) \cdot 1 = \sum_{d|n} \mu(d) \)。13. chapter 13: 组合优化初步 (Introduction to Combinatorial Optimization)
13.1 网络流 (Network Flow)
13.1.1 最大流最小割定理 (Max-flow Min-cut Theorem)
▮▮▮▮ⓑ 容量限制 (Capacity Constraint):对于每条边 \((u, v) \in E\),流经该边的流量不能超过其容量,即 \(0 \le f(u, v) \le c(u, v)\)。
▮▮▮▮ⓒ 流量守恒 (Flow Conservation):对于除了源点 \(s\) 和汇点 \(t\) 之外的每个顶点 \(v \in V \setminus \{s, t\}\),流入顶点 \(v\) 的总流量等于流出顶点 \(v\) 的总流量,即 \(\sum_{u:(u, v) \in E} f(u, v) = \sum_{w:(v, w) \in E} f(v, w)\)。
最大流最小割定理的证明通常分为两个部分:
考虑任意一个 \(s-t\) 割 \([S, T]\) 和任意一个流 \(f\)。流的值 \(|f|\) 可以表示为从 \(S\) 到 \(T\) 的净流量减去从 \(T\) 到 \(S\) 的净流量。由于从 \(T\) 到 \(S\) 的流量是非负的,我们可以得到 \(|f| \le \sum_{u \in S, v \in T, (u, v) \in E} f(u, v) \le \sum_{u \in S, v \in T, (u, v) \in E} c(u, v) = c(S, T)\)。
因此,任何流的值都不会超过任何割的容量,所以最大流的值必然小于等于最小割的容量。
这部分通常通过构造性证明来完成,例如使用增广路径算法 (augmenting path algorithm) 如 Ford-Fulkerson 算法。Ford-Fulkerson 算法不断寻找从源点到汇点的增广路径,并沿着路径增加流量,直到找不到增广路径为止。当算法终止时,我们可以构造一个割,其容量等于当前流的值,从而证明最大流的值等于最小割的容量。13.1.2 最大流算法 (Maximum Flow Algorithms)
Ford-Fulkerson 算法是一种迭代算法,其核心思想是通过不断寻找增广路径来增加网络中的流量。
▮▮▮▮ⓐ 对于原图中的每条边 \((u, v) \in E\),如果 \(f(u, v) < c(u, v)\),则在残留网络中存在一条从 \(u\) 到 \(v\) 的边,其残留容量为 \(c(u, v) - f(u, v)\)。这条边表示还可以增加的流量。
▮▮▮▮ⓑ 对于原图中的每条边 \((u, v) \in E\),如果 \(f(u, v) > 0\),则在残留网络中存在一条从 \(v\) 到 \(u\) 的边,其残留容量为 \(f(u, v)\)。这条边表示可以减少的流量(即反向流量)。
▮▮▮▮ⓐ 初始化流 \(f\) 为零流,即对所有边 \((u, v) \in E\),令 \(f(u, v) = 0\)。
▮▮▮▮ⓑ 构建残留网络 \(G_f\)。
▮▮▮▮ⓒ 在残留网络 \(G_f\) 中寻找一条从源点 \(s\) 到汇点 \(t\) 的增广路径 \(p\)。可以使用深度优先搜索 (DFS) 或广度优先搜索 (BFS) 等图搜索算法。
▮▮▮▮ⓓ 如果找不到增广路径,则算法终止,当前的流 \(f\) 即为最大流。
▮▮▮▮ⓔ 如果找到增广路径 \(p\),计算路径 \(p\) 上的最小残留容量 \(c_p = \min_{(u, v) \in p} \{c_f(u, v)\}\),其中 \(c_f(u, v)\) 是边 \((u, v)\) 在残留网络中的容量。
▮▮▮▮ⓕ 沿着增广路径 \(p\) 增加流量。对于路径 \(p\) 上的每条边 \((u, v)\):
▮▮▮▮▮▮▮▮❼ 如果 \((u, v)\) 是原图中的正向边,则更新 \(f(u, v) = f(u, v) + c_p\)。
▮▮▮▮▮▮▮▮❽ 如果 \((v, u)\) 是原图中的反向边(即对应于原图中的边 \((u, v)\) 的反向边),则更新 \(f(u, v) = f(u, v) - c_p\)。
▮▮▮▮ⓘ 返回步骤 ⓑ。
Edmonds-Karp 算法是 Ford-Fulkerson 算法的一个改进版本。它规定每次选择增广路径时,必须选择残留网络中从源点 \(s\) 到汇点 \(t\) 的最短路径(边数最少)。可以使用广度优先搜索 (BFS) 来找到最短路径。
Dinic 算法是另一种更高效的最大流算法。它在 Edmonds-Karp 算法的基础上,引入了层次图 (level graph) 和阻塞流 (blocking flow) 的概念,进一步提高了算法的效率。
▮▮▮▮ⓐ 初始化流 \(f\) 为零流。
▮▮▮▮ⓑ 构建残留网络 \(G_f\)。
▮▮▮▮ⓒ 构建残留网络 \(G_f\) 的层次图 \(G_L\)。如果汇点 \(t\) 在层次图中不可达,则算法终止,当前的流 \(f\) 即为最大流。
▮▮▮▮ⓓ 在层次图 \(G_L\) 中寻找一个阻塞流 \(f'\)。可以使用 DFS 等方法寻找增广路径,并沿着路径增加流量,直到找不到增广路径为止。
▮▮▮▮ⓔ 更新流 \(f = f + f'\)。
▮▮▮▮ⓕ 返回步骤 ⓑ。13.2 匹配问题再探 (Matching Problems Revisited)
13.2.1 最大权匹配 (Maximum Weight Matching)
Blossom 算法是一种增广路径算法,类似于最大流算法。它从一个初始匹配开始,不断寻找增广路径来增加匹配的权重。与最大基数匹配不同的是,在最大权匹配中,我们需要考虑边的权重,增广路径的选择也更加复杂。
▮▮▮▮ⓐ 初始化匹配 \(M\) 为空集。
▮▮▮▮ⓑ 寻找增广路径。可以使用类似于 DFS 或 BFS 的方法,但需要考虑边的权重。
▮▮▮▮ⓒ 如果找到增广路径,则沿着路径增广匹配,更新匹配 \(M\)。
▮▮▮▮ⓓ 如果在寻找增广路径的过程中遇到奇环(花),则将花收缩成一个伪顶点,并更新图和权重。
▮▮▮▮ⓔ 重复步骤 ⓑ 和 ⓓ,直到找不到增广路径为止。
▮▮▮▮ⓕ 当找不到增广路径时,算法终止,当前的匹配 \(M\) 即为最大权匹配。13.2.2 应用于实际问题 (Applications to Real-world Problems)
婚介问题是最经典的匹配问题之一。假设有 \(n\) 位男士和 \(n\) 位女士,每对男女之间都有一个匹配满意度评分。目标是如何将男士和女士配对,使得总的满意度最高。这个问题可以建模为二分图的最大权完美匹配问题。顶点分别代表男士和女士,边代表可能的配对,边的权重代表满意度评分。
假设有 \(n\) 个任务需要分配给 \(m\) 个人完成,每个人完成不同任务的成本不同。目标是如何分配任务,使得总成本最低。这个问题可以建模为最小权匹配问题。如果任务数和人数相等,可以建模为最小权完美匹配问题。
在交通调度中,例如航班调度、车辆调度等,需要将航班或车辆分配到不同的时间段或路线,以优化效率或降低成本。例如,在公交车调度中,需要将公交车分配到不同的线路和时间段,使得在满足乘客需求的前提下,运营成本最低。这可以建模为匹配问题或网络流问题。
在图像处理中,匹配问题可以用于图像配准、特征匹配等。例如,在图像配准中,需要找到两幅图像之间的对应关系,使得它们能够对齐。这可以建模为点匹配问题或特征匹配问题。
在生物信息学中,匹配问题可以用于序列比对、蛋白质结构比对等。例如,在 DNA 序列比对中,需要找到两个 DNA 序列之间的相似性,这可以建模为序列匹配问题。在蛋白质结构比对中,需要找到两个蛋白质结构之间的对应关系,这可以建模为结构匹配问题。
在社交网络分析中,匹配问题可以用于社区发现、链接预测等。例如,在社区发现中,需要将社交网络中的用户划分为不同的社区,使得社区内部的连接更紧密,社区之间的连接更稀疏。这可以建模为图划分问题或匹配问题。14. chapter 14: 高级计数技巧 (Advanced Counting Techniques)
14.1 符号方法 (Symbolic Method)
14.1.1 组合类的概念 (Concept of Combinatorial Classes)
① 单词类 (Class of words):设字母表 \( \Sigma = \{a, b\} \)。定义 单词 (word) 的大小为它的长度。则所有由字母 \( a \) 和 \( b \) 组成的单词构成一个组合类 \( \mathcal{W} \)。大小为 \( n \) 的单词数量是 \( 2^n \)。
② 树类 (Class of trees):考虑 平面二叉树 (planar binary trees)。定义树的大小为 内部节点 (internal nodes) 的数量。所有平面二叉树构成一个组合类 \( \mathcal{T} \)。大小为 \( n \) 的平面二叉树的数量是 卡特兰数 (Catalan numbers) \( C_n = \frac{1}{n+1} \binom{2n}{n} \)。
③ 图类 (Class of graphs):考虑 简单图 (simple graphs)。定义图的大小为 边 (edges) 的数量。所有顶点标记为 \( \{1, 2, \ldots, v\} \) 的简单图构成一个组合类 \( \mathcal{G}_v \)。大小为 \( m \) 的 \( v \) 顶点简单图的数量是 \( \binom{\binom{v}{2}}{m} \)。
符号方法的核心在于通过一些基本的组合运算来构建更复杂的组合类,并推导出其生成函数。以下是几种重要的运算:
设 \( \mathcal{B} \) 和 \( \mathcal{C} \) 是两个不相交的组合类。它们的 不交并 (disjoint union) \( \mathcal{A} = \mathcal{B} + \mathcal{C} \) 是指集合的并集,且大小函数保持不变。如果 \( \mathcal{B} \) 和 \( \mathcal{C} \) 本身不是不相交的,我们可以取它们的 同构副本 (isomorphic copies) 使其不相交。
如果 \( B(z) \) 和 \( C(z) \) 分别是 \( \mathcal{B} \) 和 \( \mathcal{C} \) 的 计数生成函数 (counting generating functions) (例如,普通生成函数 (Ordinary Generating Function, OGF) 或 指数生成函数 (Exponential Generating Function, EGF)),则 \( \mathcal{A} = \mathcal{B} + \mathcal{C} \) 的计数生成函数是 \( A(z) = B(z) + C(z) \)。
⚝ OGF: \( B(z) = \sum_{n \ge 0} b_n z^n \), \( C(z) = \sum_{n \ge 0} c_n z^n \), 则 \( A(z) = \sum_{n \ge 0} (b_n + c_n) z^n = B(z) + C(z) \)。
⚝ EGF: \( B(z) = \sum_{n \ge 0} b_n \frac{z^n}{n!} \), \( C(z) = \sum_{n \ge 0} c_n \frac{z^n}{n!} \), 则 \( A(z) = \sum_{n \ge 0} (b_n + c_n) \frac{z^n}{n!} = B(z) + C(z) \)。
设 \( \mathcal{B} \) 和 \( \mathcal{C} \) 是两个组合类。它们的 笛卡尔积 (Cartesian product) \( \mathcal{A} = \mathcal{B} \times \mathcal{C} \) 是指集合的笛卡尔积,且对象 \( (\beta, \gamma) \in \mathcal{B} \times \mathcal{C} \) 的大小定义为 \( |(\beta, \gamma)| = |\beta| + |\gamma| \)。
如果 \( B(z) \) 和 \( C(z) \) 分别是 \( \mathcal{B} \) 和 \( \mathcal{C} \) 的计数生成函数,则 \( \mathcal{A} = \mathcal{B} \times \mathcal{C} \) 的计数生成函数是 \( A(z) = B(z) \cdot C(z) \)。
⚝ OGF: \( A(z) = B(z) \cdot C(z) \)。
⚝ EGF: \( A(z) = B(z) \cdot C(z) \)。
设 \( \mathcal{B} \) 是一个组合类,且 \( \mathcal{B}_0 = \emptyset \) (即大小为 0 的 \( \mathcal{B} \) 类对象不存在,或者我们认为大小必须为正数)。序列构造 (sequence construction) \( \mathcal{A} = \mathbf{Seq}(\mathcal{B}) \) 表示由 \( \mathcal{B} \) 类对象组成的序列。一个 \( \mathcal{A} \) 类对象是一个序列 \( (\beta_1, \beta_2, \ldots, \beta_k) \),其中每个 \( \beta_i \in \mathcal{B} \),且序列的大小定义为序列中所有对象的总大小 \( |(\beta_1, \beta_2, \ldots, \beta_k)| = |\beta_1| + |\beta_2| + \cdots + |\beta_k| \)。空序列 \( \epsilon \) 也被认为是 \( \mathbf{Seq}(\mathcal{B}) \) 的一个元素,且大小为 0。
如果 \( B(z) \) 是 \( \mathcal{B} \) 的计数生成函数,则 \( \mathcal{A} = \mathbf{Seq}(\mathcal{B}) \) 的计数生成函数是 \( A(z) = \frac{1}{1 - B(z)} \)。要求 \( \mathcal{B}_0 = \emptyset \) 是为了保证 \( B(0) = 0 \),从而 \( 1 - B(z) \) 在 \( z = 0 \) 附近是可逆的。
⚝ OGF: \( A(z) = \frac{1}{1 - B(z)} \)。
⚝ EGF: \( A(z) = \frac{1}{1 - B(z)} \)。
设 \( \mathcal{B} \) 是一个组合类。集合构造 (set construction) \( \mathcal{A} = \mathbf{Set}(\mathcal{B}) \) 表示由 \( \mathcal{B} \) 类对象组成的集合。一个 \( \mathcal{A} \) 类对象是一个集合 \( \{ \beta_1, \beta_2, \ldots, \beta_k \} \),其中每个 \( \beta_i \in \mathcal{B} \),且集合的大小定义为集合中所有对象的总大小 \( |\{ \beta_1, \beta_2, \ldots, \beta_k \}| = |\beta_1| + |\beta_2| + \cdots + |\beta_k| \)。空集 \( \emptyset \) 也被认为是 \( \mathbf{Set}(\mathcal{B}) \) 的一个元素,且大小为 0。
如果 \( B(z) \) 是 \( \mathcal{B} \) 的计数生成函数,则 \( \mathcal{A} = \mathbf{Set}(\mathcal{B}) \) 的计数生成函数,根据使用 OGF 还是 EGF 而有所不同。
⚝ OGF: 如果考虑 无标号集合 (unlabeled sets),则 OGF 的关系较为复杂,通常不直接使用 OGF 进行集合构造。
⚝ EGF: 如果考虑 有标号集合 (labeled sets),则 EGF 的关系简洁:如果 \( B(z) \) 是 \( \mathcal{B} \) 的 EGF,则 \( \mathcal{A} = \mathbf{Set}(\mathcal{B}) \) 的 EGF 是 \( A(z) = \exp(B(z)) = \sum_{k=0}^{\infty} \frac{B(z)^k}{k!} \)。
设 \( \mathcal{B} \) 是一个组合类。循环构造 (cycle construction) \( \mathcal{A} = \mathbf{Cyc}(\mathcal{B}) \) 表示由 \( \mathcal{B} \) 类对象组成的环状排列(循环)。一个 \( \mathcal{A} \) 类对象是一个循环 \( (\beta_1, \beta_2, \ldots, \beta_k) \),其中每个 \( \beta_i \in \mathcal{B} \),且循环的大小定义为循环中所有对象的总大小 \( |(\beta_1, \beta_2, \ldots, \beta_k)| = |\beta_1| + |\beta_2| + \cdots + |\beta_k| \)。
如果 \( B(z) \) 是 \( \mathcal{B} \) 的计数生成函数,则 \( \mathcal{A} = \mathbf{Cyc}(\mathcal{B}) \) 的计数生成函数,同样根据使用 OGF 还是 EGF 而有所不同。
⚝ OGF: 如果考虑 无标号循环 (unlabeled cycles),OGF 的关系较为复杂。
⚝ EGF: 如果考虑 有标号循环 (labeled cycles),则 EGF 的关系是 \( A(z) = \ln \left( \frac{1}{1 - B(z)} \right) = \sum_{k=1}^{\infty} \frac{B(z)^k}{k} \)。
最基本的组合类是 原子类 (atomic class),通常记为 \( \mathcal{Z} \),它只包含一个大小为 1 的对象。例如,在单词的例子中,可以认为 \( \mathcal{Z} \) 代表一个字母的位置。原子类的 OGF 和 EGF 都是 \( Z(z) = z \)。14.1.2 符号方法的应用 (Applications of Symbolic Method)
考虑由字母表 \( \Sigma = \{a, b\} \) 组成的单词,我们希望计算长度为 \( n \) 的单词数量。
我们可以将字母 \( a \) 和 \( b \) 分别看作原子类 \( \mathcal{Z}_a \) 和 \( \mathcal{Z}_b \),它们的生成函数都是 \( z \)。
单词是由字母组成的序列,因此单词类 \( \mathcal{W} \) 可以表示为 \( \mathcal{W} = \mathbf{Seq}(\mathcal{Z}_a + \mathcal{Z}_b) \)。
令 \( \mathcal{B} = \mathcal{Z}_a + \mathcal{Z}_b \),则 \( B(z) = Z_a(z) + Z_b(z) = z + z = 2z \)。
单词类 \( \mathcal{W} \) 的生成函数是 \( W(z) = \frac{1}{1 - B(z)} = \frac{1}{1 - 2z} \)。
将 \( W(z) \) 展开成 幂级数 (power series):
\[ W(z) = \frac{1}{1 - 2z} = \sum_{n=0}^{\infty} (2z)^n = \sum_{n=0}^{\infty} 2^n z^n \]
因此,长度为 \( n \) 的单词数量是 \( [z^n]W(z) = 2^n \)。
考虑平面二叉树,其中每个节点要么是 叶节点 (leaf node) (外部节点),要么有两个子节点 (内部节点)。我们以内部节点的数量作为树的大小。
设 \( \mathcal{T} \) 表示平面二叉树类。一个平面二叉树要么是一个叶节点(大小为 0 的基本情况),要么是一个根节点连接两个子树(左子树和右子树)。
我们可以用符号方程表示为:
\[ \mathcal{T} = \mathcal{L} + \mathcal{Z} \times \mathcal{T} \times \mathcal{T} \]
其中 \( \mathcal{L} \) 表示叶节点类,它只包含一个大小为 0 的对象(叶节点本身),其生成函数为 \( L(z) = 1 \)。 \( \mathcal{Z} \) 表示一个内部节点(大小为 1 的原子类),其生成函数为 \( Z(z) = z \)。 \( \mathcal{T} \times \mathcal{T} \) 表示左右子树的笛卡尔积。
设 \( T(z) \) 是平面二叉树类 \( \mathcal{T} \) 的生成函数。根据符号方程,我们得到生成函数方程:
\[ T(z) = L(z) + Z(z) \cdot T(z) \cdot T(z) = 1 + z T(z)^2 \]
解这个关于 \( T(z) \) 的二次方程:
\[ z T(z)^2 - T(z) + 1 = 0 \]
使用 二次公式 (quadratic formula) 解得:
\[ T(z) = \frac{1 \pm \sqrt{1 - 4z}}{2z} \]
由于我们要求 \( T(0) \) 是有限的(实际上 \( T(0) = 1 \),对应大小为 0 的树,即叶节点),我们取负号:
\[ T(z) = \frac{1 - \sqrt{1 - 4z}}{2z} \]
这就是平面二叉树的 普通生成函数 (OGF),展开后其系数就是卡特兰数。
\[ T(z) = \sum_{n=0}^{\infty} C_n z^n = \sum_{n=0}^{\infty} \frac{1}{n+1} \binom{2n}{n} z^n \]
考虑 有标号图 (labeled graphs)。设 \( \mathcal{G} \) 是所有有标号图的类,\( \mathcal{C} \) 是所有有标号连通图的类。我们使用 指数生成函数 (EGF)。
一个有标号图可以看作是由若干个连通分支组成的集合。因此,我们可以用集合构造来描述有标号图与连通图的关系:
\[ \mathcal{G} = \mathbf{Set}(\mathcal{C}) \]
设 \( G(z) \) 和 \( C(z) \) 分别是有标号图和有标号连通图的 EGF。根据集合构造的性质,我们有:
\[ G(z) = \exp(C(z)) \]
或者等价地,
\[ C(z) = \ln(G(z)) \]
我们知道,对于 \( n \) 个顶点的有标号图,总共有 \( 2^{\binom{n}{2}} \) 个图。因此,有标号图的 EGF 是:
\[ G(z) = \sum_{n=0}^{\infty} 2^{\binom{n}{2}} \frac{z^n}{n!} \]
通过 \( C(z) = \ln(G(z)) \),我们可以计算出有标号连通图的 EGF,并提取系数得到有标号连通图的计数。14.2 解析组合学 (Analytic Combinatorics)
14.2.1 奇点分析 (Singularity Analysis)
奇点分析的核心思想是,通过分析生成函数在主奇点附近的 解析行为 (analytic behavior),来推导出组合序列 \( f_n = [z^n]F(z) \) 的渐近公式。
转移定理 (transfer theorems) 是奇点分析中的重要工具,它们描述了生成函数在奇点附近的局部行为与其系数渐近行为之间的关系。一个典型的转移定理 (简化版本) 如下:
设 \( F(z) \) 在其收敛圆 \( |z| < \rho \) 内解析,且 \( \rho > 0 \) 是唯一的模最小的奇点。假设在 \( z \rightarrow \rho \) 时,\( F(z) \) 具有如下奇点行为:
\[ F(z) \sim C \left( 1 - \frac{z}{\rho} \right)^{-\alpha} \quad \text{当 } z \rightarrow \rho, z \in \Delta \]
其中 \( C \) 和 \( \alpha \) 是常数,\( \Delta \) 是一个 Drasin 区域 (Drasin domain) (例如,一个挖去以 \( \rho \) 为顶点的角域的圆盘)。则当 \( n \rightarrow \infty \) 时,系数 \( f_n = [z^n]F(z) \) 的渐近行为为:
\[ f_n = [z^n]F(z) \sim C \frac{n^{\alpha - 1}}{\Gamma(\alpha)} \rho^{-n} \]
其中 \( \Gamma(\alpha) \) 是 伽玛函数 (Gamma function)。
以下是一些常见的奇点类型及其对应的系数渐近公式:
如果 \( F(z) \sim C \left( 1 - \frac{z}{\rho} \right)^{-1/2} \) 当 \( z \rightarrow \rho \),则 \( f_n \sim C \frac{n^{-1/2}}{\Gamma(1/2)} \rho^{-n} = C \frac{1}{\sqrt{\pi n}} \rho^{-n} \)。
例如,卡特兰数的生成函数 \( T(z) = \frac{1 - \sqrt{1 - 4z}}{2z} \) 在 \( z = 1/4 \) 处有平方根奇点,展开后可以得到卡特兰数的渐近公式 \( C_n \sim \frac{4^n}{n^{3/2} \sqrt{\pi}} \)。
如果 \( F(z) \sim C \ln \left( \frac{1}{1 - z/\rho} \right) \) 当 \( z \rightarrow \rho \),则 \( f_n \sim C \frac{\rho^{-n}}{n} \)。
例如,有标号连通图的计数就涉及到对数奇点。
如果 \( F(z) \sim \frac{C}{1 - z/\rho} \) 当 \( z \rightarrow \rho \),则 \( f_n \sim C \rho^{-n} \)。
如果 \( F(z) \sim \frac{C}{(1 - z/\rho)^k} \) 当 \( z \rightarrow \rho \),则 \( f_n \sim C \binom{n+k-1}{k-1} \rho^{-n} \sim C \frac{n^{k-1}}{(k-1)!} \rho^{-n} \)。
例如,斐波那契数列的生成函数 \( F(z) = \frac{z}{1 - z - z^2} \) 有两个极点,主极点决定了斐波那契数列的指数增长率。
① 确定生成函数 \( F(z) \):通过组合构造或递推关系得到生成函数。
② 找到主奇点 \( \rho \):分析 \( F(z) \) 的解析性质,找到模最小的奇点 \( \rho \)。通常 \( \rho \) 是收敛半径。
③ 分析奇点附近的局部行为:确定 \( F(z) \) 在 \( z \rightarrow \rho \) 时的渐近形式,例如 \( F(z) \sim C (1 - z/\rho)^{-\alpha} \)。
④ 应用转移定理:根据奇点行为和转移定理,推导出系数 \( f_n = [z^n]F(z) \) 的渐近公式。14.2.2 渐近计数 (Asymptotic Counting)
渐近计数的目的不是求出精确的计数公式,而是找到一个近似公式,描述当 \( n \) 很大时 \( c_n \) 的增长趋势。通常,我们寻找形如 \( c_n \sim f(n) \) 的渐近公式,其中 \( f(n) \) 是一个相对简单的函数,例如 \( C \rho^{-n} n^{\alpha - 1} \)。
① 生成函数方法 (Generating Function Method):
这是渐近计数中最强大的方法之一,主要依赖于解析组合学的奇点分析。通过分析生成函数的主奇点及其附近的解析行为,应用转移定理来获得渐近公式。
鞍点法 (saddle point method) 是一种复分析中的积分方法,也常用于渐近计数。对于一些生成函数,我们可以使用 柯西积分公式 (Cauchy integral formula) 表示系数 \( c_n \):
\[ c_n = [z^n]F(z) = \frac{1}{2\pi i} \oint_{\mathcal{C}} \frac{F(z)}{z^{n+1}} dz \]
其中 \( \mathcal{C} \) 是一个围绕原点的闭合围道。鞍点法通过选择合适的围道 \( \mathcal{C} \) 并利用 最速下降法 (steepest descent method) 或 鞍点近似 (saddle point approximation) 来估计积分,从而得到 \( c_n \) 的渐近公式。
在某些情况下,可以使用 概率方法 (probabilistic method) 来估计计数。例如,通过分析随机组合结构的性质,可以推导出典型结构的计数渐近行为。
直接从组合结构出发,通过构造性的方法或不等式估计来逼近计数。例如,使用 斯特林公式 (Stirling's approximation) \( n! \sim \sqrt{2\pi n} \left( \frac{n}{e} \right)^n \) 来估计阶乘相关的组合数。
常见的渐近公式类型包括:
① 指数增长 (Exponential Growth):\( c_n \sim C \rho^{-n} n^{\alpha - 1} \)。例如,卡特兰数 \( C_n \sim \frac{4^n}{n^{3/2} \sqrt{\pi}} \)。
② 亚指数增长 (Subexponential Growth):\( c_n \sim n^{\alpha} \) 或 \( c_n \sim (\ln n)^{\alpha} \)。例如,整数分拆函数的增长速度是亚指数的。
③ 超指数增长 (Superexponential Growth):\( c_n \) 的增长速度快于指数增长,例如 \( c_n \sim n! \) 或 \( c_n \sim 2^{n^2} \)。
示例 14.2.2 (卡特兰数的渐近分析):
我们已经知道卡特兰数的生成函数是 \( T(z) = \frac{1 - \sqrt{1 - 4z}}{2z} \)。主奇点是 \( \rho = 1/4 \)。在 \( z \rightarrow 1/4 \) 时,
\[ T(z) = \frac{1 - \sqrt{1 - 4z}}{2z} \sim \frac{1 - \sqrt{1 - 4z}}{2(1/4)} = 2 (1 - \sqrt{1 - 4z}) = 2 - 2 \sqrt{1 - 4z} \]
\[ T(z) - 2 \sim -2 \sqrt{1 - 4z} = -2 (1 - 4z)^{1/2} = -2 \left( 1 - \frac{z}{1/4} \right)^{1/2} \]
因此,\( F(z) = T(z) - 2 \) 的奇点行为是 \( F(z) \sim -2 \left( 1 - \frac{z}{1/4} \right)^{1/2} \),其中 \( C = -2 \),\( \rho = 1/4 \),\( \alpha = -1/2 \)。
应用转移定理,得到 \( [z^n]F(z) \sim -2 \frac{n^{-1/2 - 1}}{\Gamma(-1/2)} (1/4)^{-n} = -2 \frac{n^{-3/2}}{\Gamma(-1/2)} 4^n \)。
由于 \( C_n = [z^n]T(z) = [z^n](F(z) + 2) = [z^n]F(z) \) (当 \( n \ge 1 \) 时),且 \( \Gamma(-1/2) = -2\sqrt{\pi} \),
\[ C_n \sim -2 \frac{n^{-3/2}}{-2\sqrt{\pi}} 4^n = \frac{1}{\sqrt{\pi} n^{3/2}} 4^n = \frac{4^n}{n^{3/2} \sqrt{\pi}} \]
这就是卡特兰数的渐近公式。15. chapter 15: 组合数学的应用 (Applications of Combinatorics)
15.1 计算机科学中的应用 (Applications in Computer Science)
15.1.1 算法设计与分析 (Algorithm Design and Analysis)
在算法分析中,我们经常需要计算算法执行过程中特定操作的次数,或者可能解的数量。组合计数技巧,如加法原理 (Rule of Sum)、乘法原理 (Rule of Product)、排列 (Permutations)、组合 (Combinations)、生成函数 (Generating Functions) 等,为我们提供了强大的工具。
许多算法问题涉及到在所有可能的排列或组合中寻找最优解。例如,旅行商问题 (Traveling Salesperson Problem, TSP) 就是一个经典的排列优化问题,目标是找到访问所有城市并返回起点的最短路径。组合优化方法,如动态规划 (Dynamic Programming)、回溯搜索 (Backtracking)、分支定界 (Branch and Bound) 等,都 heavily rely on 组合思想来枚举和搜索解空间。
图论是组合数学的一个重要分支,在计算机科学中有着广泛的应用,尤其是在算法设计中。许多算法问题都可以建模为图论问题,例如网络路由、社交网络分析、任务调度等。图的遍历 (Graph Traversal)、最短路径 (Shortest Path)、最小生成树 (Minimum Spanning Tree)、最大流 (Maximum Flow)、图匹配 (Graph Matching) 等经典图论算法,都依赖于图的组合性质。
概率方法 (Probabilistic Method) 是组合数学中一种强大的工具,也被广泛应用于随机算法的设计与分析。随机算法利用随机性来解决问题,其性能分析通常需要借助概率组合学的知识。例如,快速排序 (Quick Sort) 算法的平均时间复杂度分析就使用了概率和组合的技巧。
组合数学为算法复杂度分析提供了理论基础。时间复杂度 (Time Complexity) 和空间复杂度 (Space Complexity) 的分析经常涉及到计数问题。例如,分析循环的执行次数、递归调用的深度、数据结构的存储空间等,都需要用到组合计数的方法。15.1.2 数据结构 (Data Structures)
树和图是最基本也是最重要的数据结构。树的计数 (Tree Enumeration)、树的遍历 (Tree Traversal)、图的表示 (Graph Representation)、图的连通性 (Graph Connectivity) 等概念都直接来源于组合图论。例如,二叉搜索树 (Binary Search Tree)、平衡树 (Balanced Tree)、堆 (Heap) 等数据结构的分析和优化都离不开树的组合性质。
哈希表是一种高效的查找数据结构,其性能很大程度上取决于哈希函数 (Hash Function) 的设计和冲突解决策略。好的哈希函数应该能够将键 (key) 均匀地分布到哈希表的各个槽位 (slot),以减少冲突。哈希函数的设计和分析涉及到组合概率和随机性。
有些数据结构专门用于解决计数问题,例如布隆过滤器 (Bloom Filter)、Count-Min Sketch 等。这些数据结构利用概率和组合技巧,在牺牲一定的精确性的前提下,实现了高效的计数和查询操作。
一些高级数据结构,例如跳跃表 (Skip List)、Treap (Tree + Heap)、Splay Tree (伸展树) 等,其设计思想融合了组合和随机化的技巧,以达到更好的平均性能。这些数据结构的分析通常需要用到更高级的组合数学工具。
在数据压缩领域,一些高效的压缩算法会使用特定的数据结构来提高压缩效率,例如 Huffman 树 (Huffman Tree)、Lempel-Ziv 字典树 (Lempel-Ziv Trie) 等。这些数据结构的设计和分析也与组合数学密切相关。15.2 信息论与编码理论中的应用 (Applications in Information Theory and Coding Theory)
15.2.1 纠错码 (Error-Correcting Codes)
汉明码是一种经典的线性纠错码,可以纠正一位错误。汉明码的构造和分析涉及到线性代数和组合设计。汉明码的校验矩阵 (Parity-check Matrix) 和生成矩阵 (Generator Matrix) 的设计都基于特定的组合结构。
RS 码是一类强大的非二进制循环码,广泛应用于数据存储、通信和广播等领域。RS 码的构造基于有限域上的多项式 (Polynomials over Finite Fields) 理论,其纠错能力强,可以纠正多个符号错误。RS 码的设计和分析也涉及到组合数学中的多项式计数和有限域理论。
BCH 码是一类重要的循环码,是 RS 码的推广。BCH 码的构造也基于有限域上的多项式理论,具有很强的纠错能力。BCH 码的设计和解码算法都涉及到组合数学和代数运算。
LDPC 码是一类性能接近香农极限 (Shannon Limit) 的线性分组码,广泛应用于现代通信系统。LDPC 码的构造基于稀疏图 (Sparse Graph) 理论,其校验矩阵具有稀疏性。LDPC 码的设计和解码算法,例如置信传播 (Belief Propagation) 算法,都与图论和概率方法密切相关。
喷泉码是一类无码率 (rateless) 码,可以根据信道条件动态调整编码速率,适用于广播和多播等场景。喷泉码的编码过程类似于从一个源泉中不断产生水滴,接收端只要接收到足够的水滴就能恢复原始信息。喷泉码的构造和分析涉及到概率和组合的随机性。15.2.2 数据压缩 (Data Compression)
霍夫曼编码是一种经典的前缀编码算法,用于无损数据压缩。霍夫曼编码基于字符频率构建最优前缀码树 (Huffman Tree),使得平均码长最短。霍夫曼编码的构造和分析涉及到树的组合性质和贪心算法。
算术编码是一种高效的熵编码 (entropy coding) 算法,可以达到接近信息熵 (entropy) 的压缩率。算术编码将整个消息编码成一个实数区间,通过不断缩小区间范围来表示消息。算术编码的实现和分析涉及到实数运算和概率模型。
LZ 算法是一类广泛应用于数据压缩的字典编码 (dictionary coding) 算法,例如 LZ77、LZ78、LZW 等。LZ 算法通过建立动态字典,将重复出现的字符串替换成字典中的索引,实现数据压缩。LZ 算法的性能分析涉及到字符串的组合结构和字典的构建策略。
BWT 是一种可逆的数据变换算法,常用于数据压缩的预处理阶段。BWT 通过对输入字符串进行循环移位和排序,将具有相似上下文的字符聚集在一起,从而提高后续压缩算法的效率。BWT 的变换过程和逆变换过程都涉及到字符串的排列和组合。
上下文模型是一种利用数据局部相关性进行压缩的技术。上下文模型根据当前符号的上下文信息 (例如前几个符号) 预测当前符号的概率分布,并使用熵编码算法进行压缩。上下文模型的设计和分析涉及到概率模型和统计方法。15.3 运筹学与管理科学中的应用 (Applications in Operations Research and Management Science)
15.3.1 调度问题 (Scheduling Problems)
作业车间调度问题是一类经典的调度问题,涉及到多个作业 (job) 和多个机器 (machine)。每个作业包含一系列工序 (operation),每个工序需要在特定的机器上加工,且工序之间有先后顺序约束。目标是找到一个最优的调度方案,使得所有作业的完工时间 (makespan) 最小。作业车间调度问题是 NP-hard 问题,求解难度很高。
流水车间调度问题是作业车间调度问题的一个特例,所有作业的工序顺序相同,都在相同的机器上按照相同的顺序加工。流水车间调度问题相对作业车间调度问题简单一些,但仍然是 NP-hard 问题。
并行机调度问题是指在多台相同或不同的机器上调度一组独立的任务,目标是优化某种性能指标。并行机调度问题可以分为同构并行机调度 (Identical Parallel Machine Scheduling)、同类并行机调度 (Uniform Parallel Machine Scheduling) 和非同类并行机调度 (Unrelated Parallel Machine Scheduling) 等类型。
RCPSP 是一类考虑资源约束的调度问题,涉及到多个任务和多种资源。每个任务需要消耗一定数量的资源,且资源总量有限。目标是在满足资源约束和任务先后顺序约束的条件下,最小化项目完成时间。RCPSP 是 NP-hard 问题,求解难度很高。
在线调度是指任务到达时间未知,调度决策需要在任务到达时立即做出的调度问题。在线调度算法通常需要具有较好的实时性和鲁棒性。竞争比率 (Competitive Ratio) 是评价在线调度算法性能的重要指标。15.3.2 资源分配 (Resource Allocation)
指派问题是指将一组任务分配给一组执行者,每个执行者执行不同的任务会产生不同的成本或效益,目标是找到一个最优的指派方案,使得总成本最小或总效益最大。指派问题是组合优化中的经典问题,可以使用匈牙利算法 (Hungarian Algorithm) 等方法高效求解。
背包问题在资源分配中也有着广泛的应用。例如,在预算约束下,如何选择一组项目投资,使得总投资不超过预算,且总收益最大。背包问题可以使用动态规划算法、贪心算法、分支定界算法等方法求解。
VRP 是一类重要的物流配送问题,涉及到如何规划车辆的行驶路线,以满足客户的需求,并最小化运输成本。VRP 可以看作是旅行商问题 (TSP) 的推广,需要考虑车辆容量、时间窗口 (Time Window)、多车场 (Multi-Depot) 等约束。VRP 是 NP-hard 问题,求解难度很高。
FAP 是无线通信网络规划中的一个重要问题,旨在为无线电台分配频率,以避免或减少干扰,并最大化频谱利用率。FAP 可以建模为图着色问题 (Graph Coloring Problem) 或其变种。组合优化方法,例如图着色算法、局部搜索算法 (Local Search Algorithm)、遗传算法等,可以用于求解 FAP。
公平分配是指如何在多个参与者之间公平地分配资源或物品。公平分配问题涉及到公平性准则 (Fairness Criteria) 的定义和算法设计。比例公平 (Proportional Fairness)、均等公平 (Max-Min Fairness) 等是常用的公平性准则。组合优化和博弈论 (Game Theory) 方法可以用于解决公平分配问题。