目录
- 前言
- 引言
- 序的关系
- 组合数计数
- 函数估计
- 图论导引
- 树
- 网络流
更好的阅读体验可以到我的github下载PDF。
前言
本笔记由chy-2003整理于上海交通大学发布于coursera的离散数学课程。讲师龙环。
不保证内容十分全面,但至少与课程内容保持一致,同时添加或删减了某些样例和引入。
定理或命题下方的块没有特殊标注即为证明。
如果发现文章内容错误,请联系 [email protected]。
本笔记由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。
\(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
,那么\(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}\)。
- 图示法:
- 环(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
,那么\(|A_i\cap A_j |=(n-2)!\)。如果\(i_1 ,那么\(|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
如果\(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
时,\(|A_i\cap A_j|=\frac{n}{p_ip_j}\)。当\(i_1 时,\(|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
显然,\({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):
阶(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\}\)。
顶点的度:给定图\(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)。
除显式声明外,一般图为无向图。
子图:定义已有图\(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\)。
我们可以画出整个图
于是存在有向欧拉回路,如
\[ 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\)条棱表示这些城市间的交通路线。问,能否周游整个世界,即从某个城市出发,经过每城市一次且只一次,最后返回出发地。
哈密顿回路(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)
。 若\(\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
满足\(\{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
满足\(\{v_k,v_n\}\in E(G)\)。反之\(\deg(v_P)=2\)。 根据握手定理,度数为奇数的点必有偶数个。故必存在另一点\(\deg(v_Q)=1\)。
例子:
如图,假设我们固定\(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,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 不难发现函数与函数图一一对应。当\(|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\)。
- 算法流程:
- 正确性证明:
每次加边减少一个连通分支,而原图是连通图,所以\(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算法:
- 算法流程:
- 正确性证明:
显然算法会在有限步后结束,因为每一步我们都减少了一个连通分支。而由于每次加入的边跨两个集合,所以一定不会有环。算法的过程是在不断地生长一棵树,所以输出一定是一棵树。那么我们只需要证明这棵树是最小生成树就好了。
任何一棵原图的生成树\(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)
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最大流算法:
分析:若容量函数取值为整数,设\((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)来选择扩流方案。
应用:二分图匹配(略)。