• 离散数学学习笔记


    更好的阅读体验可以到我的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),即

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

    (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})
    • 图示法:1
    • 环(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)元子集的个数为

    [left |{Xchoose k} ight |=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 } ight | $。

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

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

    [{nchoose k}=left | {Xchoose k } ight | =frac{n(n-1)dots(n-k+1)}{k!}=frac{n!}{k!(n-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)如下等式成立

    [(1+x)^n=sumlimits_{k=0}^n{nchoose k}x^k ]

    (x=1)时,得到

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

    (x=-1)时,得到

    [{nchoose 0}-{nchoose 1 } + {n choose 2}-{n choose 3} + dots = sumlimits_{k=0}^n{nchoose k}(-1)^k=0 ]

    将上面两式相加,得到

    [{nchoose 0}+{nchoose 2}+{nchoose 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),以及任意自然数(ngeqslant 1),如下等式成立:

    [(x_1+x_2+dots+x_m)^n=sumlimits_{substack {k_1+k_2+dots+k_m=n \ k1,k2,dots,k_mgeqslant 0}}{nchoose k_1,k_2,dots,k_m}x_1^{k_1}x_2^{k_2}dots x_m^{k_m} ]

    略(归纳法)

    练习题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),有

    [egin{aligned} left | igcuplimits_{i=1}^nA_i ight | &=sumlimits_{k=1}^n(-1)^{k-1}sumlimits_{substack Iin{{1,2,dots,n}choose k} }left|igcaplimits_{iin I}A_i ight | \ &=sumlimits_{substack emptyset eq I subseteq{1,2,dots,n}} (-1)^{|I|-1}left|igcaplimits_{iin I}A_i ight| end{aligned} ]

    数学归纳法:

    (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)互质的自然数的个数。即

    [phi(n)=|{min{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$。

    如果(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})

    同时有:

    [egin{aligned} &sumlimits_{xin G_k}xleqslant | G_k|max G_k=2^{k-1} imesfrac{1}{2^{k-1}}=1\ &sumlimits_{xin G_k}xgeqslant |G_k|min G_k>2^{k-1} imes frac{1}{2^k}=frac{1}{2} end{aligned} ]

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

    [egin{aligned} left . egin{matrix} H_nleqslant t imes 1leqslant lfloor log_2 n floor +1 \ H_n>(t-1) imesfrac{1}{2}geqslant frac{1}{2}lfloor log_2 n floor end{matrix} ight } Rightarrow H(n)=Theta(log_2 n)=Theta(ln n ) end{aligned} ]

    练习题3.1

    估值初步:阶乘估值

    极点估值((ngeqslant 2)

    [egin{aligned} left {egin{matrix} n!=prodlimits_{i=1}^n i leqslant prodlimits_{i=1}^n n = n ^ n \ n!=prodlimits_{i=2}^n i geqslant prodlimits_{i=2}^n 2 = 2 ^ {n - 1 } end{matrix} ight . end{aligned} ]

    进一步优化:

    [egin{aligned} left { egin{matrix} n!=prodlimits_{i=1}^nileqslant left(prodlimits_{i=1}^{frac{n}{2}}frac{n}{2} ight)left(prodlimits_{i=frac{n}{2}+1}^n n ight)=left(frac{n}{sqrt{2}} ight)^n\ n!=prodlimits_{i=1}^n i geqslant prodlimits_{i=frac{n}{2}}^ni>prodlimits_{i=frac{n}{2}+1}^nfrac{n}{2}=(frac{n}{2})^{frac{n}{2}}=(sqrt{frac{n}{2}})^n end{matrix} ight . end{aligned} ]

    高斯估值

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

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

    那么上界:

    [n!=sqrt{n!n!}=sqrt{prodlimits_{i=1}^n i(n+1-i)}=prodlimits_{i=1}^nsqrt{i(n+1-i)}leqslant prod_{i=1}^nfrac{n+1}{2}=(frac{n+1}{2})^n ]

    同时,我们容易验证有

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

    那么下界:

    [n!=sqrt{n!n!}=sqrt{prodlimits_{i=1}^n i(n+1-i)}=prodlimits_{i=1}^nsqrt{i(n+1-i)}geqslantprodlimits_{i=1}^nsqrt n = n ^{frac{n}{2}} ]

    欧拉数(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)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),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)

    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)

    图上基本操作

    • (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)),以下等式成立

    [sumlimits_{vin V} deg_G(v)=2|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),那么有

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

    然后对上下界进行估值:

    [egin{aligned} log_2 2 ^{nchoose 2}&={nchoose 2}=frac{n^2}{2}(1-frac{1}{n})\ log_2 frac{2^{n choose 2 } }{ n !} &= {n choose 2} - log_2 n geqslant {nchoose 2} - log_2 n ^ n = frac{n^2}{ 2 }(1-frac{1}{n}-frac{2log_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|=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)

    例子:

    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,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

    PIC1

    不难发现函数与函数图一一对应。当(|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)
    • 算法流程:

    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^*)​),最终能得到(Tlhd 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^*)),最终能得到(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} ]

    上述结论同样说明:

    [egin{aligned} |f|&=sumlimits_{vin Vackslash {s}}f(s,v )\ & = f(s,Vackslash {s})\ & = f(Vackslash {t},t)\ & = sumlimits_{vin Vackslash {t}}f(v,t) 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最大流算法

    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

  • 相关阅读:
    修改注册表改变程序默认安装路径
    任务管理器在右下角的图标不显示
    WORD中插入的公式与文字对不齐——公式比文字高——文字比公式低
    tablespace
    使用Working Set让eclipse环境看着更清爽
    Grub4DOS 0.4.4 下载
    Windows和Linux操作系统下Eclipse开发C/C++程序的代码提示
    不同的编译器:GCC G++ C C++的区别
    oracle基础
    JS相关
  • 原文地址:https://www.cnblogs.com/chy-2003/p/11414534.html
Copyright © 2020-2023  润新知