• 错排问题


    科普向~

    最近总是看到错排,感觉很有趣的样子。。。

    错排问题是指:求1~n的排列P,使得 P≠ i 的方案数。

    递推

    设f[i]表示i个数的错排方案数,称有k个数在自己位置上的错排为k不动排。对于i-1个数已经形成的错排,添加一个i之后,可以把i与前面i-1个数中的任意一个交换,使得成为错排;对于有一个数不满足错排的方案数,显然等于f[i-1]×i,那么对于i-1个数已经形成的1不动排,可以把i与前面排在自己位置上的那个数交换,使得成为错排;由于1~n的排列={错排,1不动排,2不动排,...,n不动排},而上述交换i和前面一个数的方法显然可以通过1~i-1的全排列生成1~i的全排列,但是满足交换一个数是错排的,只有上述两种情况,所以f[i]=(i-1)×(f[i-1]+f[i-2])。至于通项公式没必要去推吧。。。(其实我不会)留坑。

    容斥原理

    先来证明容斥原理吧。。

    注:下述大写字母都代表集合

    容斥原理(其实是容斥原理的直接推论,但是貌似比本源的容斥原理更常用,本源的容斥原理是关于集合并的):
    [left| S_1cup S_2 cup S_3 cup ... cup S_n ight|=sum_{i=1}^nleft| S_i ight|+(-1)sum_{0<i<jle n}^nleft| S_i cap S_j ight|+sum_{0<i<j<kle n}^nleft| S_i cap S_j cap S_k ight|+...+(-1)^{n+1}left| S_1cap S_2 cap S_3 cap ... cap S_n  ight|]

    证明(组合恒等式法):

    设(C_n^k=inom{n}{k})表示组合数,(A_n^k)表示排列数。

    引理(组合恒等式):
    [sum_{i=0}^k(-1)^{i}C_k^i=0]

    证明:由((1-1)^k)展开立得。

    我们只需证明,在左边中的元素(x)在右边只出现一次即可。不妨设(xsubset S_1,xsubset S_2,xsubset S_3,...,xsubset S_k),那么(x)在右边第一项中出现的次数等于(C_k^1),在第二项中等于(C_k^2),在第三项中等于(C_k^3),直到第k项等于(C_k^k),之后的项中不再有(x)出现,而根据引理,我们知道
    [sum_{i=1}^k(-1)^{i+1}C_k^i=1]

    (x)在右边也只出现了一次,所以成立。得证。

    回到错排问题上来。修改k不动排列的定义为:k个元素在自己的位置上,其他元素随意排的方案数。由容斥原理显然,错排数=全排列数-1不动排数+2不动排数-3不动排数+...+(-1)nn不动排数。设D表示错排数,所以
    [D=A_n^n-A_n^{n-1}+A_n^{n-2}+...+(-1)^{n}A_n^0 = n!left{ frac{(-1)^2}{2!}+frac{(-1)^3}{3!}+...+frac{(-1)^n}{n!} ight} =n!sum_{r=2}^n frac{(-1)^r}{r!}]。是为上面那个递推式的通项。

    二项式反演

    二项式反演是指:

    [ egin{equation}
    a_n=sum_{k=0}^nC_n^k b_k Longleftrightarrow b_n=sum_{k=0}^{n}(-1)^{n-k}C_n^k a_nend{equation} ]

    好像在OI中没啥用吧?不过在WC13的时候被人提到过23333

    upd:3:31 Naive!我真是日了狗啦!!!叫你狂!见识短!

    证明:

    由于(C_n^kC_k^i=C_n^iC_{n-i}^{k-i})下式:

    [egin{equation} sum_{k=i}^n(-1)^{n-k}C_n^kC_k^i= egin{cases} 0 &mbox{(i lt n)}\ 1 &mbox{(i=n)} end{cases} end{equation}]

    显然成立。

    那么:

    [
    egin{equation}
    egin{aligned}
    sum_{k=0}^n(-1)^{n-k}C_n^ka_k
    &=sum_{k=0}^n(-1)^{n-k}C_n^kleft (sum_{i=0}^{k}C_k^ib_i ight ) \
    & =sum_{k=0}^nleft (sum_{i=0}^{k}(-1)^{n-k}C_n^kC_k^i ight) b_i \
    & = b_n
    end{aligned}
    end{equation}
    ]

    设n个元素的错排数为(D_n),那么刚好k个元素错排数为:(C_{n}^{n-k}D_k),显然(sum_{k=0}^nC_{n}^{n-k}D_k=n!)。

    那么:

    [
    egin{equation}
    egin{aligned}
    D_n &=sum_{k=0}^{n}(-1)^{n-k}C_n^kk! \
    &= n! sum_{k=0}^{n}(-1)^{n-k}frac{1}{(n-k)!}\
    &= n! sum_{r=0}^{n}frac{(-1)^r}{r!}\
    &=n!sum_{r=2}^{n}frac{(-1)^r}{r!}
    end{aligned}
    end{equation}
    ]

    得到相同的结论。

    留几个好玩的链接:

    http://www.sec.ntnu.edu.tw/Monthly/102(356-365)/365-PDF/03-102036-%E6%8E%92%E5%AE%B9%E5%8E%9F%E7%90%86%E5%8F%8A%E6%87%89%E7%94%A8%E8%88%89%E4%BE%8B(%E6%9C%88%E5%88%8AOK).pdf

    http://www.yau-awards.org/paper/%E7%AC%AC%E5%9B%9B%E5%B1%8A%E4%B8%98%E6%88%90%E6%A1%90%E4%B8%AD%E5%AD%A6%E7%BA%AF%E6%95%B0%E5%AD%A6%E5%A5%96%E8%B5%9B%E5%8C%BA%E8%AE%BA%E6%96%87/E/E09.%E5%85%B3%E4%BA%8E%E9%94%99%E6%8E%92%E9%97%AE%E9%A2%98%E7%9A%84%E6%80%9D%E8%80%83%E4%B8%8E%E8%AE%A8%E8%AE%BA.pdf

    http://wenku.baidu.com/view/d298820879563c1ec5da7120.html

    http://cs.tju.edu.cn/faculty/zhangkl/teaching/comb/lec10.pdf

    http://blog.csdn.net/acdreamers/article/details/23840391

    http://zh.wikipedia.org/zh/%E5%8F%8D%E6%BC%94

    http://www.isnowfy.com/mobius-inversion/

    http://wenku.baidu.com/view/38a846eb551810a6f52486a2

    http://wenku.baidu.com/view/9e1a5829647d27284b735195.html

  • 相关阅读:
    阿里terway源码分析
    golang timeoutHandler解析及kubernetes中的变种
    第四章 控制和循环
    关于 自媒体的声明
    java用正则表达式获取url的域名
    javaweb三大核心基础技术
    NumPy之计算两个矩阵的成对平方欧氏距离
    C/C++之计算两个整型的平均值
    C/C++代码优化之整型除以2的指数并四舍五入
    SSE系列内置函数中的shuffle函数
  • 原文地址:https://www.cnblogs.com/hzf-sbit/p/3991973.html
Copyright © 2020-2023  润新知