zoukankan      html  css  js  c++  java
  • 【组合数学】 06

      计数问题其实只是组合数学中的一小部分,以上也仅仅介绍了比较经典的结论。组合问题复杂多变,它们之间也少有联系,所以把组合数学称作一门学科并不准确。组合难题也会出现在各种益智趣题或竞赛难题中,随随便便就会出现一些未解的难题,所以我们也将止步于此。在结束本课之前,我决定再窥探一下组合问题中的一大类:组合设计。这些问题的关注点在如何布局元素,以满足一些特定要求,它们已然构成了组合学的众多分支。

    1. 0-1矩阵

    1.1 关联矩阵的秩

      有的问题需要在两个集合(A,B)间建立联系,如果把(A,B)的元素分别纵横排列,对应位置上以(0,1)表示元素是否有关联。这就得到了一个0-1矩阵,当然这里我们并不关注它的代数性质,而仅仅是借用其便捷的形式,来研究满足一定条件的组合问题。0-1矩阵也被称为关联矩阵,它可以是两个集合间的联系(比如集合(A)的子集与元素的包含关系),也可以是同一集合中元素的关系(比如图论中的图)。

      在讨论关联矩阵时,矩阵的行列的顺序对问题并无影响,为了讨论方便,可以随意交换行或列。好的,现在面对着一个满是(0,1)的矩阵(R),我们需要讨论些什么问题呢?除了看每个0,1项之外,当然还看到了每一行和每一列,我们把它们都称为矩阵中的线。只要选择足够多的线,总可以包含所有的(1),这些线称为关联矩阵的覆盖。你自然会想到一个有意义的问题:线数最小的覆盖是多少?我们把它定义为矩阵的线秩,记作(lambda(R))。

      换个角度,称矩阵中的一个(1)为,与之相关的有行、列两条线,把不在同一条线上项称为无关项。无关项足够多时,它们的线也可以覆盖关联矩阵,这就有了另外一个有意义的问题:最多可以有多少个无关项?我们把它定义为矩阵的项秩,记作( ho(R))。因为所有项包含在任意一个线覆盖中,而每条线上最多只能有一个无关项,故首先有( ho(R)leqslant lambda(R))。

      反之对于线数为(lambda(R))的覆盖,设有(p)行(q)列,下面证明可以在每行、列上取得一个无关的代表项。考察(p)行中与(q)列不相交的部分,如果不能在其中选出(p)个无关的项,则必然可以用小于(p)条列线取代这(p)条行线。另一部分同样论证,这就证明了总可以选出(p+q=lambda(R))个无关项,从而有( ho(R)geqslant lambda(R))。这就得到了等式(1),以后可以统称线秩、项秩为,线秩和项秩的问题可以互相转化,这从下面的例子和定理中都能看出。

    [ ho(R)=lambda(R) ag{1}]

      秩等于行列中较小值的矩阵便称为是满秩的,存在一种满秩的(n)阶方阵,它仅有(n)个(1),每行每列有且仅有一个(1)。换个说法,这种矩阵的每行每列之和都是(1),若干这种矩阵(P_k)的凸线性组合(式(2))也必然满足这一条件。每条线上和都为(1)的非负实矩阵被称为双随机矩阵,这是一种很有用的矩阵。

    [P=c_1P_1+c_2P_2+cdots+c_mP_m,;;(c_k>0,;sum_{k=1}^mc_k=1) ag{2}]

      现在反过来问,是不是所有双随机矩阵都有式(2)的凸线性分解呢?这个其实不难,首先双随机矩阵不能被少于(n)条线覆盖,故必然是满秩的。选择(n)个无关项并取最小值(c_1),作关联矩阵(P_1)使其仅在这(n)个项为(1)。作出满足(P=c_1P_1+(1-c_2)P'_2)的(P'_2),它也是双随机矩阵,但非零项比(P)少一个。对(P'_2)继续这个过程,有限步后便可得到式(2),结论得证,它被称为Birkhoff定理

    1.2 Hall定理

      关联矩阵的项秩有一个非常重要的等价描述,把关联矩阵看出是点集(A,B)之间的连接,这在图论中被称为二部图。(A,B)各选出一个关联的元素((a,b))称为一个匹配,然后继续在剩下的元素中选取匹配,项秩正表示二部图中的最大匹配数。这个模型有很广泛的应用,典型的就是任务分配问题:每个人能胜任某些任务,给一个分配方案,使尽量多的人能做自己胜任的任务。

      当然这个问题的第一步先要求矩阵的秩,或者更弱一点,至少我们要找到满秩的判定条件。为了表述方便,下面换一个等价模型,设(A)是集合,把(bin B)看成是(A)的一个子集,(a,b)关联当且仅当(ain b)。(B)是集合的集合,一般也称为集系。对于满秩的关联,为每个(b)都能找到一个互异的(ain b),它们被称为(B)的相异代表系

      对于集系矩阵满秩有一个很显然的必要条件,就是任意(r)个子集的并不小于(r)。令人惊喜的是,它居然还是个充分条件,该结论被称为霍尔(Hall)定理(式(3))。其实条件本身等价于说,矩阵的零子矩阵总不大于(r*(|A|-r)),故零子矩阵的行列和总小于(|A|),从而线覆盖数至少为(|B|)。这就证明了满秩,论证中用到了线秩在零子矩阵里的等价条件,这也是线秩最常用的方法。

    [ ho(R)=|B|;Leftrightarrow;|b_1cup b_2cupcdotscup b_r|geqslant r,;(forall b_iin B,forall rleqslant |B|) ag{3}]

      Hall定理有很高的理论价值,但在实际应用中仍不是很方便,但借助这个定理,我们可以有更强但更方便的条件。比如如果存在(r>0),使得矩阵每行至少有(r)个(1)而每列最多有(r)个(1),可以证明它满足Hall定理,从而为满秩。其实任选(s)行,其中包含至少(sr)个(1),它们至少要有(r)列来覆盖,结论得证。当然实际应用中并不总能找到完美匹配,假设至少有(d)个找不到工作,只需再添加(d)个虚拟的大家都能做的工作,利用Hall定理也可以得到只有(d)个人找不到工作的充要条件是:任意(r)个子集的并不小于(r-d)。

      再来看Hall定理的两个有趣的应用。考察集合(X)的的两个分割(A_1,cdots,A_n)和(B_1,cdots,B_n),我们希望找到(n)个互异的元素(x_k),使得(x_kin A_k)且(x_kin B_k),它们被称为分割的共同代表元组。以(A_i,B_j)有非空交集作为关联,问题等同于判断满秩,Hall定理说明满秩的充要条件是:任何(r)个(A_k)之并最多包含(r)个(B_k)之并。特别地,当(|A_k|,|B_k|)全部相等时,充要条件显然满足,也就是说,集合的任意两个分割数相等的平均分割总存在共同代表元组。

      有一种常见的(m imes n)阶矩阵,共有(n)个不同的元素组成,且每条线上的元素不同。这样的矩阵称为拉丁矩阵,显然有(mleqslant n),当(m=n)时称为拉丁方。一个自然的问题是,任何拉丁矩阵是否都能扩展为拉丁方?考察不属于第(k)列的元素组成的集合(A_k),它们和(n)个元素以包含关系建立关联。显然,每个(A_k)包含(n-m)个元素,而每个元素已经出现过(m)次且属于不同的列,故未出现在(n-m)列中。直接利用Hall定理的推论,可选出(A_k)的相异代表系,以它们组成新的一行,可以继续这个过程,直至构造出拉丁方。

    1.3 积和式

      对(m imes n)阶的关联矩阵(R)((mleqslant n)),一组相异代表系其实就是在每行(k)取一个元素(a_k),满足(a_1a_2cdots a_m=1)。这就启发我们,对每行的任意选取计算其乘积,并将所有可能的乘积相加,结果便是相异代表系的个数。严格来讲,一种选取就是一个从行数(k)到列数的互异映射(sigma(k)),记所有这种映射的集合为(Omega),称式(4)为关联矩阵(R)的积和式(permanent)

    [ ext{Per}(R)=sum_{sigmain Omega}a_{1sigma(1)}a_{2sigma(2)}cdots a_{msigma(m)} ag{4}]

      式(4)的定义与矩阵行列式的定义非常类似,故不难证明积和式也有类似行列式计算的拉普拉斯展开式,这里就不展开阐述了。积和式的计算并不容易,它只有理论价值,对于特殊的形式的关联矩阵可以通过拉普拉斯方法简化计算。积和式一般用于一些计数问题中,这里举一个常见的例子。

      考虑将(n)个元素重新排列,并限制每个元素出现的位置,这种问题被称为限位排列问题。每个元素和可以出现的位置建立起(n imes n)阶关联矩阵,排列的个数显然就是矩阵的积和式。前面多次提到的错位排列问题就是一个特例,它的关联矩阵为(J_n-I_n)((J_n)为全(1)矩阵),容易得到(D_n=(n-1)(D_{n-1}+D_{n-2})),你可以尝试计算其母函数和通项公式。

      还有一个经典的限位排列问题,就是著名的“夫妻围坐”问题:(n)对夫妻围坐在圆桌边,要求男女相间但夫妻不相邻。可以先让女士入座,问题的难点就是男士入座的坐法数(U_n)。记女士(k)左手边的位置为(k),男士(k)就不能坐(k)或(k+1)((k=n)时为(1)),这是个典型的限位排列问题。我们可以轻松地写出关联矩阵(J_n-I_n-P_n)((P_n)是(a_{i(i+1)}=a_{n1}=1)的矩阵),但它的显式表达式比较难解,这里只给出结论(式(5),试试用容斥原理解决)。

    [U_n=sum_{k=0}^n(-1)^kdfrac{2n}{2n-k}inom{2n-k}{k}(n-k)! ag{5}]

    1.4 0-1矩阵类

      对一个(m imes n)阶的关联矩阵(R),可以计算每行和每列(1)的个数(p_i,q_j),向量(P=(p_1,cdots,p_m),Q=(q_1,cdots,q_n))被称为行和向量列和向量。我们自然想问,任意给定(m)维向量(P)和(n)维向量(Q),存在以它们为行(列)和向量的关联矩阵吗?首先当然有式(6)成立,这个条件过于平凡,以下把它当做默认条件,并把以(P,Q)作为行(列)和向量的所有关联矩阵的集合记作(R(P,Q))。

    [p_1+cdots+p_m=q_1+cdots+q_n ag{6}]

      由于行列可以任意交换,我们事先假定(p_i,q_j)都是递减排列的。在具体排列时,先将每行的(p_k)个(1)全部靠左放置,得到的矩阵记作(R(P,n))。它的列和向量记作(P^*=(p_1^*,cdots,p_n^*))。(R(P,n))的特点是向左紧凑排列,具体来讲就是任意(p_1^*+cdots+p_k^*)都取到了最大值。为讨论方便,如果两个(n)维向量满足式(7),则称(T)优超于(S)。刚才的讨论说明,(R(P,Q))非空的必要条件是(Qprec P^*)。

    [Sprec T;Leftrightarrow;sum_{i=1}^ks_ileqslantsum_{i=1}^kt_i,\,(k=1,2,cdots,n) ag{7}]

      其实(Qprec P^*)也是(R(P,Q))非空的充分条件(式(8),当然还要求(6)成立),它由Ryser和Gale分别单独发现,这里仅描述一下思路,严格证明请看教材。以(R(P,n))为初始状态,第一步将行和最小的(m-q_1)行向右平移一列,这样第一列就只有(q_1)个(1)。去除掉第一列后矩阵仍然是相左紧凑排列的,将余下矩阵的行和最小的(m-q_2)行向右平移一列,依次类推便可构造出(R(P,Q))。

    [R(P,Q) evarnothing;Leftrightarrow;Qprec P^* ag{8}]

    2. 集系的极值

      组合设计问题中还有一类问题,就是在(X)的所有子集中选出满足条件的子集构成集系(B),并且讨论(B)能取到的最值。这类问题花样繁多,大部分也很难解决,残留了大量尚未解决的问题。以我有限的眼光看,这些智力竞逐的游戏并没有广泛的应用领域,这里暂时就不做介绍了,留作后话吧。子集间最简单的关系就是交集和包含,下面从这两方面讨论两个简单的问题。

    2.1 相交集系

      第一个问题很简单,就是要求集系中的元素两两交集非空,问集系最大为多少?构造两两相交的集系并不难,任取(xin X),所有包含(x)的子集便满足条件,其个数是所有子集的一半(2^{n-1})。还能更大吗?对任何子集(bin B),(b)和(ar{b})不能同时选取,故(2^{n-1})已是最大值。

      甚至对一个阶小于(2^{n-1})的相交集系(B),总可以将其扩展为(2^{n-1})个。因为总存在(b)使得(b,ar{b})都不属于(B),如果(b)与(B)的所有元素都相交,则(b)可添加进(B)。否则设存在(b'in B)使得(bcap b'=varnothing),则可证(B)中任意元素(b'')都满足(b'' otsubset b),因为这样的话(b'cap b''=varnothing),矛盾。既然恒有(b'' otsubset b),则必然有(b''cap ar{b} evarnothing),可将(ar{b})添加到(B)中,结论得证。

      如果把条件改成任意三个集合有交集呢?基于开始的构造(总取(a)),最多仍然能取到(2^{n-1})个,现在来证明这是唯一的情况。假设(p)是满足(b_1capcdotscap b_p=bin B)的最大值,如果(p<2^{n-1}),则易证(bcap b_{p+1})不属于(B),但却与(B)中所有元素有交集,矛盾。故(p=2^{n-1}),唯一性便容易证明。

    2.2 Sperner系

      第二个问题可以描述为,集系(B)中的元素互不包含,问集系最大为多少?这样的集系也称为Sperner系。既然讨论到包含关系,我们来考察所有满足时(9)的包含链,Sperner系在每条链上最多只能有一个元素。由于包含链上每一步只多一个元素,故包含链总共有(n!)条。对任意(bin B),如果(|b|=k),则包含(b)的链共有(k!(n-k)!)条。若记(B)中阶为(k)元素有(f_k)个,由于每条链最多只能包含(B)的一个元素,则显然有式(10)左成立,整理后便是式(10)右。

    [varnothing=b_1subset b_1subsetcdotssubset b_n=X,;;(|b_{k+1}|-|b_k|=1) ag{9}]

    [sum_{k=1}^{n}(f_kcdot k!(n-k)!)leqslant n!;Rightarrow;sum_{k=1}^{n}dfrac{f_k}{inom{n}{k}}leqslant 1 ag{10}]

      以下记(m=lfloordfrac{n}{2} floor),由(inom{n}{k})的单调性易知(f_1+cdots+f_nleqslantinom{n}{m}),等号成立的充要条件是:只有当(k=m,m+1)时(f_k e 0),并且所有链上都有(B)中的元素。当(B)取所有(m)阶子集,或者取所有(m+1)阶子集时,都满足等式要求。下面证明其实只能取这两种子集之一,证明中一定要牢记:每条链都有且仅有一个(B)的元素。

      假设(m+1)阶子集只有部分在(B)中,则必然可选出(m+1)阶子集(b_1in B,b_2 otin B)。将(b_1)向(b_2)每次换一个元素地渐变,过程中必有某个时刻有(b_3in B,b_4 otin B),且(|b=b_3cap b_4|=m)。由(b_3in B)知(b otin B),但由(b_4 otin B)又有(bin B),矛盾!只就证明了,Sperner系取最大值时,要么全是(lfloordfrac{n}{2} floor)阶子集,要么全是(lceildfrac{n}{2} ceil)阶子集,该结论被称为Sperner定理


    全篇完

  • 相关阅读:
    转载:从51CTO转来的两篇关于SQL的文章
    转载:几万年前,有一只猴子大闹地府后删库跑路...
    【java/oralce/sql】往一张仅有id,名称,创建时间三个字段的表中插入百万数据需要多久?1分26秒
    处处留心皆学问
    [oracle/java/sql]用于上十万批量数据插入Oracle表的Java程序
    Linux学习_003_虚拟机CentOS 7.5 如何固定IP地址
    Linux学习_002_VMware12.0 Pro 中安装 CentOS-7.5(桌面版)
    Linux学习_001_VMware10.0 && VMware12.0 Pro && VMware14.0 Pro && VMware 15.0 Pro 的安装与破解
    day76_淘淘商城项目_09_商品详情页动态展示实现(jsp+redis) + FreeMarker模板引擎入门 + 商品详情页静态化实现(Win版本的nginx作http服务器)_匠心笔记
    Eclipse注释模板设置详解
  • 原文地址:https://www.cnblogs.com/edward-bian/p/5786987.html
Copyright © 2011-2022 走看看