更好的阅读体验可以到我的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 ightarrow Y)为集合(X)到集合(Y)的一个映射。对于任意(xin X),都有唯一一个(yin Y)与之对应。
单射:对于(forall yin Y)最多只有一个(xin X)与之对应。
满射:对于(forall yin Y)都有至少一个(xin 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)))
(Adiagdown B={1,3}) ((A-B))
(A imes B={(1,2),(1,4),(2,2),(2,4),(3,2),(3,4)})
(Aoplus B={1,3,4})。
(overline A ={4})。
关系
对于集合(A),关系(Rsubseteq A imes A),如果((x,y)in R),就可以记做(xRy)。关系可能有以下性质:
- 自反性: 对于(forall xin A),都有(xRyxRx)。
- 对称性: 对于(forall x,y in A),如果(xRy),就有(yRx)。
- 反对称性: 对于(forall x,yin A),如果有(xRy)且(yRx),那么(x=y)。
- 传递性: 对于(forall x,y,zin A),如果(xRy)且(yRz),那么(xRz)。
一些特殊关系:
- 等价关系: 关系(R)具有自反性、对称性、传递性。例如(equiv _6subseteq N imes N)。
- 偏序关系: 关系(R)具有自反性、反对称性、传递性。例如(leqslant subseteq N imes N)。
关系的运算
关系是一个集合,所以支持集合有关的运算。而关系还支持合成运算。我们定义(Rsubseteq A imes B),(Ssubseteq B imes C),那么合成运算(Rcirc S={(x,z):xin A wedge zin C wedge exists yin 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)。
等价类
有等价关系(Rsubseteq A imes A),定义(R[x]={yin A:xRy})。(R[x])被称为元素(x)在关系(R)下的等价类。例如对于关系(equiv_6subseteq N imes N),(equiv_6[0]={0,1,2,3,dots})。
性质:
如果(Rsubseteq A imes A)是等价关系,那么有
(ullet) 对于(forall xin A),(R[x])非空。
对于(forall xin A),(xin R[x])。所以对于(forall xin A),(R[x])非空。
(ullet) 对于(forall x,yin A),(R[x]=R[y])或(R[x]cap R[y]=emptyset)。
若(R[x]cap R[y]=emptyset),那么结论成立。
若(zin R[x]cap R[y] eq emptyset),即(xRz)且(yRz)。那么根据对称性有(zRx)。对于(forall x'in R[x]),即(xRx'),根据传递性有(zRx')。又根据对称性有(yRx')。即(x'in R[y])。( herefore R[x]subseteq R[y])。
同理(R[y]subseteq R[x])。( herefore R[x]=R[y])。
综上所述,结论成立。
划分
对于集合(A),如果(pi={B_1,B_2,dots,B_n})满足
- 对于(forall 1leqslant i leqslant n),有(emptyset eq B_i subseteq A)。
- 对于(forall 1leqslant i < j leqslant n),(B_icap B_j=emptyset)。(不相交性)
- (B_1cup B_2cup dots cup B_n=A)。(覆盖性)
则称(pi)是(A)的一个划分。
如果(Rsubseteq A imes A)是一个等价关系,则等价类集合(Pi={R[x]:xin A})是集合(A)在(R)关系下的划分。
练习题1.1
序的关系
偏序集
定义偏序集((S,R)),(R)是集合(S)上的偏序关系。
常用符号
偏序(preccurlyeq, leqslant)
严偏序(prec, <)
逆序(succcurlyeq, >)
线性序
如果偏序集((S,R)),(forall x,yin 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 imes S_2 imes dots imes 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 iin{1,2,dots,n}(forall j<i)a_j=b_jwedge 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) ]设(xleqslant_{lex} yleqslant_{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)。综上,有(xleqslant_{lex} y)。
其余部分略。
立即前元
定义:对于偏序集((S,preccurlyeq)),元素(x,y),若(xprec y wedge urcorner(exists zin s)(xprec zprec y)),那么称(x)是(y)的立即前元,记为(xlhd y)。
性质:1、(lhd)不具有传递性。2、多个元素可能有同一立即前元。3、一个元素可能有多个立即前元。
例:((N,|))。
哈斯图(Hasse diagram)
给定偏序集((S,preccurlyeq)),(S)为有限集。只保留立即前元关系对应边。若(xlhd y),则代表(y)的点在代表(x)的点上方。可以通过传递闭包恢复原图。
偏序集上的极大元、极小元、最大元、最小元
- 极大元(Maximal element) (urcorner(exists xin S)x succ a)。
- 极小元(Minimal element) (urcorner(exists xin S) x prec a)。
- 最大元(Largest element) (forall x in S, x preccurlyeq a)。
- 最小元(Smallest element) (forall x in S,apreccurlyeq x)。
一些性质
- 极大元、极小元可能不止一个,一个元素可能既是极大元,又是极小元。
- 可能不存在最大元、最小元。
- 最大元一定是极大元,最小元一定是极小元。而极小元不一定是最小元,极大元不一定是最大元。
- 如果(S)是无限集,那么极大元、极小元、最大元、最小元不一定存在。
- 如果(S)是有限集,那么最大元、最小元不一定存在,极大元、极小元一定存在。
(S)为有限集时,极小元存在性证明
取(forall x_0 in S)。如果(x_0)是极小元,那么证毕。如果(x_0)不是极小元,找到(x_1prec x_0),对(x_1)重复以上讨论。而由于(S)是有限集,那么情况(2)在有限步后不成立,情况(1)成立。
线性扩充定理
线性扩充:对于有限集((S,preccurlyeq)),存在一个线性序集((S,preccurlyeq ')),满足(xprec y ightarrow xpreccurlyeq' y)。
证明:
当(|S|=1)时,((S,preccurlyeq')=(S,preccurlyeq))即可。当(|S|>1)时,取((S,preccurlyeq))中的一个极小元(x_0),(S'=Sackslash {x})。易证得((S',preccurlyeq))是一个偏序集,且(|S'|<|S|)。根据归纳假设,存在((S',preccurlyeq))的线性扩充((S',preccurlyeq ''))。构造((S,preccurlyeq '))为(preccurlyeq '=preccurlyeq '' igcup {(x_0,y):yin S})。易证((S,preccurlyeq'))是线性序列。
一般线性扩充并不唯一。
练习题1.2
链与反链
对于有限偏序集((S,preccurlyeq)),(Asubseteq S),(A)被称为
- 链(Chain): 如果对于任意(x,yin A), $x preccurlyeq y (或)ypreccurlyeq x $。
- 反链(Antichain): 如果对任意(x,yin A), (x ot preccurlyeq y)。反链也称为独立集(Independent set)。
还可以这么定义:
- 可比较(Comparable): 若(xpreccurlyeq y)或(y preccurlyeq x)。
- 不可比较(Incomparable): 若(x ot preccurlyeq y)且$ y ot preccurlyeq x $。
- 链:可比较元素的集合。
- 反链:不可比较元素的集合。
最大独立集和最长链
给定有限偏序集$P=(S,preccurlyeq) $。
- $alpha (P) = max { |A| : A (是)P(上的反链(独立集))}$。
- (omega(P)=max{|A|:A)是(P)上的链(})。
Mirsky定理:给定有限偏序集(P=(S,preccurlyeq)),将(S)划分成若干个不相交的反链集,取最小划分数(t),即
则(t=omega(P))。
先证明(omega(P)leqslant t)。
(S=A_1cup A_2cup dots cup A_t),其中(A_1,A_2,dots,A_t)为不相交的反链划分。
$Csubseteq S (是)P(中任意一条链,有)|Ccap A_i|leqslant 1$。
(|C|=|Ccap S|=|Ccap(A_1cup A_2cup dots cup A_t)| = |(Ccap A_1)cup(Ccap A_2)cup dots cup (C cap A_t)|leqslant t)。
( herefore omega(P)leqslant t)。
然后证明(t leqslant omega( P ))。
令(A_1)是(S)的极小元集合,(A_{i+1}=Sackslash (A_1cup A_2cup dotscup A_i))的极小元集合。
每一个(A_i)都是一个反链(独立集)。有限步后(A_1cup A_2cup dots cup A_m),由(t)的最小性,(t leqslant m)。只需证明(mleqslant omega(P))。
任取(x_min A_m),由构造,得(exists x_{m-1}in A_{m-1}),使得(x_{m-1}prec x_m)。以此类推,存在序列(x_1prec x_2 prec dots prec x_m)。( herefore m leqslant omega(P))。
( herefore t leqslant omega( P ))。
证毕
推论1:(alpha(P) imes omega(P) geqslant |S|)。
(P=A_1cup A_2cup dots cup A_t),(t=omega(P)),(|A_i|leqslant alpha(P))。
$|S|=|A_1|+|A_2|+dots+|A_t|leqslant alpha(P) imes 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):$ipreccurlyeq jLongleftrightarrow (ileqslant j)wedge (x_i leqslant x_j) $。
可以证明((I,preccurlyeq))是偏序集。
由于推论2,若$omega(I,preccurlyeq ) > n (:非递减子序列)x_{i_1}leqslant x_{i_2}leqslant dotsleqslant 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),且(ngeqslant 0,mgeqslant 1)。从集合(N)到集合(M)所有可能的函数(f:N ightarrow M)共有(m^n)个。
对(n)做数学归纳。当(n=0)时,(f=emptyset)。(f)唯一。此时(m^n=1)成立。假设(n=k)时结论成立。当(n=k+1)时,取(forall a in N),则(f:N ightarrow M)可以看做如下两个部分的组合:
1、确定(f(a)in M)即(f)函数在(a)上的值(f(a))。(f(a))的取值共有(m)中可能。
2、确定(f':Mackslash {a} ightarrow M)。根据归纳假设,(f')有(m^{n-1})种可能。
故(f:N ightarrow M)共有(m imes m^{n-1}=m^n)种可能。
命题2:集合(N)的大小为(n),集合(M)的大小为(m),且(ngeqslant 0),(mgeqslant 0)。从集合(N)到集合(M)所有可能的单射函数(f:N ightarrow M)的个数为(m imes (m-1) imes dots imes (m - n + 1 )=prodlimits_{i=0}^{n-1} (m-i))。
对(n)做数学归纳。当(n=0)时,(f=emptyset)。(f)单射且唯一。此时公式成立。假设(n=k)时结论成立。当(n=k+1)时,取(forall a in N),则(f:N ightarrow M)可以看做如下两个部分的组合:
1、确定(f(a)in M)即(f)函数在(a)上的值(f(a))。(f(a))的取值共有(m)中可能。
2、确定(f':Mackslash {a} ightarrow Mackslash{f(a)})。根据归纳假设,(f')有((m-1)dots(m-n+1))种可能。
故(f:N ightarrow M)共有(m imes (m-1) imes dots imes (m - n + 1 )=prodlimits_{i=0}^{n-1} (m-i))种可能。
练习题2.1
简单应用:子集计数,置换计数
命题3:集合(X)含有(n)个元素(ngeqslant 0)。则(X)一共有(2^n)个子集。
方法一:数学归纳法(略)
方法二:
考虑(X)的任意子集(A),定义函数(f_A:X ightarrow {0,1})为(egin{aligned} f_A(X)= left { egin{matrix} 1 & if\,\,xin A \ 0 & if\,\,x ot in A end{matrix} ight . end{aligned})。(f_A)叫集合(A)的特征函数。如果可以验证(图示后显然成立)(X)的子集与函数(f_A)一一对应,那么就可以得到(X)的子集个数与从(x)到({0,1})的函数个数相等,为(2^n)个。(命题1)
置换:集合(X)到其自身的双射函数被称为一个置换。
置换的表示:
- (p:X ightarrow X)是一个双射函数。
- 矩阵表示:如果集合(X)是有限集,它包含的元素({x_1,x_2,dots,x_n}),则函数(p)可以表示为(egin{aligned}left ( egin{matrix}x_1 &x_2&dots&x_n\p(x_1)&p(x_2)&dots&p(x_n)end{matrix} ight ) end{aligned})。如果(x_1,x_2,dots,x_n)固定,那么可以用一行表示为(egin{aligned}left(egin{matrix}p(x_1) &p(x_2)&dots&p(x_n)end{matrix} ight )end{aligned})。例如(egin{aligned}p=left (egin{matrix}1&2&3&4&5&6&7\4&5&3&2&6&7&1 end{matrix} ight )end{aligned})可以表示为(egin{aligned}p=left(egin{matrix}4&5&3&2&6&7&1end{matrix} ight)end{aligned})。
- 图示法:
- 环(cycles)表示:(p=((1,4,2,5,6,7)(3)))。
可以证明对于有限集合上的任一置换:1、图示法下表达成互不相交的环(独立子环);2、除独立子环内点的顺序不一样外,环表示唯一。
置换的计数:阶乘
集合(X)的大小为(n)(即(|X|=n)),则(X)上的置换一共有$n imes (n-1) imes dots imes 2 imes 1 $个。证明:类似于命题2,略。
(n)的阶乘(n factorial):(n!=n imes(n-1) imes dots imes 2 imes 1 =prodlimits_{i=1}^n i)。
练习题2.2
二项式定理、多项式定理
问题引入:已知集合(X)的大小为(n)(即(|X|=n)),(ngeqslant kgeqslant 0)。(X)的所有子集中正好含有(k)个元素的子集一共有多少个?例:(X={a,b,c},k=2)。
常用符号:$X choose k (和)| {X choose k} |(。例中){Xchoose k}={{a,b},{a,c},{b,c}}(,)|{Xchoose k }|=3$。
命题4 :从含(n)个元素的集合(X)中抽取含(k)个元素((ngeqslant kgeqslant 0))的子集。所有(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 } ight | $。
[ herefore left | {X choose k } ight |=frac{n(n-1)dots(n-k+1)}{k!} ]
二项式系数:(|X|=ngeqslant k)均为非负整系数,定义二项式系数为
命题5:(mgeqslant rgeqslant 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)个为球。
性质:
- ({nchoose k}={nchoose n-k})
- ({n-1 choose k-1}+{n-1choose k}={n choose k})
- (sumlimits_{i=0}^n{n choose i}^2={2n choose n })
对于第三点的证明:注意到(sumlimits_{i=0}^n{nchoose i}^2=sumlimits_{i=0}^n{nchoose i}{nchoose n - i})。而(2n choose n)可理解为1、直接从(2n)个元素选(n)个;2、前(n)个元素里选(i)个,后(n)个元素里选(n-i)个。
二项式定理(Binomial Theorem):对任意非负整数(n)如下等式成立
略
当(x=1)时,得到
当(x=-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),以及任意自然数(ngeqslant 1),如下等式成立:
略(归纳法)
练习题2.3
容斥原理
例:(|Fcup P|=|F|+|P|-|Fcap P|),(|Scup Fcup P|=|S|+|F|+|P|-|Scap F|-|Scap P|-|Fcap P|+|Scap Fcap P|)。
容斥定理(Inclusion-exclusion principle):对于任意有限集合(A_1,A_2,dots,A_n),有
数学归纳法:
(n=2)时成立。假设对(n-1)成立,则
[egin{aligned} left | igcup_{i=1}^n A_i ight | &= left | left ( igcuplimits_{i=1}^{n-1}A_i ight )igcup A_n ight |\ &=left | igcuplimits_{i=1}^{n-1}A_i ight |+ left | A_n ight | - left | left ( igcuplimits_{i=1}^{n-1} A_i ight )igcap A_n ight | \ & = left | igcuplimits_{i=1}^{n-1}A_i ight |+left | A_n ight |- left | igcuplimits_{i=1}^{n-1}left(A_icap A_n ight) ight | end{aligned} ]其中$ left | igcuplimits_{i=1}^{n-1}A_i ight |(和)left | igcuplimits_{i=1}^{n-1}left(A_icap A_n ight) ight |$可由归纳假设推出。
应用1:错排
任给一个(n),求出(1,2,dots,n)的错排个数(D(n))共有多少个?
解:用(S_n)表示所有({1,2,dots,n})上的排列,则(|S_n|=n!)。令(A_i={piin S_n:pi(i)=i}),那么就有(D(n)=n!-|A_1cup A_2cup dots cup A_n |)。
可以发现(|A_i|=(n-1)!),如果(i<j),那么(|A_icap A_j |=(n-2)!)。如果(i_1<i_2<dots<i_k),那么(|A_{i_1}cap A_{i_2}capdotscap A_{i_k}|=(n-k)!)。
根据容斥原理:
[|A_1cup A_2cupdotscup A_n |=sumlimits_{k=1}^n(-1)^{k-1}{n choose k}(n-k)!=sumlimits_{k=1}^n(-1)^{k-1}frac{n!}{k!} ]故(D(n)=n!(1-frac{1}{1!}+frac{1}{2!}-dots+(-1)^nfrac{1}{n!}))。
特别的,(limlimits_{n ightarrow infty}D_n=frac{n!}{e})。
应用2:欧拉函数
欧拉函数(phi):给定自然数(n),欧拉函数(phi(n))定义为不超过(n)且与(n)互质的自然数的个数。即
解:根据整数分解定理,(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$。
如果(1leqslant m < n),且(m)与(n)不互素,则必存在某个(1leqslant ileqslant r)有(p_i|m)。令(A_i={min {1,2,dots,n}:p_i|m}),则(phi(n)=n-|A_1cup A_2cup dots cup A_r|)。
可以发现(|A_i|=frac{n}{p_i})。当(i<j)时,(|A_icap 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 ightarrow R)是两个从自然数到实数的单变量方程。(f(n)=O(g(n)))表示存在常数(n_0)和(c),使得对所有(ngeqslant n_0),不等式(|f(n)|leqslant c imes g(n))成立。
直观地讲,(f)的增长不比(g)快很多。即(limlimits_{n ightarrow} frac{f(n)}{g(n)} ot ightarrow infty)。
例子:(100000=O(1)),((7n^2+6n+1)(n^3+4)=O(n^5)),({nchoose 2}=n(n-1)/2=frac{1}{2}n^2+O(n)=O(n^2));
(0<alphaleqslant eta Rightarrow n^alpha = O(n^eta)),(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))) | (limlimits_{n ightarrow infty}frac{f(n)}{g(n)} ot ightarrow infty) | (f)的增长不比(g)快很多 |
小(o)符号 | (f(n)=o(g(n))) | (limlimits_{n ightarrowinfty}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) hicksim g(n)) | (limlimits_{n ightarrowinfty}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}=sumlimits_{i=1}^nfrac{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})。
同时有:
而(G)的最后一项(G_t)下表(t=lfloor log_2 n floor+1)。
练习题3.1
估值初步:阶乘估值
极点估值((ngeqslant 2)):
进一步优化:
高斯估值:
算数-几何均值不等式(Arithmetic-geometric mean inequality):
那么上界:
同时,我们容易验证有
那么下界:
欧拉数(Euler number):(e=2.718281828dots)
对于(xin R),有(1+xleqslant e ^ x)。最终我们会得到(e(frac{n}{e})^nleqslant n! leqslant en(frac{n}{e})^n)。
证明:上界(归纳法)
当(n=1)时,(1geqslant 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 imes e(frac{n-1}{n})^n)。
而(e(frac{n-1}{n})^n=e(1-frac{1}{n})^nleqslant e(e^{-frac{1}{n}})^n=1)。所以结论成立。
证明:下界(归纳法)
当(n=1)时,(1leqslant 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 imes 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}=eleft((1+frac{1}{n-1})^{n-1} ight)^{-1}geqslant eleft((efrac{1}{n-1})^{n-1} ight)^{-1}=e imes e ^{-1} = 1)。
结论成立。
Stirling公式:(n! hicksim sqrt{2pi n}(frac{n}{e})^n),即(limlimits_{n ightarrow infty }frac{sqrt{2pi n}(frac{n}{e})^n}{n!}=1)。
估值初步:二项式系数估值
显然,有({n choose k}leqslant n ^ k)。当(ngeqslant k > i geqslant 0)时(frac{n-i}{k-i}geqslant frac{n}{k}),故({nchoose k}=prodlimits_{i=0}^{k-1}frac{n-i}{k-i}geqslant (frac{n}{k})^k)。
二项式定理:对(ngeqslant 1,1leqslant k leqslant n),取(0<x<1),有({nchoose 0}+{n choose 1}x+dots+{nchoose n}x^n=(1+x)^n)。
显然,({nchoose 0}+{nchoose 1}x+dots+{n choose k}x^k leqslant (1 + x)^n),故(frac{1}{x^k}{nchoose 0}+frac{1}{x^{k-1}}{nchoose 1}+dots+{nchoose k}leqslant frac{(1+x)^n}{x^k})。
故({nchoose 0}+{nchoose 1}+dots+{n choose k}leqslant frac{(1+x)^n}{x^k})。取(x=frac{k}{n}),因为(1+xleqslant e ^x),
有({nchoose 0}+{n choose 1}+dots+{nchoose k}leqslant (1+frac{k}{n})^n(frac{n}{k})^kleqslant (e^{frac{k}{n}})^n(frac{n}{k})^k=(frac{en}{k})^k)。
所以({nchoose k}leqslant{nchoose 0}+{nchoose 1}+dots+{nchoose k}leqslant (frac{en}{k})^k)。
直接带入Stirling公式可以得到更好的结果。
图论导引
基本定义
图:图(G)是一个有序对((V,E)),其中(V)是一个集合,被称为顶点集,(E)是一组由二元(V)元素组成的集合,称为边集,即(Esubseteq {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),vin 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)。
图上基本操作:
- (Gcup {e_{ij}},G+e_{ij}):在图(G)中增加边(e_{ij}={v_i,v_j})。
- (Gackslash {e_{ij}},G-e_{ij}):在图(G)中删除边(e_{ij}={v_i,v_j})。不断进行这个操作可以得到任意生成子图。
- (Gackslash overline E,G-overline E),其中(overline E subseteq E(G)):从图(G)中删去(overline E)中所有的边。
- (Gackslash {v},G-v):从图(G)中删去顶点(v)及其关联的边。不断进行这个操作可以得到任意导出子图。
- (Gackslash 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 ight})。
环(cycle (C_n)):(V={1,2,dots,n},E=left{{i,i+1}:i=1,2,dots,n-1 ight} cup left{{1,n} ight})。
二分图(Bipartite graph (B_{n,m})):(V={u_1,dots,u_n}cup{v_1,dots,v_m},Esubseteq left{{u_i,v_j}:i=1,dots,n,j=1,dots,m ight})。
完全图(Complete graph (K_n)):(V={1,2,dots,n},E={Vchoose 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):(ein E),如果(e={v,v}),其中(vin V)则称(e)是一个自环。重边(Multiedge):(e_1,e_2in E)且(e_1=e_2={u,v}),其中(u,vin 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 imes a}{2})
问题引入2:在宴会上一共有(n)个人,他们中一些人互相握手。已知握手的次数依次为({h_1,h_2,dots,h_n})次。问握手总次数(S)为多少?(S=frac{sumlimits_{i=1}^n h_i}{2})。
顶点的度:前面已经提到过顶点的度的概念,那么有如下几个显然的结论:
- (deg _G(v)leqslant |E|)。
- (G=P_n),则(1leqslant 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)),以下等式成立
一条边与两个顶点相关联,在对(deg_G(v))做累加时,每条边被使用到两次。对其他边计数有类似推理。故等式成立。
推论:无向图中,度数为奇数的点一定有偶数个。
图同构(graph isomorphism)
若对图(G=(V,E))及图(G'=(V',E')),存在双射函数(f:V ightarrow V'),满足对任意(x,yin V),都有({x,y}in E)当且仅当({f(x),f(y)}in E')。那么我们称图(G)和图(G')是同构的。用符号(Gcong G')表示图同构。
直观地讲,同构图之间,仅仅是顶点的名字不同。
图的计数:
问题:以集合(V={1,2,dots,n})中的元素为顶点构造图(G=(V,E)),其中(Esubseteq {V choose 2})。求问能构成多少个图?
解: (|{V choose 2}|={nchoose 2})为(K_n)的边数。每条边可能在图中,也可能不在图中,故以(V)为顶点的图共有(2^{nchoose 2})种。
问题:以集合(V={1,2,dots,n})中的元素为顶点构造图(G=(V,E)),其中(Esubseteq {V choose 2})。求问能构成多少个不同构的图?
例:三个顶点所组成互不同构的图共有(4)种。
解:显然,答案不会超过(2^{n choose 2})。而一个(n)个点的图至多与(n!)个不同的图同构。于是如果记答案为(X),那么有
然后对上下界进行估值:
于是就有
练习题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|=ngeqslant 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_1dots x_k)。显然有(N(x_1)subseteq P,N(x_k)subseteq P)。
取(iin [1,dots,k-1]),(kleqslant n),其中
[egin{aligned} left { egin{matrix} left | i:{x_i,x_k}in E(G) ight | geqslant frac{n}{2}\ left | i:{x_1,x_{i+1}}in E(G) ight | geqslant frac{n}{2} end{matrix} ight. 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|=ngeqslant 3)。对任意不同(u,vin V),若(u,v)不相邻,则(deg_G(u)+deg_G(v)geqslant n)。满足以上条件的图(G)是哈密顿图。
证明:与上一个证明类似,略。
显然,Dirac定理是Ore定理的特例。
注意:这个定理不是必要条件。
引理:图(G=(V,E)),(|G|=ngeqslant 3)。若存在不相邻的点(u,vin V)且(deg_G(u)+deg_G(v)geqslant n),则(G=(V,E))是哈密顿图当且仅当(G'=(V,Ecup{{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))是哈密顿图,则对所有非空子集(Ssubseteq 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_Pin 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_2dots 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)。
例子:
如图,假设我们固定(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,vin V),存在从(u)到(v)的唯一路径。
- 最小连通图:(G)是连通图,且去掉任意一条边后都成为非连通图。
- 最大无环图:(G)不含环,但增加任何一条边所得到的图(G+e)(其中(ein {V choose 2}ackslash 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|+1geqslant 2)时,根据握手定理,图(G)中顶点度数之和为(2|V|-2)。故图(G)中必然存在度数小于(2)的顶点。且图(G)是连通图,任何顶点的度数非(0),所以存在度数为(1)的点,记为(v)。
考虑(G'=G-v),易验证归纳假设条件成立。根据归纳假设,(G')是树。根据树的生长定理,(G)也是树。
练习题6.1
有根树同构
有根树(Rooted tree):二元组((T,r))中(T)表示一棵树,(rin 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) ightarrow V(T'))是(Tcong T')且(f(r)=r')。
显然,(cong')关系严格强于(cong)。
思路:将树的比较转化为字符串比较。
字符串比较:字典序(Lexicographic order):对不同的序列(s=s_1s_2dots s_n)和(t=t_1t_2dots 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 eq 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_2dots 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)=maxlimits_{uin 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_1in V(T_1),x_2in 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)为以上过程的输出。
性质:(Tcong T')当且仅当(#Tcong' #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 ightarrow 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,bin 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))表示(sumlimits_{ein 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^*)),最终能得到(Tlhd 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^*)),最终能得到(Tlhd T_{i+1}^*)。正确性得证。
练习题6.3
网络流
基本概念
流网络(Flow network):((G,s,t,c)),其中(G=(V,E))是有向图,源点(Source)(s),汇点(Sink)(t)和容量函数(Capacity function):(forall ein E,c(e)in R,c(e)>0)。
割(Cut):顶点集(V)被划分为两个集合(A,B),其中(sin A, t in B)。常用({A,B})表示割。
容量(Capacity):从集合(A)到集合(B)的边的容量之和。(c(A,B)=sumlimits_{uin A, v in B} c(u,v))。
最小割(Min-cut)问题:寻找容量最小的割。
流(Flow):给定流网络((G,s,t,c)),流函数(f:V imes V ightarrow R)满足如下条件:
- (f(u,v)leqslant c(u,v))(Capacity constraint,流量限制);
- (f(u,v)=-f(v,u))(Skew symmetry,对称性);
- (sumlimits_{vin V}f(u,v)=0)对任意(vin Vackslash{s,t})成立(Flow conservation,流量平衡);
- 一个流的值被定义为从源点出发的流量之和(|f|=sumlimits_{vin Vackslash {s}}f(s,v))。
最大流(Max-flow)问题:寻找值最大的流。
对流函数(f),经过割({A,B})的流用(f(A,B))表示:(f(A,B)=sumlimits_{uin A,vin B}f(u,v))。
同时,(f(u,B) riangleq f({u},B)),(f(A,v) riangleq f(A,{v}))。
性质1:对给定流网络((G,s,t,c))上的任意割({X,Y})以及流(f),(|f|=f(X,Y))。
证明:对(|X|)做归纳。
当(X={s})时,由流的定义,结论成立。假设对割({X,Y})结论成立。对任意(win Yackslash {t}),考察新割({X',Y'}={Xcup {w},Yackslash {w}}):
[egin{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} ]
上述结论同样说明:
性质2:最大流值小于等于最小割容量。
证明:对流函数(f),对任意(s-t)割({A,B}):
[egin{aligned} |f|&=f(A,B)\ &=sumlimits_{uin A, vin B}f(u,v)\ &leqslant sumlimits_{uin A, vin B,f(u,v)geqslant 0}f(u,v)\ &leqslant sumlimits_{uin A, vin 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):
[egin{aligned} c_f(e)=left{egin{matrix} c(e)-f(e) & if\,\,\,\,ein E\ f(e) & if\,\,\,\,e^Rin E end{matrix} ight. 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,vin V),定义
((f+f')(u,v)=f(u,v)+f'(u,v))。
性质:(f)是(G)上的流,(f')是关于流(f)的剩余图(G_f)上的流,则(f+f')也是(G)上的流。
证明:定义(g=f+f')。
容量限制:
[egin{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} ]对称性:
[egin{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 vin Vackslash {s,t}),有(sumlimits_{vin V}f(u,v)=0,sumlimits_{vin V}f'(u,v)=0)。故
[egin{aligned} sumlimits_{vin V}g(u,v)=sumlimits_{vin 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))):对所有(ein P),如果(ein E),(f^+(e)=f(e)+b);如果(e^Rin E),(f^+(e)=f(e)-b)。对所有(e ot 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 ightarrow 2):对任意割({A,B})和流(g),有(|g|leqslant c(A,B))。故(c(A,B)=|f|)蕴含(|g|leqslant |f|),即(f)是最大流。
(2 ightarrow 3):如果存在相对于流(f)的扩流路径,则可沿(P)扩充,得到一个值更大的流。
(3 ightarrow 1):若命题(3)成立,设(A)是从(s)出发沿剩余图(G_f)可达到的所有点,(B=Vackslash 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)来选择扩流方案。
应用:二分图匹配(略)。