zoukankan      html  css  js  c++  java
  • 容斥法解决错排问题

    错排问题

    简单来说,错排问题就是问有多少个长度为(n)的排列(p),使得对于所有的(iin [1,n])都有(i eq p_i)

    递推式

    错排的一个递推式就是(f(n)=(n-1)(f(n-1)+f(n-2)))

    这个递推式复杂度显然是线性的。

    关于这个递推式的推导请自行百度。这里不再赘述。

    容斥法解错排问题

    第一次看到错排问题的时候,并没有推导出上面的递推式。而是用了一种容斥的方法。自认为更加简单易懂吧。

    既然是每个数字都不能放在对应的位置。那么按照容斥的一般套路,我们强制有(i)个数字放在了对应位置。其他数字不管他。显然这(i)个数字有(C(_n^i))种方案。其他数字有((n-i)!)种排列方式。

    所以式子就很显然了:

    [f(n)=sumlimits_{i=0}^n(-1)^iC(_n^i)(n-i)! \ =sumlimits_{i=0}^n(-1)^ifrac{n!}{i!} ]

    复杂度同样也是线性的。

    其实可以发现,用容斥继续推下去的话,依然可以推出上面的递推式。所以这两种解法本质上是等价的。

  • 相关阅读:
    tomcat配置数据源
    Spring 配置详解
    典型的软件开发模型
    600字让你读懂Git
    JVM的自愈能力
    Maven的pom.xml文件详解
    如何使用Log4j
    掌握jQuery插件开发,这篇文章就够了
    CSS Gradient详解
    CSS Transition
  • 原文地址:https://www.cnblogs.com/wxyww/p/cuopai.html
Copyright © 2011-2022 走看看