• 容斥原理在错排问题中的应用


        错排问题是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为Dn。 研究一个排列错排个数的问题,叫做错排问题或称为更列问题。

        高中生们都很熟悉错排,因为错排问题在高中数学绝对算是大名鼎鼎,很多排列组合的问题需要化归为错排才能解决。我们应用的一般都是错排的递推公式,附加推导如下:


        把n个元素的错排数记为Dn,显然D1=0,D2=1。当n≥3时,设不错排时i位置的元素为a[i],不妨设最后一个数a[n]排在了第k位,其中k≠n,也就是1≤k≤n-1。那么我们现在考虑第n位的情况。

    • 当a[k]排在第n位时,a[n]与a[k]的位置均已确定,除了a[n]和a[k]以外还有n-2个数,其错排数为Dn-2
    • 当a[k]不排在第n位时,只有a[n]的位置确定(占据了k位置),那么这时的包括a[k]在内的剩下n-1个数的每一种错排,都等价于只有n-1个数时的错排(因为已经假设a[k]不能排在第n位,所以这时的第n位可看作a[k]的“本位”,即是错排时a[k]不能占据的“第k位”)。其错排数为Dn-1

        所以当n排在第k位时共有Dn-2+Dn-1种错排方法,又k位置有从1到n-1共n-1种取法,我们可以得到:
        Dn=(n-1)(Dn-1+Dn-2)


        但是错排数列还有一个通项公式:

        

        这个公式当然可以从递推公式中得到,但比较复杂,不是讨论重点。其实,通过集合角度和大名鼎鼎的容斥原理可以直接推出该公式,使人不得不拜倒于伟大容斥原理侧漏的霸气之下!所以下面将简单介绍一下容斥原理。

    【引题】

        一个集合A中的元素个数若记为|A|,请写出|A∪B∪C|的计算公式。

        这道题很简单,画个韦恩图就一目了然:

    所以,|A∪B∪C|=|A|+|B|+|C|-|A ∩ B|-|B ∩ C|-|A ∩ C|+|A ∩ B ∩ C|

    下面这些数量关系可轻易写得:

    定理:设B(n,k)是[1,n]所有的含k个元素的子集组成的集合,

    则下面公式写出了|A1∪A2∪A3∪..∪An|的值。

    这个公式看着不太顺眼,我认为如果把B(n,k)的概念去掉,公式也可以这样写:

    这个公式的解释:设A1,A2,…,An是有限集,有

    可见,运用容斥原理,可以化简各种连并或连交的式子,这在下文中有重要的应用。

    这时,让我们再来看错排问题:

    错位排列:设 Ai为数 i 在第i位上时的全体排列,i=1,2,…,n。因数字i不能动,所以就是n-1个数全排列。因而有:

    易得:

    每个元素都不在原来位置的排列数为:

    Dn=

    这时有点犯难,Dn表达需要求,但是容斥原理中给出的却是

    如果我们用容斥原理求,则需要进一步转化。

    转化时,我们需要介绍个定理:

    DeMorga定理:

        在全集U中,记集合A的补集为,则

    DeMogan定理的推广:设A1,A2,...,An是U的子集,则

    这样,我们就得到了有用的转化公式。

    因此

    把容斥原理的公式套进去,就是:

    所以在错排公式推导的最后一步中,易得

    ~~~~这就是Dn的通项公式!~~~~

    必要的解释:

    1. |U|=n!,即全排列,充当全集;
    2. C(n,k)(n-k)!即是的值。

    如:求三个数的错排方案数
    D(3)=|U|-(|A1|+|A2|+|A3|)+(|A1∩A2|+|A1∩A3|+|A2∩A3|)-|A1∩A2∩A3|
    =3!-C(3,1)×2!+C(3,2)×1!-C(3,3)×0!
    =2


    容斥原理在此得到了完美运用。

    对自己有帮助的话请戳一个下面的“推荐”喔!

  • 相关阅读:
    解决ssh连接linux系统特别慢的问题
    mysql的InnoDB 数据库引擎TableSpace Exists 问题
    nextcloud私有云盘的部署
    su: 无法设置用户ID: 资源暂时不可用
    oracle静默安装
    mysql update 子查询锁表问题
    mysql导出数据很快,导入很慢
    mysql千万级数据库插入速度和读取速度的调整
    django, CentOS7+nginx(apache)+mod_wsgi+Python+Django
    javascript 重写已有的方法
  • 原文地址:https://www.cnblogs.com/zamhown/p/cpwt.html
Copyright © 2020-2023  润新知