离散数学学习笔记

更好的阅读体验可以到我的github下载PDF。

前言

本笔记由chy-2003整理于上海交通大学发布于coursera的离散数学课程。讲师龙环。

不保证内容十分全面,但至少与课程内容保持一致,同时添加或删减了某些样例和引入。

定理或命题下方的块没有特殊标注即为证明。

如果发现文章内容错误,请联系 chy_2003@foxmail.com。

本笔记由chy-2003免费共享,不得用作商业用途。

引言

推荐书目

Invitation to Discrete Mathematics(Oxford University Press)

Discrete Mathematics:Elementary and Beyond

函数

函数\(f:X\rightarrow Y\)为集合\(X\)到集合\(Y\)的一个映射。对于任意\(x\in X\),都有唯一一个\(y\in Y\)与之对应。

单射:对于\(\forall y\in Y\)最多只有一个\(x\in X\)与之对应。

满射:对于\(\forall y\in Y\)都有至少一个\(x\in X\)与之对应。

双射:同时满足单射与满射的映射。

集合运算

对于集合\(A=\{1,2,3\}\)\(B=\{2,4\}\)\(U=\{1,2,3.4\}\):

\(2^A=\{\emptyset, \{1\},\{2\},\{3\},\{1,2\},\{1,3\},\{2,3\},\{1,2,3\}\}\) (幂集\(P(A)\)

\(A\diagdown B=\{1,3\}\)\(A-B\)

\(A\times B=\{(1,2),(1,4),(2,2),(2,4),(3,2),(3,4)\}\)

\(A\oplus B=\{1,3,4\}\)

\(\overline A =\{4\}\)

关系

对于集合\(A\),关系\(R\subseteq A\times A\),如果\((x,y)\in R\),就可以记做\(xRy\)。关系可能有以下性质:

  • 自反性: 对于\(\forall x\in A\),都有\(xRyxRx\)
  • 对称性: 对于\(\forall x,y \in A\),如果\(xRy\),就有\(yRx\)
  • 反对称性: 对于\(\forall x,y\in A\),如果有\(xRy\)\(yRx\),那么\(x=y\)
  • 传递性: 对于\(\forall x,y,z\in A\),如果\(xRy\)\(yRz\),那么\(xRz\)

一些特殊关系:

  • 等价关系: 关系\(R\)具有自反性、对称性、传递性。例如\(\equiv _6\subseteq N\times N\)
  • 偏序关系: 关系\(R\)具有自反性、反对称性、传递性。例如\(\leqslant \subseteq N\times N\)

关系的运算

关系是一个集合,所以支持集合有关的运算。而关系还支持合成运算。我们定义\(R\subseteq A\times B\)\(S\subseteq B\times C\),那么合成运算\(R\circ S=\{(x,z):x\in A \wedge z\in C \wedge \exists y\in B((x,y)\in R \wedge (y,z)\in S)\}\)

\(R^{-1}=\{(x,y):(y,x)\in R\}\)表示\(R\)的逆关系。

\(R^n=R^{n-1}\circ R\)

等价类

有等价关系\(R\subseteq A\times A\),定义\(R[x]=\{y\in A:xRy\}\)\(R[x]\)被称为元素\(x\)在关系\(R\)下的等价类。例如对于关系\(\equiv_6\subseteq N\times N\)\(\equiv_6[0]=\{0,1,2,3,\dots\}\)

性质:

如果\(R\subseteq A\times A\)是等价关系,那么有

\(\bullet\) 对于\(\forall x\in A\)\(R[x]\)非空。

对于\(\forall x\in A\)\(x\in R[x]\)。所以对于\(\forall x\in A\)\(R[x]\)非空。

\(\bullet\) 对于\(\forall x,y\in A\)\(R[x]=R[y]\)\(R[x]\cap R[y]=\emptyset\)

\(R[x]\cap R[y]=\emptyset\),那么结论成立。

\(z\in R[x]\cap R[y]\neq \emptyset\),即\(xRz\)\(yRz\)。那么根据对称性有\(zRx\)。对于\(\forall x'\in R[x]\),即\(xRx'\),根据传递性有\(zRx'\)。又根据对称性有\(yRx'\)。即\(x'\in R[y]\)\(\therefore R[x]\subseteq R[y]\)

同理\(R[y]\subseteq R[x]\)\(\therefore R[x]=R[y]\)

综上所述,结论成立。

划分

对于集合\(A\),如果\(\pi=\{B_1,B_2,\dots,B_n\}\)满足

  • 对于\(\forall 1\leqslant i \leqslant n\),有\(\emptyset \neq B_i \subseteq A\)
  • 对于\(\forall 1\leqslant i < j \leqslant n\)\(B_i\cap B_j=\emptyset\)。(不相交性)
  • \(B_1\cup B_2\cup \dots \cup B_n=A\)。(覆盖性)

则称\(\pi\)\(A\)的一个划分。

如果\(R\subseteq A\times A\)是一个等价关系,则等价类集合\(\Pi=\{R[x]:x\in A\}\)是集合\(A\)\(R\)关系下的划分。

练习题1.1

序的关系

偏序集

定义偏序集\((S,R)\)\(R\)是集合\(S\)上的偏序关系。

常用符号

偏序\(\preccurlyeq, \leqslant\)

严偏序\(\prec, <\)

逆序\(\succcurlyeq, >\)

线性序

如果偏序集\((S,R)\)\(\forall x,y\in S, \Rightarrow xRy \vee yRx\),那么称\((S,R)\)为线性序。

\((N,\leqslant),(Z,\leqslant)\)是线性序,\((2^A, \subseteq),(N,|)\)不是。

字典序

\((S_1,\leqslant_1),(S_2,\leqslant_2),...,(S_n,\leqslant_n)\)\(n\)个线性序,\((a_1,a_2,...,a_n),(b_1,b_2,...,b_n)\in S_1\times S_2\times \dots \times S_n\)

\(n\)元字典序\((a_1,a_2,\dots,a_n)\leqslant_{lex}(b_1,b_2,\dots,b_n)\)成立

\(\Longleftrightarrow(a_1,a_2,\cdots,a_n)=(b_1,b_2,\dots,b_n)\vee \exists i\in\{1,2,\dots,n\}(\forall j<i)a_j=b_j\wedge a_i <_i b_i\)

\(n\)元字典序是线性序的证明

部分证明,其余类似:

传递性:有\(n\)元组

\[x=(a_1,a_2,\dots,a_i,\dots,a_j,\dots,a_n)\\ y=(b_1,b_2,\dots,b_i,\dots,b_j,\dots,b_n)\\ z=(c_1,c_2,\dots,c_i,\dots,c_j,\dots,c_n) \]

\(x\leqslant_{lex} y\leqslant_{lex} z\),且\(x,y\)的前\(i-1\)项相同,\(y,z\)的前\(j-1\)项相同。对\(i,j\)的大小分为\(3\)类讨论:

如果\(i<j\),那么\(a_i<_i b_i=c_i\);如果\(i=j\),那么\(a_i<_i b_i <_i c_i\);如果\(i>j\),那么\(a_j=b_j<_j c_j\)。综上,有\(x\leqslant_{lex} y\)

其余部分略。

立即前元

定义:对于偏序集\((S,\preccurlyeq)\),元素\(x,y\),若\(x\prec y \wedge \urcorner(\exists z\in s)(x\prec z\prec y)\),那么称\(x\)\(y\)的立即前元,记为\(x\lhd y\)

性质:1、\(\lhd\)不具有传递性。2、多个元素可能有同一立即前元。3、一个元素可能有多个立即前元。

例:\((N,|)\)

哈斯图(Hasse diagram)

给定偏序集\((S,\preccurlyeq)\)\(S\)为有限集。只保留立即前元关系对应边。若\(x\lhd y\),则代表\(y\)的点在代表\(x\)的点上方。可以通过传递闭包恢复原图。

偏序集上的极大元、极小元、最大元、最小元

  • 极大元(Maximal element) \(\urcorner(\exists x\in S)x \succ a\)
  • 极小元(Minimal element) \(\urcorner(\exists x\in S) x \prec a\)
  • 最大元(Largest element) \(\forall x \in S, x \preccurlyeq a\)
  • 最小元(Smallest element) \(\forall x \in S,a\preccurlyeq x\)

一些性质

  • 极大元、极小元可能不止一个,一个元素可能既是极大元,又是极小元。
  • 可能不存在最大元、最小元。
  • 最大元一定是极大元,最小元一定是极小元。而极小元不一定是最小元,极大元不一定是最大元。
  • 如果\(S\)是无限集,那么极大元、极小元、最大元、最小元不一定存在。
  • 如果\(S\)是有限集,那么最大元、最小元不一定存在,极大元、极小元一定存在。

\(S\)为有限集时,极小元存在性证明

\(\forall x_0 \in S\)。如果\(x_0\)是极小元,那么证毕。如果\(x_0\)不是极小元,找到\(x_1\prec x_0\),对\(x_1\)重复以上讨论。而由于\(S\)是有限集,那么情况\(2\)在有限步后不成立,情况\(1\)成立。

线性扩充定理

线性扩充:对于有限集\((S,\preccurlyeq)\),存在一个线性序集\((S,\preccurlyeq ')\),满足\(x\prec y \rightarrow x\preccurlyeq' y\)

证明

\(|S|=1\)时,\((S,\preccurlyeq')=(S,\preccurlyeq)\)即可。当\(|S|>1\)时,取\((S,\preccurlyeq)\)中的一个极小元\(x_0\)\(S'=S\backslash \{x\}\)。易证得\((S',\preccurlyeq)\)是一个偏序集,且\(|S'|<|S|\)。根据归纳假设,存在\((S',\preccurlyeq)\)的线性扩充\((S',\preccurlyeq '')\)。构造\((S,\preccurlyeq ')\)\(\preccurlyeq '=\preccurlyeq '' \bigcup \{(x_0,y):y\in S\}\)。易证\((S,\preccurlyeq')\)是线性序列。

一般线性扩充并不唯一。

练习题1.2

链与反链

对于有限偏序集\((S,\preccurlyeq)\)\(A\subseteq S\)\(A\)被称为

  • 链(Chain): 如果对于任意\(x,y\in A\), $x \preccurlyeq y $ 或 $y\preccurlyeq x $。
  • 反链(Antichain): 如果对任意\(x,y\in A\), \(x \not \preccurlyeq y\)。反链也称为独立集(Independent set)。

还可以这么定义:

  • 可比较(Comparable): 若\(x\preccurlyeq y\)\(y \preccurlyeq x\)
  • 不可比较(Incomparable): 若\(x \not \preccurlyeq y\)且$ y \not \preccurlyeq x $。
  • 链:可比较元素的集合。
  • 反链:不可比较元素的集合。

最大独立集和最长链

给定有限偏序集$P=(S,\preccurlyeq) $。

  • $\alpha (P) = \max { |A| : A \(是\)P\(上的反链(独立集)\)}$。
  • \(\omega(P)=\max\{|A|:A\)\(P\)上的链\(\}\)

Mirsky定理:给定有限偏序集\(P=(S,\preccurlyeq)\),将\(S\)划分成若干个不相交的反链集,取最小划分数\(t\),即

\[\begin{aligned} t=\min \left \{ k \left | \begin{matrix} s=A_1\cup A_2 \cup \dots \cup A_k \\ 1 \leqslant i \leqslant k,A_i是反链 \\任意1 \leqslant i \neq j \leqslant k, A_i \cap A_j = \emptyset \end{matrix} \right . \right \} \end{aligned} \]

\(t=\omega(P)\)

先证明\(\omega(P)\leqslant t\)

\(S=A_1\cup A_2\cup \dots \cup A_t\),其中\(A_1,A_2,\dots,A_t\)为不相交的反链划分。

$C\subseteq S \(是\)P\(中任意一条链,有\)|C\cap A_i|\leqslant 1$。

\(|C|=|C\cap S|=|C\cap(A_1\cup A_2\cup \dots \cup A_t)| = |(C\cap A_1)\cup(C\cap A_2)\cup \dots \cup (C \cap A_t)|\leqslant t\)

\(\therefore \omega(P)\leqslant t\)

然后证明\(t \leqslant \omega( P )\)

\(A_1\)\(S\)的极小元集合,\(A_{i+1}=S\backslash (A_1\cup A_2\cup \dots\cup A_i)\)的极小元集合。

每一个\(A_i\)都是一个反链(独立集)。有限步后\(A_1\cup A_2\cup \dots \cup A_m\),由\(t\)的最小性,\(t \leqslant m\)。只需证明\(m\leqslant \omega(P)\)

任取\(x_m\in A_m\),由构造,得\(\exists x_{m-1}\in A_{m-1}\),使得\(x_{m-1}\prec x_m\)。以此类推,存在序列\(x_1\prec x_2 \prec \dots \prec x_m\)\(\therefore m \leqslant \omega(P)\)

\(\therefore t \leqslant \omega( P )\)

证毕

推论1\(\alpha(P) \times \omega(P) \geqslant |S|\)

\(P=A_1\cup A_2\cup \dots \cup A_t\)\(t=\omega(P)\)\(|A_i|\leqslant \alpha(P)\)

$|S|=|A_1|+|A_2|+\dots+|A_t|\leqslant \alpha(P) \times \omega(P) $。

推论2:对于任意有限偏序集\(P=(S,\preccurlyeq)\)\(\alpha(P)\)\(\omega(P)\)之一至少为\(\sqrt{|S|}\)。形象的,我们可以定义“宽”:\(\alpha(P)\),”高“:\(\omega(P)\)

Erdos-Szekeres引理:任意一个含有\(n^2+1\)个元素的实数序列\((x_1,x_2,\dots,x_{n^2+1})\)中都含有一个长度为\(n+1\)的单调子序列。

\((x_1,\dots,x_{n^2+1})\),设\(I={1,2,\dots,n^2+1}\)

在集合\(I\)上定义关系\(\preccurlyeq\):$i\preccurlyeq j\Longleftrightarrow (i\leqslant j)\wedge (x_i \leqslant x_j) $。

可以证明\((I,\preccurlyeq)\)是偏序集。

由于推论2,若$\omega(I,\preccurlyeq ) > n \(:非递减子序列\)x_{i_1}\leqslant x_{i_2}\leqslant \dots\leqslant x_{i_m}\(。若\)\alpha(I,\preccurlyeq)>n\(,有独立集\){i_1,i_2,\dots,i_m}\(。设\)i_1 < i_2 < \dots < i_m\(,则\)x_{i_1} > x_{i_2} > \dots x_{i_m}$为非递增子序列。

证毕。

练习题1.3

组合数计数

导引:函数的计数

命题1:集合\(N\)的大小为\(n\),集合\(M\)的大小为\(m\),且\(n\geqslant 0,m\geqslant 1\)。从集合\(N\)到集合\(M\)所有可能的函数\(f:N\rightarrow M\)共有\(m^n\)个。

\(n\)做数学归纳。当\(n=0\)时,\(f=\emptyset\)\(f\)唯一。此时\(m^n=1\)成立。假设\(n=k\)时结论成立。当\(n=k+1\)时,取\(\forall a \in N\),则\(f:N\rightarrow M\)可以看做如下两个部分的组合:

1、确定\(f(a)\in M\)\(f\)函数在\(a\)上的值\(f(a)\)\(f(a)\)的取值共有\(m\)中可能。

2、确定\(f':M\backslash \{a\} \rightarrow M\)。根据归纳假设,\(f'\)\(m^{n-1}\)种可能。

\(f:N\rightarrow M\)共有\(m\times m^{n-1}=m^n\)种可能。

命题2:集合\(N\)的大小为\(n\),集合\(M\)的大小为\(m\),且\(n\geqslant 0\)\(m\geqslant 0\)。从集合\(N\)到集合\(M\)所有可能的单射函数\(f:N\rightarrow M\)的个数为\(m\times (m-1)\times \dots\times (m - n + 1 )=\prod\limits_{i=0}^{n-1} (m-i)\)

\(n\)做数学归纳。当\(n=0\)时,\(f=\emptyset\)\(f\)单射且唯一。此时公式成立。假设\(n=k\)时结论成立。当\(n=k+1\)时,取\(\forall a \in N\),则\(f:N\rightarrow M\)可以看做如下两个部分的组合:

1、确定\(f(a)\in M\)\(f\)函数在\(a\)上的值\(f(a)\)\(f(a)\)的取值共有\(m\)中可能。

2、确定\(f':M\backslash \{a\} \rightarrow M\backslash\{f(a)\}\)。根据归纳假设,\(f'\)\((m-1)\dots(m-n+1)\)种可能。

\(f:N\rightarrow M\)共有\(m\times (m-1)\times \dots\times (m - n + 1 )=\prod\limits_{i=0}^{n-1} (m-i)\)种可能。

练习题2.1

简单应用:子集计数,置换计数

命题3:集合\(X\)含有\(n\)个元素\(n\geqslant 0\)。则\(X\)一共有\(2^n\)个子集。

方法一:数学归纳法(略)

方法二:

考虑\(X\)的任意子集\(A\),定义函数\(f_A:X\rightarrow \{0,1\}\)\(\begin{aligned} f_A(X)= \left \{ \begin{matrix} 1 & if\,\,x\in A \\ 0 & if\,\,x\not \in A \end{matrix}\right . \end{aligned}\)\(f_A\)叫集合\(A\)的特征函数。如果可以验证(图示后显然成立)\(X\)的子集与函数\(f_A\)一一对应,那么就可以得到\(X\)的子集个数与从\(x\)\(\{0,1\}\)的函数个数相等,为\(2^n\)个。(命题1)

置换:集合\(X\)到其自身的双射函数被称为一个置换。

置换的表示:

  • \(p:X\rightarrow X\)是一个双射函数。
  • 矩阵表示:如果集合\(X\)是有限集,它包含的元素\(\{x_1,x_2,\dots,x_n\}\),则函数\(p\)可以表示为\(\begin{aligned}\left ( \begin{matrix}x_1 &x_2&\dots&x_n\\p(x_1)&p(x_2)&\dots&p(x_n)\end{matrix} \right ) \end{aligned}\)。如果\(x_1,x_2,\dots,x_n\)固定,那么可以用一行表示为\(\begin{aligned}\left(\begin{matrix}p(x_1) &p(x_2)&\dots&p(x_n)\end{matrix}\right )\end{aligned}\)。例如\(\begin{aligned}p=\left (\begin{matrix}1&2&3&4&5&6&7\\4&5&3&2&6&7&1 \end{matrix}\right )\end{aligned}\)可以表示为\(\begin{aligned}p=\left(\begin{matrix}4&5&3&2&6&7&1\end{matrix}\right)\end{aligned}\)
  • 图示法:1
  • 环(cycles)表示:\(p=((1,4,2,5,6,7)(3))\)

可以证明对于有限集合上的任一置换:1、图示法下表达成互不相交的环(独立子环);2、除独立子环内点的顺序不一样外,环表示唯一。

置换的计数:阶乘

集合\(X\)的大小为\(n\)(即\(|X|=n\)),则\(X\)上的置换一共有$n\times (n-1)\times \dots \times 2 \times 1 $个。证明:类似于命题2,略。

\(n\)的阶乘(n factorial):\(n!=n\times(n-1)\times \dots\times 2 \times 1 =\prod\limits_{i=1}^n i\)

练习题2.2

二项式定理、多项式定理

问题引入:已知集合\(X\)的大小为\(n\)(即\(|X|=n\)),\(n\geqslant k\geqslant 0\)\(X\)的所有子集中正好含有\(k\)个元素的子集一共有多少个?例:\(X=\{a,b,c\},k=2\)

常用符号:$X \choose k \(和\)| {X \choose k} |\(。例中\){X\choose k}={{a,b},{a,c},{b,c}}\(,\)|{X\choose k }|=3$。

命题4 :从含\(n\)个元素的集合\(X\)中抽取含\(k\)个元素\((n\geqslant k\geqslant 0)\)的子集。所有\(k\)元子集的个数为

\[\left |{X\choose k}\right |=\frac{n(n-1)(n-2)\dots(n-k+1)}{k!} \]

算两次:

\(X\)中抽取\(k\)元不重复有序组,一共有\(n(n-1)\dots(n-k+1)\)种方法。

另一方面从任意1个\(X\)\(k\)元子集出发,可以得到\(k!\)个不同的\(k\)元有序组。

二者相等,故$n(n-1)\dots(n-k+1)=k!\left | { X \choose k } \right | $。

\[\therefore \left | {X \choose k } \right |=\frac{n(n-1)\dots(n-k+1)}{k!} \]

二项式系数\(|X|=n\geqslant k\)均为非负整系数,定义二项式系数为

\[{n\choose k}=\left | {X\choose k } \right | =\frac{n(n-1)\dots(n-k+1)}{k!}=\frac{n!}{k!(n-k)!} \]

命题5\(m\geqslant r\geqslant 0\)是满足等式\(x_1+x_2+\dots+x_r=m\)的非负\(r\)元整数解\((x_1,x_2,\dots,x_r)\)的个数为\(m+r-1 \choose r-1\)个。

\(m\)个球用\(r-1\)个隔板隔开,方法与解\((x_1,x_2,\dots,x_r)\)一一对应。就相当于在\(m+r-1\)个对象中,选取\(r-1\)个作为挡板,剩下\(m\)个为球。

性质

  • \({n\choose k}={n\choose n-k}\)
  • \({n-1 \choose k-1}+{n-1\choose k}={n \choose k}\)
  • \(\sum\limits_{i=0}^n{n \choose i}^2={2n \choose n }\)

对于第三点的证明:注意到\(\sum\limits_{i=0}^n{n\choose i}^2=\sum\limits_{i=0}^n{n\choose i}{n\choose n - i}\)。而\(2n \choose n\)可理解为1、直接从\(2n\)个元素选\(n\)个;2、前\(n\)个元素里选\(i\)个,后\(n\)个元素里选\(n-i\)个。

二项式定理(Binomial Theorem):对任意非负整数\(n\)如下等式成立

\[(1+x)^n=\sum\limits_{k=0}^n{n\choose k}x^k \]

\(x=1\)时,得到

\[{n \choose 0}+{n \choose 1 }+\dots + {n \choose n }=2^n \]

\(x=-1\)时,得到

\[{n\choose 0}-{n\choose 1 } + {n \choose 2}-{n \choose 3} + \dots = \sum\limits_{k=0}^n{n\choose k}(-1)^k=0 \]

将上面两式相加,得到

\[{n\choose 0}+{n\choose 2}+{n\choose 4}+\dots =2^{n-1} \]

带重复元素的排列:有来自\(m\)类的物品共\(n\)个,其中第\(i\)类物品有\(k_i\)个。即\(k_1+k_2+\dots+k_m=n\)。同一类物品不可区分。那么这\(n\)个物品所组成的不同排列一共有\(\frac{n!}{k_1!k_2!\dots k_m!}\)种,记作\(n \choose k_1,k_2,\dots,k_m\),被称为多项式系数

证明思路同命题4,略。

多项式定理(Multinomial Theorem):对任意实数\(x_1,x_2,\dots,x_m\),以及任意自然数\(n\geqslant 1\),如下等式成立:

\[(x_1+x_2+\dots+x_m)^n=\sum\limits_{\substack {k_1+k_2+\dots+k_m=n \\ k1,k2,\dots,k_m\geqslant 0}}{n\choose k_1,k_2,\dots,k_m}x_1^{k_1}x_2^{k_2}\dots x_m^{k_m} \]

略(归纳法)

练习题2.3

容斥原理

例:\(|F\cup P|=|F|+|P|-|F\cap P|\)\(|S\cup F\cup P|=|S|+|F|+|P|-|S\cap F|-|S\cap P|-|F\cap P|+|S\cap F\cap P|\)

容斥定理(Inclusion-exclusion principle):对于任意有限集合\(A_1,A_2,\dots,A_n\),有

\[\begin{aligned} \left | \bigcup\limits_{i=1}^nA_i\right | &=\sum\limits_{k=1}^n(-1)^{k-1}\sum\limits_{\substack I\in{\{1,2,\dots,n\}\choose k} }\left|\bigcap\limits_{i\in I}A_i\right | \\ &=\sum\limits_{\substack \emptyset\neq I \subseteq\{1,2,\dots,n\}} (-1)^{|I|-1}\left|\bigcap\limits_{i\in I}A_i\right| \end{aligned} \]

数学归纳法:

\(n=2\)时成立。假设对\(n-1\)成立,则

\[\begin{aligned} \left | \bigcup_{i=1}^n A_i \right | &= \left | \left ( \bigcup\limits_{i=1}^{n-1}A_i\right )\bigcup A_n\right |\\ &=\left | \bigcup\limits_{i=1}^{n-1}A_i \right |+ \left | A_n\right | - \left | \left ( \bigcup\limits_{i=1}^{n-1} A_i\right )\bigcap A_n \right | \\ & = \left | \bigcup\limits_{i=1}^{n-1}A_i\right |+\left | A_n\right |- \left | \bigcup\limits_{i=1}^{n-1}\left(A_i\cap A_n\right)\right | \end{aligned} \]

其中$ \left | \bigcup\limits_{i=1}^{n-1}A_i\right |\(和\)\left | \bigcup\limits_{i=1}^{n-1}\left(A_i\cap A_n\right)\right |$可由归纳假设推出。

应用1:错排

任给一个\(n\),求出\(1,2,\dots,n\)的错排个数\(D(n)\)共有多少个?

解:用\(S_n\)表示所有\(\{1,2,\dots,n\}\)上的排列,则\(|S_n|=n!\)。令\(A_i=\{\pi\in S_n:\pi(i)=i\}\),那么就有\(D(n)=n!-|A_1\cup A_2\cup \dots \cup A_n |\)

可以发现\(|A_i|=(n-1)!\),如果\(i<j\),那么\(|A_i\cap A_j |=(n-2)!\)。如果\(i_1<i_2<\dots<i_k\),那么\(|A_{i_1}\cap A_{i_2}\cap\dots\cap A_{i_k}|=(n-k)!\)

根据容斥原理:

\[|A_1\cup A_2\cup\dots\cup A_n |=\sum\limits_{k=1}^n(-1)^{k-1}{n \choose k}(n-k)!=\sum\limits_{k=1}^n(-1)^{k-1}\frac{n!}{k!} \]

\(D(n)=n!(1-\frac{1}{1!}+\frac{1}{2!}-\dots+(-1)^n\frac{1}{n!})\)

特别的,\(\lim\limits_{n\rightarrow \infty}D_n=\frac{n!}{e}\)

应用2:欧拉函数

欧拉函数\(\phi\):给定自然数\(n\),欧拉函数\(\phi(n)\)定义为不超过\(n\)且与\(n\)互质的自然数的个数。即

\[\phi(n)=|\{m\in\{1,2,\dots,n\}:\gcd(n,m)=1\}|=? \]

解:根据整数分解定理,\(n\)可被唯一地分解成\(n=p_1^{\alpha_1}p_2^{\alpha_2}\dots p_r^{\alpha^r}\),其中$\alpha_i \geqslant 1 \(且\)p_i\(为素数,\)p_1<p_2<\dots<p_r$。

如果\(1\leqslant m < n\),且\(m\)\(n\)不互素,则必存在某个\(1\leqslant i\leqslant r\)\(p_i|m\)。令\(A_i=\{m\in \{1,2,\dots,n\}:p_i|m\}\),则\(\phi(n)=n-|A_1\cup A_2\cup \dots \cup A_r|\)

可以发现\(|A_i|=\frac{n}{p_i}\)。当\(i<j\)时,\(|A_i\cap A_j|=\frac{n}{p_ip_j}\)。当\(i_1<i_2<\dots<i_k\)时,\(|A_{i_1}\cap A_{i-2}\cap \dots \cap A_{i_k}|=\frac{n}{p_{i_1}p_{i_2}\dots p_{i_k}}\)

所以有\(\phi(n)=n(1-\frac{1}{p_1})(1-frac{1}{p_2})\dots(1-\frac{1}{p_r})\)

练习题2.4

函数估计

大O符号

应用范围:寻找精确值困难,转而寻找可接受的估值(estimate)。

函数的渐进比较(Asymptotic comparison)

定义:\(f,g:N\rightarrow R\)是两个从自然数到实数的单变量方程。\(f(n)=O(g(n))\)表示存在常数\(n_0\)\(c\),使得对所有\(n\geqslant n_0\),不等式\(|f(n)|\leqslant c\times g(n)\)成立。

直观地讲,\(f\)的增长不比\(g\)快很多。即\(\lim\limits_{n\rightarrow} \frac{f(n)}{g(n)}\not \rightarrow \infty\)

例子:\(100000=O(1)\)\((7n^2+6n+1)(n^3+4)=O(n^5)\)\({n\choose 2}=n(n-1)/2=\frac{1}{2}n^2+O(n)=O(n^2)\)

\(0<\alpha\leqslant \beta \Rightarrow n^\alpha = O(n^\beta)\)\(\forall C > 0, a >1, n^n=O(a^n)\)\(\forall C> 0, \alpha > 0, (\ln n)^C=O(n^\alpha)\)

名称 表示 条件 直观含义
\(O\)符号 \(f(n)=O(g(n))\) \(\lim\limits_{n\rightarrow \infty}\frac{f(n)}{g(n)}\not\rightarrow \infty\) \(f\)的增长不比\(g\)快很多
\(o\)符号 \(f(n)=o(g(n))\) \(\lim\limits_{n\rightarrow\infty}\frac{f(n)}{g(n)}=0\) \(f\)的增长远远慢于\(g\)
\(\Omega\)符号 \(f(n)=\Omega(g(n))\) \(g(n)=O(f(n))\) \(f\)的增长至少和\(g\)一样快
\(\Theta\)符号 \(f(n)=\Theta(g(n))\) \(f(n)=O(g(n))\)\(f(n)=\Omega(g(n))\) \(f\)\(g\)几乎是同一数量级
\(f(n)\thicksim g(n)\) \(\lim\limits_{n\rightarrow\infty}\frac{f(n)}{g(n)}=1\) \(f(n)\)\(g(n)\)几乎是一样的

调和级数(Harmonic number)

定义调和级数\(H_n=1+\frac{1}{2}+\frac{1}{2}+\dots+\frac{1}{n}=\sum\limits_{i=1}^n\frac{1}{n}\)

调和级数估值

用数列对调和级数的项做分类。

\(1\) \(\frac{1}{2},\frac{1}{3}\) \(\frac{1}{4},\dots,\frac{1}{7}\) \(\frac{1}{8},\dots,\frac{1}{15}\) \(\frac{1}{16},\dots\) \(\dots\)
\((\frac{1}{2^1},\frac{1}{2^0}]\) \((\frac{1}{2^2},\frac{1}{2^1}]\) \((\frac{1}{2^3},\frac{1}{2^2}]\) \((\frac{1}{2^4},\frac{1}{2^3}]\) \((\frac{1}{2^5},\frac{1}{2^4}]\) \(\dots\)
\(G_0\) \(G_1\) \(G_2\) \(G_3\) \(G_4\) \(\dots,G_t\)

其中\(G_k=\{\frac{1}{i}|\frac{1}{2^k}<\frac{1}{i}\leqslant \frac{1}{2^{k-1}}\}\)。不难发现\(|G_k|=2^{k-1}\)

同时有:

\[\begin{aligned} &\sum\limits_{x\in G_k}x\leqslant | G_k|\max G_k=2^{k-1}\times\frac{1}{2^{k-1}}=1\\ &\sum\limits_{x\in G_k}x\geqslant |G_k|\min G_k>2^{k-1}\times \frac{1}{2^k}=\frac{1}{2} \end{aligned} \]

\(G\)的最后一项\(G_t\)下表\(t=\lfloor \log_2 n\rfloor+1\)

\[\begin{aligned} \left . \begin{matrix} H_n\leqslant t\times 1\leqslant \lfloor \log_2 n\rfloor +1 \\ H_n>(t-1)\times\frac{1}{2}\geqslant \frac{1}{2}\lfloor \log_2 n\rfloor \end{matrix}\right \} \Rightarrow H(n)=\Theta(\log_2 n)=\Theta(\ln n ) \end{aligned} \]

练习题3.1

估值初步:阶乘估值

极点估值(\(n\geqslant 2\)

\[\begin{aligned} \left \{\begin{matrix} n!=\prod\limits_{i=1}^n i \leqslant \prod\limits_{i=1}^n n = n ^ n \\ n!=\prod\limits_{i=2}^n i \geqslant \prod\limits_{i=2}^n 2 = 2 ^ {n - 1 } \end{matrix} \right . \end{aligned} \]

进一步优化:

\[\begin{aligned} \left \{ \begin{matrix} n!=\prod\limits_{i=1}^ni\leqslant \left(\prod\limits_{i=1}^{\frac{n}{2}}\frac{n}{2}\right)\left(\prod\limits_{i=\frac{n}{2}+1}^n n\right)=\left(\frac{n}{\sqrt{2}}\right)^n\\ n!=\prod\limits_{i=1}^n i \geqslant \prod\limits_{i=\frac{n}{2}}^ni>\prod\limits_{i=\frac{n}{2}+1}^n\frac{n}{2}=(\frac{n}{2})^{\frac{n}{2}}=(\sqrt{\frac{n}{2}})^n \end{matrix} \right . \end{aligned} \]

高斯估值

算数-几何均值不等式(Arithmetic-geometric mean inequality):

\[\sqrt{xy}\leqslant \frac{x+y}{2} (x,y\in R_+) \]

那么上界:

\[n!=\sqrt{n!n!}=\sqrt{\prod\limits_{i=1}^n i(n+1-i)}=\prod\limits_{i=1}^n\sqrt{i(n+1-i)}\leqslant \prod_{i=1}^n\frac{n+1}{2}=(\frac{n+1}{2})^n \]

同时,我们容易验证有

\[i(n+1-i)\geqslant n \]

那么下界:

\[n!=\sqrt{n!n!}=\sqrt{\prod\limits_{i=1}^n i(n+1-i)}=\prod\limits_{i=1}^n\sqrt{i(n+1-i)}\geqslant\prod\limits_{i=1}^n\sqrt n = n ^{\frac{n}{2}} \]

欧拉数(Euler number)\(e=2.718281828\dots\)

对于\(x\in R\),有\(1+x\leqslant e ^ x\)。最终我们会得到\(e(\frac{n}{e})^n\leqslant n! \leqslant en(\frac{n}{e})^n\)

证明:上界(归纳法)

\(n=1\)时,\(1\geqslant 1!\),结论平凡。设\(n=k\)时结论成立,那么当\(n=k+1\)时,

\(n!=n(n-1)!\leqslant n e(n-1)(\frac{n-1}{e})^{n-1}=en(\frac{n}{e})^n\times e(\frac{n-1}{n})^n\)

\(e(\frac{n-1}{n})^n=e(1-\frac{1}{n})^n\leqslant e(e^{-\frac{1}{n}})^n=1\)。所以结论成立。

证明:下界(归纳法)

\(n=1\)时,\(1\leqslant 1!\),结论平凡。设\(n=k\)时结论成立,那么当\(n=k+1\)时,

\(n!=n(n-1)!\leqslant n e(n-1)(\frac{n-1}{e})^{n-1}=en(\frac{n}{e})^n\times e(\frac{n-1}{n})^{n-1}\)

\(e(\frac{n-1}{n})^{n-1}=e(\frac{n}{n-1})^{1-n}=e(1+\frac{1}{n-1})^{1-n}=e\left((1+\frac{1}{n-1})^{n-1}\right)^{-1}\geqslant e\left((e\frac{1}{n-1})^{n-1}\right)^{-1}=e\times e ^{-1} = 1\)

结论成立。

Stirling公式\(n!\thicksim \sqrt{2\pi n}(\frac{n}{e})^n\),即\(\lim\limits_{n\rightarrow \infty }\frac{\sqrt{2\pi n}(\frac{n}{e})^n}{n!}=1\)

估值初步:二项式系数估值

显然,有\({n \choose k}\leqslant n ^ k\)。当\(n\geqslant k > i \geqslant 0\)\(\frac{n-i}{k-i}\geqslant \frac{n}{k}\),故\({n\choose k}=\prod\limits_{i=0}^{k-1}\frac{n-i}{k-i}\geqslant (\frac{n}{k})^k\)

二项式定理:对\(n\geqslant 1,1\leqslant k \leqslant n\),取\(0<x<1\),有\({n\choose 0}+{n \choose 1}x+\dots+{n\choose n}x^n=(1+x)^n\)

显然,\({n\choose 0}+{n\choose 1}x+\dots+{n \choose k}x^k \leqslant (1 + x)^n\),故\(\frac{1}{x^k}{n\choose 0}+\frac{1}{x^{k-1}}{n\choose 1}+\dots+{n\choose k}\leqslant \frac{(1+x)^n}{x^k}\)

\({n\choose 0}+{n\choose 1}+\dots+{n \choose k}\leqslant \frac{(1+x)^n}{x^k}\)。取\(x=\frac{k}{n}\),因为\(1+x\leqslant e ^x\)

\({n\choose 0}+{n \choose 1}+\dots+{n\choose k}\leqslant (1+\frac{k}{n})^n(\frac{n}{k})^k\leqslant (e^{\frac{k}{n}})^n(\frac{n}{k})^k=(\frac{en}{k})^k\)

所以\({n\choose k}\leqslant{n\choose 0}+{n\choose 1}+\dots+{n\choose k}\leqslant (\frac{en}{k})^k\)

直接带入Stirling公式可以得到更好的结果。

图论导引

基本定义

:图\(G\)是一个有序对\((V,E)\),其中\(V\)是一个集合,被称为顶点集,\(E\)是一组由二元\(V\)元素组成的集合,称为边集,即\(E\subseteq {V \choose 2}\)。为方便常用\(V(G),E(G)\)来分别表示“\(G\)的顶点集”和“\(G\)的边集”。

画图(drawing)2

阶(Order):图顶点的个数,即\(|V|\),亦常用\(|G|\)表示。若\(e=\{u,v\}\in E\),则称点\(u\)\(v\)在图\(G\)中是相邻的(adjacent),或称\(u\)\(v\)邻居(neighbor)。此时亦称\(e\)\(u,v\)相关联(incident)

显然的,一条边与且仅与两个顶点相关联。

常用\(N(u)\)表示与顶点\(u\)相邻的点集。下图的\(|G|=4,N(v_1)=\{v_1,v_2,v_3,v_4\}\)

3

顶点的度:给定图\(G=(V,E),v\in V\),定义该顶点在图\(G\)中的度(degree)为$\deg_G v=|u:{u,v}\in G|=|N(v)| \(。一般地,\)\delta(G)\(表示图\)G\(的最小度,\)\Delta(G)\(表示图\)G\(中的最大度。显然\)\deg_G(v)\leqslant |E|$。

chy-2003注:这里的度似乎没有考虑重边,而下面提到的欧拉图考虑了重边。

上图中\(\delta(G)=1\)\(\Delta(G)=4\)

无向图(undirected graph):上面讨论的都是无向图。无向图的边由集合表示\(e=\{u,v\}\)

有向图(directed graph):有向图的边由点对表示\(e=(u,v)\)\(u\)称为边\(e\)的起点或尾(tail)\(v\)称为边\(e\)的终点或头(head)

4

除显式声明外,一般图为无向图。

子图:定义已有图\(G\)\(G'\),若\(V(G)\subseteq V(G')\)\(E(G)\subseteq E(G')\),那么称\(G\)\(G'\)的子图(subgraph)。

若在子图基础上还有\(E(G)=E(G')\cap {V(G) \choose 2}\),则\(G\)\(G'\)导出子图(induced subgraph)

若在子图基础上还有\(V(G)=V(G')\),则\(G\)\(G'\)生成子图(spanning subgraph)

图上基本操作

  • \(G\cup \{e_{ij}\},G+e_{ij}\):在图\(G\)中增加边\(e_{ij}=\{v_i,v_j\}\)
  • \(G\backslash \{e_{ij}\},G-e_{ij}\):在图\(G\)中删除边\(e_{ij}=\{v_i,v_j\}\)。不断进行这个操作可以得到任意生成子图。
  • \(G\backslash \overline E,G-\overline E\),其中\(\overline E \subseteq E(G)\):从图\(G\)中删去\(\overline E\)中所有的边。
  • \(G\backslash \{v\},G-v\):从图\(G\)中删去顶点\(v\)及其关联的边。不断进行这个操作可以得到任意导出子图。
  • \(G\backslash \overline V,G-\overline V\),其中\(\overline V \subseteq V(G)\):从\(G\)中删去\(\overline V\)中的所有顶点及与这些点相关联的边。

特殊图

路径图(path \(P_n\)\(V=\{0,1,\dots,n\},E=\left\{\{i-1,i\}:i=1,2,\dots,n\right\}\)

环(cycle \(C_n\)\(V=\{1,2,\dots,n\},E=\left\{\{i,i+1\}:i=1,2,\dots,n-1\right\} \cup \left\{\{1,n\}\right\}\)

二分图(Bipartite graph \(B_{n,m}\)\(V=\{u_1,\dots,u_n\}\cup\{v_1,\dots,v_m\},E\subseteq \left\{\{u_i,v_j\}:i=1,\dots,n,j=1,\dots,m\right\}\)

完全图(Complete graph \(K_n\)\(V=\{1,2,\dots,n\},E={V\choose 2 }\)

完全二分图(Complete bipartite graph \(K_{n,m}\)

\(V=\{u_1,\dots,u_n\}\cup\{v_1,\dots,v_n\},E=\{\{u_i,v_j\}:i=1,\dots,n,j=1,\dots,m\}\)

正则图:如果图中所有顶点的度数都是一个常值\(r\),则称该图为\(r-\)正则图(r-regular graph)。

0-正则图:空图;

1-正则图:不相邻的边(集);

2-正则图:不相交的环(集);

3-正则图:又称为立方图(cubic graph)。

简单图

对于无向图\(G=(V,E)\)自环(loop)\(e\in E\),如果\(e=\{v,v\}\),其中\(v\in V\)则称\(e\)是一个自环。重边(Multiedge)\(e_1,e_2\in E\)\(e_1=e_2=\{u,v\}\),其中\(u,v\in V\),则称\(e_1,e_2\)是重边。简单图(simple graph):没有重边和自环的无向图。

路径(Path):不允许环,各个顶点和边至多出现一次。

游走(Walk):允许环,顶点和边可重复。

连通图(connected graph):如果图\(G\)上任意两点\(u,v\)之间都有至少一条路径,则称\(G\)是一个连通图。否则称为非连通图(disconnected graph)

极大连通子图:给定图\(G\),定义\(G\)的极大联通子图:

  • 是原图的子图;
  • 是连通图;
  • 已经等于原图或再扩大(增加顶点或边)则成为非连通图。

连通分支(component):图\(G=(V,E)\)的极大连通子图也被称为图\(G\)的连通分支。连通分支可能不唯一,图\(G\)的极大连通分支的个数用\(Con(G)\)表示。

树(tree):无环联通图被称为树。

练习题4.1

握手定理

问题引入1:在宴会上一共有\(n\)个人,他们中一些人互相握手,已知每人握手\(a\)次,问握手总次数\(S\)为多少? \(S=\frac{n\times a}{2}\)

问题引入2:在宴会上一共有\(n\)个人,他们中一些人互相握手。已知握手的次数依次为\(\{h_1,h_2,\dots,h_n\}\)次。问握手总次数\(S\)为多少?\(S=\frac{\sum\limits_{i=1}^n h_i}{2}\)

顶点的度:前面已经提到过顶点的度的概念,那么有如下几个显然的结论:

  • \(\deg _G(v)\leqslant |E|\)
  • \(G=P_n\),则\(1\leqslant \deg_G(v)\leqslant 2\)
  • \(G=C_n\),则\(\deg_G(v) = 2\)
  • \(G=K_n\),则\(\deg_G(v)=n-1\)

握手定理(Handshaking theorem, Leonhard Euler 1736):给定无向图\(G=(V,E)\),以下等式成立

\[\sum\limits_{v\in V} \deg_G(v)=2|E| \]

一条边与两个顶点相关联,在对\(\deg_G(v)\)做累加时,每条边被使用到两次。对其他边计数有类似推理。故等式成立。

推论:无向图中,度数为奇数的点一定有偶数个。

图同构(graph isomorphism)

若对图\(G=(V,E)\)及图\(G'=(V',E')\),存在双射函数\(f:V\rightarrow V'\),满足对任意\(x,y\in V\),都有\(\{x,y\}\in E\)当且仅当\(\{f(x),f(y)\}\in E'\)。那么我们称图\(G\)和图\(G'\)是同构的。用符号\(G\cong G'\)表示图同构。

直观地讲,同构图之间,仅仅是顶点的名字不同。

图的计数

问题:以集合\(V=\{1,2,\dots,n\}\)中的元素为顶点构造图\(G=(V,E)\),其中\(E\subseteq {V \choose 2}\)。求问能构成多少个图?

解: \(|{V \choose 2}|={n\choose 2}\)\(K_n\)的边数。每条边可能在图中,也可能不在图中,故以\(V\)为顶点的图共有\(2^{n\choose 2}\)种。

问题:以集合\(V=\{1,2,\dots,n\}\)中的元素为顶点构造图\(G=(V,E)\),其中\(E\subseteq {V \choose 2}\)。求问能构成多少个不同构的图?

例:三个顶点所组成互不同构的图共有\(4\)种。

解:显然,答案不会超过\(2^{n \choose 2}\)。而一个\(n\)个点的图至多与\(n!\)个不同的图同构。于是如果记答案为\(X\),那么有

\[\frac{2^{n\choose 2}}{n!}\leqslant X \leqslant 2^{n \choose 2} \]

然后对上下界进行估值:

\[\begin{aligned} \log_2 2 ^{n\choose 2}&={n\choose 2}=\frac{n^2}{2}(1-\frac{1}{n})\\ \log_2 \frac{2^{n \choose 2 } }{ n !} &= {n \choose 2} - \log_2 n \geqslant {n\choose 2} - \log_2 n ^ n = \frac{n^2}{ 2 }(1-\frac{1}{n}-\frac{2\log_2 n}{n}) \end{aligned} \]

于是就有

\[X=\Theta(2^{\frac{n^2}{2}}) \]

练习题4.2

欧拉图

欧拉图(Eulerian graph):如果从图\(G=(V,E)\)上的某一点\(v\)出发,存在沿图\(E\)中边的一个连续游走(walk),该游走覆盖所有的顶点,且用到\(E\)中每条边一次且仅一次,最后回到点\(v\),则称\(G\)是欧拉图。其中闭合的游走被称为一条欧拉回路(Euler tour)

欧拉图的判定欧拉图定理:图\(G=(V,E)\)是欧拉图当且仅当图\(G\)是连通图,且每个顶点的度数都是偶数。

必要性证明:

欧拉图必然是连通的。

而每个点的度数都是偶数:由于要求是回路,那么对于一个点,进入一次必然会离开一次。

充分性证明:

考虑图\(G\)中最长的边不重复的游走方案\(T=(v_0,e_1,v_1,\dots,e_m,v_m)\)。由于\(T\)已经最大,所以所有与\(v_m\)相关联的边都已含在\(T\)中。且已知\(v_m\)的度数为偶数,如果\(v_m\)出现在游走方案中间\(T=(v_0,e_1,v_1,\dots,e_i,v_m,e_{i+1},\dots,v_m)\),那么中间的每个\(v_m\)\(v_m\)的度数贡献是\(2\)。出现在末端的\(v_m\)\(v_m\)的度数贡献为\(1\)。而又由于\(v_m\)的度数为偶数,则\(v_0=v_m\)。也就是说\(T=(v_m,e_1,v_1,\dots,e_m, v_m)\)。所以\(T\)是回路。

\(T\)不是欧拉回路,由于\(G\)是连通图,所以必然存在\(e=\{u,v\}\)\(e\)不包含在\(T\)中,但又与\(T\)中的某个点\(v=v_i\)相关联。这样的话\(|u,e,v_i,e_{i+1}\dots,e_i,v_i|=|T|+1\)\(T\)的最长性矛盾。所以\(T\)是欧拉回路。

进一步的问题:对图\(G=(V,E)\),是否存在一个连续的游走方案,使\(E\)中的每条边\(e\)在方案中恰好出现一次。对于非欧拉图,若存在则必然不是欧拉回路,这样的游走方案被称为欧拉道路

定理:图\(G=(V,E)\)中存在欧拉道路当且仅当图\(G\)是连通的且或者1、所有顶点度数都为偶数,或者2、除\(2\)个顶点度数为奇数外,其余顶点的度数都是偶数。且度数为奇数的两个点必为欧拉道路的起点和终点。

情况2的充分性证明:

设度数为奇数的两个点为\(u,v\),在\(u,v\)之间增加边\(e=\{u,v\}\),那么\(G+e\)就是欧拉图。这个图的欧拉路径必然会用到边\(e\)。去掉\(e\)后就得到了以\(u,v\)为起点和终点的欧拉道路。

有向欧拉图

有向图的入度(indegree)\(\deg_G^+(v)=|u:(u,v)\in E|\)

有向图的出度(outdegree):$\deg_G^-(v)=|u:(v,u)\in E| $;

chy-2003注:这里的定义似乎同样不能有效地表示重边。

有向图的对称化(symmetrization):给定有向图\(G=(V,E)\),定义\(sym(G)=(V,\overline E)\),其中\(\overline E = \{\{x,y\}:(x,y)\in E \vee (y,x)\in E\}\)

性质:有向图\(G=(V,E)\)含欧拉环(即依边集\(E\)的方向的一个连续游走方案,用到所有的边正好一次)的充分必要条件是\(sym(G)\)是连通图且对\(V\)中所有点\(v\)都有\(\deg_G^+(v)=\deg_G^-(v)\)

证明:同无向图欧拉定理。

编码盘

问题:一个编码盘的底盘可转动且分成\(16\)个相等的扇面。每个扇面上写入\(0\)或者\(1\),顶部四个位置的扇面可见。顺时针读取当前可见扇面的值,为一个\(4\)位二进制输出。试问底盘上的\(16\)个二进制数的序列应如何设置,使得转动编码盘底盘正好能输出所有的\(4\)为二进制编码?

分析:

如果当前的状态为\(a_1a_2a_3a_4\),逆时针方向旋转一个扇面,那么新的输出是\(a_2a_3a_4a_5\)。定义如下点集和有向边:点\((a_{i-1}a_ia_{i+1}),(a_i,a_{i+1},a_{i+2})\),有向边\(a_{i-1}a_ia_{i+1}a_{i+2}=((a_{i-1}a_ia_{i+1}),(a_ia_{i+1}a_{i+2}))\)

不难发现\(|V|=2^3=8\)\(\deg_G^+(v)=\deg_G^-(v)=2\)

5

我们可以画出整个图

6

于是存在有向欧拉回路,如

\[0000,0001,0010,0101,\\1010,0100,1001,0011,\\0110,1101,1011,0111,\\1111,1110,1100,1000\\ \]

于是我们就能得到一种答案:

\(0000101001101111\)

练习题5.1

哈密顿图与Ore定理

背景:\(19\)世纪英国数学家哈密顿(Sir William Hamilton)提出问题:正凸\(12\)面体,把\(20\)个顶点比作世界上\(20\)个城市,\(30\)条棱表示这些城市间的交通路线。问,能否周游整个世界,即从某个城市出发,经过每城市一次且只一次,最后返回出发地。

7

哈密顿回路(Hamiltonian cycle):如果一个经过图上所有点正好一次,则此环被称为哈密顿环。

哈密顿图(Hamiltonian graph):含有哈密顿环的图被称为哈密顿图。

哈密顿道路(Hamiltonian path):如果一条路径经过图上所有点正好一次,则此路径被称为哈密顿道路。

注意:讨论哈密顿图相关的时候一般指简单图。因为重边和自环显然没有用。

判断哈密顿图的充分(不必要)条件

定理[Dirac 1952]\(|G|=n\geqslant 3\),且\(\delta(G)\geqslant \frac{n}{2}\),则图\(G\)一定是哈密顿图。

因为\(\delta(G)\geqslant \frac{n}{2}\),图\(G\)必为连通图。(若不是连通图,则取顶点个数最少的连通分支\(G'\),必有\(\delta(G')<|G'|\leqslant \frac{n}{2}\)。)

\(G\)中最长路径\(P=x_1\dots x_k\)。显然有\(N(x_1)\subseteq P,N(x_k)\subseteq P\)

\(i\in [1,\dots,k-1]\)\(k\leqslant n\),其中

\[\begin{aligned} \left \{ \begin{matrix} \left | i:\{x_i,x_k\}\in E(G)\right | \geqslant \frac{n}{2}\\ \left | i:\{x_1,x_{i+1}\}\in E(G)\right | \geqslant \frac{n}{2} \end{matrix}\right. \end{aligned} \]

如果记第一个集合为\(A\),第二个集合为\(B\),那么显然有\(|A|+|B|>n\)。也就是说存在一个\(i\),使\(x_i\)\(x_k\)相邻且\(x_{i+1}\)\(x_1\)相邻。那么我们构造\(x_1x_{i+1}Px_kx_iPx_1\)是一个环。而由于\(P\)的最大性,\(P\)经过了图\(G\)中所有顶点,所以图\(G\)是哈密顿图。(这一部分证明与欧拉图中类似,不再重复。)

注意:这个定理不是必要条件。

判断哈密顿图的充分(不必要)条件

定理[Ore 1960]:图\(G=(V,E)\)\(|G|=n\geqslant 3\)。对任意不同\(u,v\in V\),若\(u,v\)不相邻,则\(\deg_G(u)+\deg_G(v)\geqslant n\)。满足以上条件的图\(G\)是哈密顿图。

证明:与上一个证明类似,略。

显然,Dirac定理是Ore定理的特例。

注意:这个定理不是必要条件。

引理:图\(G=(V,E)\)\(|G|=n\geqslant 3\)。若存在不相邻的点\(u,v\in V\)\(\deg_G(u)+\deg_G(v)\geqslant n\),则\(G=(V,E)\)是哈密顿图当且仅当\(G'=(V,E\cup\{\{u,v\}\})\)是哈密顿图。

必要性显然。

充分性:(反证法)

\(G'\)中有哈密顿回路而\(G\)中没有,则\(G'\)中的哈密顿回路\(P\)必经过边\(e=\{u,v\}\)

\(P-e\)是以\(u,v\)为始点和终点的哈密顿道路。接下来证明\(\deg_G(u)+\deg_G(v)<n(*)\)

\(\deg_G(u)+\deg_G(v)\geqslant n\),则同Dirac定理的证明,从\(P-e\)可构造不含\(e\)的哈密顿回路,与假设矛盾。

\((*)\)与命题前提矛盾,故假设错误。即\(G\)为哈密顿图。

判断哈密顿图的必要(不充分)条件

定理:如果图\(G=(V,E)\)是哈密顿图,则对所有非空子集\(S\subseteq V\),必然有\(Con(G-S)\leqslant|S|\)

\(C\)是图\(G\)中的一条哈密顿回路,易验证对于\(v\)的每个非空子集\(Con(C-S)\leqslant |S|\)

\(C-S\)\(G-S\)的生成子图,故\(Con(G-S)\leqslant Con(C-S) \leqslant |S|\)

练习题5.2

握手定理的应用(一): Smith定理

定理(Smith):对\(3\)正则图,包含图上任意边的哈密顿回路必有偶数条。

证明:(Thomason 1978)

思路:选取图\(G\)中任意一条边\(e\),构造图\(G'\),使图\(G'\)中的顶点的度数为\(1\)\(2\)。当顶点度数为\(1\)时,能证明原图\(G\)中必有一条含\(e\)的哈密顿回路。由于\(G'\)受到握手定理限制,所以\(G'\)中必然存在第\(2\)个点度数为\(1\)。而因为对应关系,原始图\(G\)中必存在另一条哈密顿回路。

过程:图\(G\)\(3\)正则图,\(e=\{v_1,v_2\}\)是一条固定的边。为了不失一般性,假设原图中存在含有\(e\)的哈密顿回路。

构造图\(G'=(V',E')\)

\(V'\)中的每一个点,代表一条从\(v_1\)开始,以\(e\)为第一条边的哈密顿路径。(由前提假设,知\(V'\)非空。)

接下来构造\(E'\)\(v_P\in V'\)代表哈密顿路径\(P=v_1,v_2,\dots,v_n\)。由于\(v_n\)\(G\)中度数为\(3\),故必存在\(1<k<n-1\)满足\(\{v_k,v_n\}\in E(G)\)。于是可构造另一条路径\(P'=v_1v_2\dots v_kv_nv_{n-1}\dots n_{k+1}\)是哈密顿路径。令\(\{v_P,v_{P'}\}\in E'\)

\(G'\)中任意\(v_P\)的度数至多为\(2\)\(\deg(v_P)=1\)当且仅当原始用到的哈密顿路径实际上是图\(G\)中的一个哈密顿回路。(因为\(v_n\)\(v_1\)相邻,就只能构造出一个\(1<k<n-1\)满足\(\{v_k,v_n\}\in E(G)\)。反之\(\deg(v_P)=2\)

根据握手定理,度数为奇数的点必有偶数个。故必存在另一点\(\deg(v_Q)=1\)

例子:

8

如图,假设我们固定\(e=\{1,2\}\)。一开始获得路径\(12348765(1)\)\(8\)\(5\)相邻,我们可以得到\(12348567\)\(7\)\(3,8\)响铃,能得到\(12348765\)\(12376584(1)\)。前者重复,不再考虑,而后者是另一条哈密顿回路。

握手定理的应用(二):Sperner引理

Sperner引理(平面):已知平面上的一个三角形\(ABC\),任意划分成若干小的不重叠三角形,用红黄蓝三色依次对\(A\)\(B\)\(C\)三个顶点着色。然后这样对剩余顶点着色:

  • \(BC\)边上的点用黄色或者蓝色;
  • \(AB\)边上的点用红色或者黄色;
  • \(AC\)边上的点用红色或者蓝色;
  • 对余下的内部顶点任意着色。

这样必然存在一个三个顶点不同色的小三角形。

Sperner's lemma 的证明:

构造图\(G=(V,E)\)

\(V\):每个闭合的连续平面(小三角形)抽象为一个点,外面的开放平面也抽象为一个点,记为\(v\)

\(E\):两个点之间有一条边,当且仅当原对应平面相邻且相邻边顶点着色为红和蓝。

接下开考虑\(G\)中顶点的度数:

\(V\)\(ABC\)内(非点\(v\))度数非\(0\)的情况:

1、三个顶点分别为红黄蓝;2、三个顶点两红一蓝;3、三个顶点两蓝一红。

其余情况度数均为\(0\)

\(V\)\(ABC\)外的点(点\(v\))的度数就是\(AC\)边上的颜色改变次数。易证其必为奇数。

根据握手定理,\(G\)中必还有度数为奇数的点,即情况1必然发生。

Sperner's lemma的完整形式(sperner 1928):对任意\(n\)维单形体(n-simplex)进行分割并用\(n+1\)中颜色去着色,则任何合适的单形分割着色方案下,都必有一个包含所有不同颜色的单元。\(n=1\)时,是两端颜色不同的线段,\(n=2\)就是上面所述的情况,\(n=3\)时是四面体……

练习题5.3

树的刻画

叶子(leaf):图\(G\)中度数为\(1\)的顶点被称为叶子或者终点(end-vertex)

引理:对任意树\(T\),如果\(|T| \geqslant 2\),则\(T\)必含至少两个终点。

\(T\)中的一条极长路径\(P\),则因为\(T\)中没有环,且\(P\)极长,所以\(P\)的两端即为终点。

树的生长引理(Tree-growing lemma):对图\(G\)及图\(G\)上的叶子节点\(v\)而言,图\(G\)是树当且仅当图\(G-v\)是树。

充分性证明:

由于\(G\)无环,那么\(G-v\)显然也无环。而对图\(G\)中任意不为\(v\)的点对\(x,y\)\(x\)\(y\)的路径不经过点\(v\),所以\(G-v\)连通。

必要性证明:

由于\(\deg(v)=1\),且\(G-v\)无环,那么图\(G\)也无环。

假设加入的边为\(\{u,v\}\),那么对于\(G-v\)任何点\(x\),都有路径\(v\)\(u\)\(x\)可达。所以图\(G\)连通。

树的等价刻画:对于图\(G=(V,E)\)而言,以下称述等价:

  • \(G\)是树。
  • 路径唯一:对任意两点\(u,v\in V\),存在从\(u\)\(v\)的唯一路径。
  • 最小连通图:\(G\)是连通图,且去掉任意一条边后都成为非连通图。
  • 最大无环图:\(G\)不含环,但增加任何一条边所得到的图\(G+e\)(其中\(e\in {V \choose 2}\backslash E\))中含有一个环。
  • Euler方程:\(G\)是连通图,且\(|V|=|E|+1\)

下面证明第1条和第5条等价。

1蕴含5:(归纳法)

连通性显然。当\(|V|=1\)时,结论成立。假设当\(|V|=n\)时成立,当\(|V|=n+1\)时,根据树的生长引理,去掉一个叶子后仍是一棵树。根据归纳假设,这时结论成立。而加回这个点会使点数和边数同时增加\(1\),所以结论假设成立。

5蕴含1:(归纳法)

\(|V|=1\)时,结论平凡。设\(|V|=n\)时结论平凡。当\(|V|=n+1=|E|+1\geqslant 2\)时,根据握手定理,图\(G\)中顶点度数之和为\(2|V|-2\)。故图\(G\)中必然存在度数小于\(2\)的顶点。且图\(G\)是连通图,任何顶点的度数非\(0\),所以存在度数为\(1\)的点,记为\(v\)

考虑\(G'=G-v\),易验证归纳假设条件成立。根据归纳假设,\(G'\)是树。根据树的生长定理,\(G\)也是树。

练习题6.1

有根树同构

有根树(Rooted tree):二元组\((T,r)\)\(T\)表示一棵树,\(r\in V(T)\)表示树上的一个特别顶点称为根(Root)。约定在节点上画向下箭头标明。

对树上的一条边\(\{x,y\}\in E(T)\)。如果\(x\)是出现在从根\(r\)\(y\)的唯一路径上,则称\(x\)\(y\)父亲(Father),相应地称\(y\)\(x\)儿子(son)

一般的图之间,图的同构问题尚无有效的算法;而有根树之间的同构有快速算法。

定义\((T,r)\cong' (T',r')\)当且仅当\(f:V(T)\rightarrow V(T')\)\(T\cong T'\)\(f(r)=r'\)

显然,\(\cong'\)关系严格强于\(\cong\)

思路:将树的比较转化为字符串比较。

字符串比较:字典序(Lexicographic order):对不同的序列\(s=s_1s_2\dots s_n\)\(t=t_1t_2\dots t_m\)。如果\(s\)\(t\)的初始序列(即\(t=st_{n+1}\dots t_m\)),则\(s<t\);如果\(t\)\(s\)的初始序列(即\(s=ts_{m+1}\dots s_n\)),则\(t < s\)。否则令\(i\)\(s_i\neq t_i\)的最小下标,若\(s_i<t_i\),则\(s<t\);若\(s_i>t_i\),则\(s>t\)

过程:对有根树\((T,r)\)如下编码:

R1:所有非根叶节点都赋值为\(01\)

R2:假设点\(v\)的儿子节点为\(w_1,w_2,\dots, w_k\)都已各完成赋值,为\(A(w_i)\),且\(A(w_1)\leqslant A(w_2)\leqslant \dots \leqslant A(w_k)\)。则对\(v\)节点赋值为\(0A(w_1)A(w_2)\dots A(w_k)1\)

根节点\(r\)的编码就是\((T,r)\)的编码,用\(\#(T,r)\)表示。

性质\((T,r)\cong'(T',r')\)当且仅当它们具有相同的编码。

充分性:从有根树同构的定义和编码可证。

必要性:解码。从编码恢复原始的树结构。任意有根树的编码必然有\(0S1\)的一般形式,其中\(S=S_1S_2\dots S_t\)\(S_1\)\(S\)\(0,1\)个数相等的最小前缀,\(S_2\)是第二个\(0,1\)平衡的最小前缀……可以根据此恢复出有根树,且显然这样的有根树必然是同构的。

树同构的判定

一般的树之间的同构也有快速的算法。

对一般树(无根树),找到其中可以用作根的节点,且该节点在任何同构函数下都被保持。

距离(Distance):图\(G\)中的两个顶点\(u,v\)\(dis_G(u,v)\)表示\(u,v\)之间的最短路径的长度。若\(u,v\)不在一个连通分支里,定义\(dis_G(u,v)=\infty\)

偏心率(Excentricity):图\(G\)及图中的顶点\(v\),偏心率定义为:\(ex_G(v)=\max\limits_{u\in G} dis_G(u,v)\)

中心(center):图\(G\)中偏心率最小的顶点集合叫做中心,用符号\(C(G)\)表示。中心可能任意大,例如环和完全图的\(C(G)=V(G)\)

性质:对树\(T=(V,E)\)\(C(T)\)含至多两个顶点,且若\(C(T)=\{x,y\}\),则\(\{x,y\} \in E\)

\(|T|\leqslant 2\),结论显然,否则利用树的特殊性:与树上任意一点\(v\)距离最远的点必然是叶子节点,

\(T\)构造\(T'\)\(T'\)是从\(T\)中删去所有叶子节点。显然对\(T'\)上的点\(v\)\(ex_T(v)=ex_{T'}(v)+1\)。进而\(C(T')=C(T)\)

反复以上过程,直至最后剩下一个顶点(\(C(T)\)是一个顶点)或一条边(\(C(T)\)是两个顶点)。

用树的中心来完成树到有根树的转化:

\(|C(T)|=1\),则中心\(v\)就是根,输出\(\#(T,v)\)

\(|C(T)|=2\)\(C(T)=\{x_1,x_2\},e=\{x_1,x_2\}\)\(T-e\)必然含有正好两个连通分支\(T1,T2\)。不失一般性,设\(x_1\in V(T_1),x_2\in V(T_2)\)。计算\(\#(T_1,x_1),\#(T_2,x_2)\),若\(\#(T_1,x_1)\leqslant \#(T_2,x_2)\),输出\(\#(T,x_1)\),否则输出\(\#(T,x_2)\)

\(\#T\)为以上过程的输出。

性质\(T\cong T'\)当且仅当\(\#T\cong' \#T'\)

证明:与有根树类似。

练习题6.2

生成树计数

生成树(Spanning tree):对连通图\(G=(V,E)\),生成树是包含\(G\)中所有顶点且为树的子图。

问题\(K_n\)的生成树共有多少种?(\(K_n\)为有\(n\)个顶点的完全图。)

特殊情况\(n=2\)时,有\(1\)种生成树;\(n=3\)时,有\(3\)种生成树;\(n=4\)时,有\(4+12=16\)种;\(n=5\)时,有\(5+60+60=125\)种;\(n=6\)时,有\(6+360+120+90+360+360=1296\)种。

Caley定理(Caley's formula)\(K_n\)的生成图个数是\(n^{n-2}\)个。

  • 定义1:函数图(function graph)\(f:V\rightarrow V\)。如下面的函数:
\(v\) 1 2 3 4 5 6
\(f(v)\) 3 4 5 1 2 2

PIC1

不难发现函数与函数图一一对应。当\(|V|=n\)时共有\(n^n\)种不同的函数图。

  • 定义2:脊椎动物(Vertebrate)骨骼标本:三元组\((T,h,b)\)被称为骨骼标本若其中\(T\)是一棵树且\(h,b\in V\)\(h\)被称为颈椎骨,\(v\)被称为尾椎骨。注意:\(h,b\)除了必须是树上节点外没有任何要求(可重合)。

  • 定义3:脊椎(Spine):出现在从颈椎骨到尾椎骨的路径上的点被称为脊椎。

  • 证明过程:

    \(T_n\)表示\(K_n=(V,E)\)的生成树个数。每一棵树对应\(n^2\)种骨骼标本。我们希望证明骨骼标本与\(V\)上的函数图一一对应,有\(n^n\)种。如果如此,那么\(T_n=\frac{n^n}{n^2}=n^{n-2}\)。接下来证明骨骼标本与\(V\)上的函数图一一对应。

    从骨骼标本对应到函数图:

    让脊椎上的点被从小到大排序后对应位置的点指向。也就是说,如果依次有点\(8,3,2,19,4,6\),那么就有如下对应关系:

    \(v\) 2 3 4 6 8 19
    \(f(v)\) 8 3 2 19 4 6

    (也就是说上面一行是下面一行排序后的结果。)这样得到了若干个环。然后再将剩余的点向环连边。如果上面的例子中还有\(e_1=\{1,2\}\)\(e_2=\{5,1\}\),那么\(f(5)=1\)\(f(1)=2\)

    这样,骨骼标本就与函数图一一对应了。

    接下来证明函数图与骨骼标本一一对应:

    显然函数图中必然有环。我们找出所有的环,然后将环上的点如上表这般从小到大写在第一行,然后根据函数图中的对应关系写出第二行。那么第二行从左至右就是骨骼标本的颈椎骨到尾椎骨了。最后加入剩下的点,就可以得到与之对应的骨骼标本。

    这样一来,我们证明了骨骼标本与函数图一一对应。所以\(T_n=n^{n-2}\)成立。

最小生成树

带权图(weighted graph)\(G=(V,E,w)\)是带权图,其中\((V,E)\)是无向图,\(w\)是对边的赋值的集合,即边的权重。

有时使用\(w(G)\)表示\(\sum\limits_{e\in E} w(e)\)

最小生成树(Minimum spanning tree):给定带权图\(G\),最小生成树是\((V,E)\)的生成树中代价最小的树。最小生成树不一定唯一。

Caley定理(Caley's formula)\(n\)个顶点能构成的不同生成树共有\(n^{n-2}\)种。

Kruskal算法

  • 输入:连通带权图\(G_w=(V,E,\alpha)\)
  • 输出:最小生成树\(T\)
  • 算法流程:

flow1

  • 正确性证明:

每次加边减少一个连通分支,而原图是连通图,所以\(n-1​\)次之后就变成了一个连通分支,算法结束。而对于任何生成树\(T_0^*​\),用\(e=\{u,v\}​\)表示被算法加入的第一条不在\(T_i^*​\)中的边。把\(e​\)加入\(T_i^*​\)必然产生环。\(T_i^*​\)\(u​\)\(v​\)的路径上必然存在一条不在\(T​\)中的边\(e'​\),且\(w(e')\geqslant w(e)​\)。更新\(T_{i+1}^*=(T_i^*\{e'\})\cup \{e\}​\)。那么显然\(w(T_{i+1}^*)\leqslant w(T_i^*)​\),最终能得到\(T\lhd T_{i+1}^*​\)。正确性得证。

Prim算法

  • 算法流程:

flow2

  • 正确性证明:

显然算法会在有限步后结束,因为每一步我们都减少了一个连通分支。而由于每次加入的边跨两个集合,所以一定不会有环。算法的过程是在不断地生长一棵树,所以输出一定是一棵树。那么我们只需要证明这棵树是最小生成树就好了。

任何一棵原图的生成树\(T_0^*\)。用\(e=\{u,v\}\)表示被算法加入的第一条不在\(T_i^*\)中的边。把\(e\)加入\(T_i^*\)必然有环,\(T_i^*\)\(u\)\(v\)的路径上必然存在一条不在\(T\)中的边\(e'\),且\(w(e')\geqslant w(e)\)。更新\(T_{i+1}^*=(T_i^*\{e'\})\cup \{e\}\)。那么显然\(w(T_{i+1}^*)\leqslant w(T_i^*)\),最终能得到\(T\lhd T_{i+1}^*\)。正确性得证。

练习题6.3

网络流

基本概念

流网络(Flow network)\((G,s,t,c)\),其中\(G=(V,E)\)是有向图,源点(Source)\(s\),汇点(Sink)\(t\)和容量函数(Capacity function):\(\forall e\in E,c(e)\in R,c(e)>0\)

割(Cut):顶点集\(V\)被划分为两个集合\(A,B\),其中\(s\in A, t \in B\)。常用\(\{A,B\}\)表示割。

容量(Capacity):从集合\(A\)到集合\(B\)的边的容量之和。\(c(A,B)=\sum\limits_{u\in A, v \in B} c(u,v)\)

最小割(Min-cut)问题:寻找容量最小的割。

流(Flow):给定流网络\((G,s,t,c)\),流函数\(f:V\times V\rightarrow R\)满足如下条件:

  • \(f(u,v)\leqslant c(u,v)\)(Capacity constraint,流量限制)
  • \(f(u,v)=-f(v,u)\)(Skew symmetry,对称性)
  • \(\sum\limits_{v\in V}f(u,v)=0\)对任意\(v\in V\backslash\{s,t\}\)成立(Flow conservation,流量平衡)
  • 一个流的值被定义为从源点出发的流量之和\(|f|=\sum\limits_{v\in V\backslash \{s\}}f(s,v)\)

最大流(Max-flow)问题:寻找值最大的流。

对流函数\(f\),经过割\(\{A,B\}\)的流用\(f(A,B)\)表示:\(f(A,B)=\sum\limits_{u\in A,v\in B}f(u,v)\)

同时,\(f(u,B)\triangleq f(\{u\},B)\)\(f(A,v)\triangleq f(A,\{v\})\)

性质1:对给定流网络\((G,s,t,c)\)上的任意割\(\{X,Y\}\)以及流\(f\)\(|f|=f(X,Y)\)

证明:对\(|X|\)做归纳。

\(X=\{s\}\)时,由流的定义,结论成立。假设对割\(\{X,Y\}\)结论成立。对任意\(w\in Y\backslash \{t\}\),考察新割\(\{X',Y'\}=\{X\cup \{w\},Y\backslash \{w\}\}\)

\[\begin{aligned} f(X',Y')&=f(X,Y)+f(w,Y)-f(X,w)-f(w,w)\\ &=f(X,Y)+f(w,Y)+f(w,X)-0\\ &=f(X,Y)+f(w,V)\\ &=f(X,Y)+0\\ &=|f| \end{aligned} \]

上述结论同样说明:

\[\begin{aligned} |f|&=\sum\limits_{v\in V\backslash \{s\}}f(s,v )\\ & = f(s,V\backslash \{s\})\\ & = f(V\backslash \{t\},t)\\ & = \sum\limits_{v\in V\backslash \{t\}}f(v,t) \end{aligned} \]

性质2:最大流值小于等于最小割容量。

证明:对流函数\(f\),对任意\(s-t\)\(\{A,B\}\)

\[\begin{aligned} |f|&=f(A,B)\\ &=\sum\limits_{u\in A, v\in B}f(u,v)\\ &\leqslant \sum\limits_{u\in A, v\in B,f(u,v)\geqslant 0}f(u,v)\\ &\leqslant \sum\limits_{u\in A, v\in B} c(u,v)\\ &=c(A,B) \end{aligned} \]

最大流最小割定理

剩余图(Residual graph)

对于流网络\((G,s,t,c)\),其中\(G=(V,E)\)。定义:

  • 原始边\(e=\{u,v\}\in E\),剩余边(Residual edge)$e={v,u} $。

  • 关于流\(f\)的剩余容量(Residual Capacity):

    \[\begin{aligned} c_f(e)=\left\{\begin{matrix} c(e)-f(e) & if\,\,\,\,e\in E\\ f(e) & if\,\,\,\,e^R\in E \end{matrix}\right. \end{aligned} \]

  • 剩余图:\(G_f=(V,E_f)\):关于流\(f\)的剩余流量为正的剩余边,及相应正剩余容量。

    即:\(E_f=\{e:f(e)<c(e)\}\cup\{e^R:f(e)>0\}\)

定义流的加法\(f\)\(G\)上的流,\(f'\)是关于流\(f\)的剩余图\(G_f\)上的流,对所有\(u,v\in V\),定义

\((f+f')(u,v)=f(u,v)+f'(u,v)\)

性质\(f\)\(G\)上的流,\(f'\)是关于流\(f\)的剩余图\(G_f\)上的流,则\(f+f'\)也是\(G\)上的流。

证明:定义\(g=f+f'\)

容量限制:

\[\begin{aligned} g(u,v)&=f(u,v)+f'(u,v)\\ &\leqslant f(u,v)+(c(u,v)-f(u,v))\\ &=c(u,v) \end{aligned} \]

对称性:

\[\begin{aligned} g(v,u)&=f(v,u)+f'(v,u)\\ & =-f(u,v)-f'(u,v)\\ &=-(f(u,v)+f'(u,v))\\ &=-g(u,v) \end{aligned} \]

流量平衡:

\(\forall v\in V\backslash \{s,t\}\),有\(\sum\limits_{v\in V}f(u,v)=0,\sum\limits_{v\in V}f'(u,v)=0\)。故

\[\begin{aligned} \sum\limits_{v\in V}g(u,v)=\sum\limits_{v\in V}(f(u,v)+f'(u,v))=0 \end{aligned} \]

扩流路径(Augmenting Path):对流网络\(G\)和流\(f\),剩余图\(G_f\)\(s\)\(t\)的简单路径\(P\)

流量瓶颈(Bottleneck capacity):扩流路径\(P\)各边在\(G_f\)中的最小剩余容量值,记为\(b\)

扩流:沿路径\(P\)扩流(\(Augment(f,P)\)):对所有\(e\in P\),如果\(e\in E\)\(f^+(e)=f(e)+b\);如果\(e^R\in E\)\(f^+(e)=f(e)-b\)。对所有\(e \not \in P\)\(f^+(e)=f(e)\)

最大流最小割定理(Max-flow min-cut theorem):对流网络\((G,s,t,c)\)以及该网络上的流\(f\),如下三个命题互相等价:

1、存在一个割\(\{A,B\}\),有\(c(A,B)=|f|\)

2、流\(f\)是原流网络中的一个最大流;

3、不存在相对于流\(f\)的扩流路径。

证明:

\(1\rightarrow 2\):对任意割\(\{A,B\}\)和流\(g\),有\(|g|\leqslant c(A,B)\)。故\(c(A,B)=|f|\)蕴含\(|g|\leqslant |f|\),即\(f\)是最大流。

\(2\rightarrow 3\):如果存在相对于流\(f\)的扩流路径,则可沿\(P\)扩充,得到一个值更大的流。

\(3\rightarrow 1\):若命题\(3\)成立,设\(A\)是从\(s\)出发沿剩余图\(G_f\)可达到的所有点,\(B=V\backslash A\)。则\(G_f\)中不含从\(A\)\(B\)的路径,故原图从\(B\)\(A\)的边的流为\(0\)。类似的,原图上从\(A\)\(B\)的所有边\(e\),都有\(f(e)=c(e)\)。此时\(c(A,B)=f(A,B)=|f|\)

Ford-Fulkerson最大流算法

flow3

分析:若容量函数取值为整数,设\((G,s,t,c)\)的最大流为\(f^*\),则Ford-Fulkerson算法运行过程中至多迭代\(|f^*|\)次。

改进的算法

\((G,s,t,c)\)\(G=(V,E)\)\(n=|V|\)\(m=|E|\)

  • Edmonds-Karp Algorithm: \(O(nm^2)\)。要点:使用最短路径算法来选择下一条扩流路径。
  • Dinic's Algorithm: \(O(n^2m)\)。要点:改进Edmonds-Karp Algorithm,使用了Blocking flow(而不是Augment path)来选择扩流方案。

应用:二分图匹配(略)。

练习题6.4

posted @ 2019-08-26 19:54  chy_2003  阅读(3151)  评论(0编辑  收藏  举报