zoukankan      html  css  js  c++  java
  • 错排递推式推导

    今天听课讲容斥,提到错排,突然发现错排公式什么的好像已经忘了233

    努力地回忆了一下,算出前几项,终于还原出了那个递推式↓

    f(n)=(n-1)*(f(n-1)+f(n-2))

    根据人赢的教导,只要思(yi)考(yin)下错排的构造就能记住了

    然后就认(meng)认(you)真(yi)真(yang)地思(yi)考(yin)了下

    用自己的理解把这玩意儿整理了一下↓

    先加一点平时我们说的错排通常是指1~n的排列a,满足a(i)≠i,

    其实脑补一下,它也可以看成A,B两个集合,|A|=|B|,对于每一个Ai,都对应唯一Bi,不同Ai对应Bi不同,现在强行改变对应方式,仍然是一对一,但是每一个Ai对应的Bi都不再是之前那个Bi,问方案数。

    假设要构造f(n),

    首先,必须满足a(n)≠n,则第n位只能取1~n-1,且第n位取1~n-1的任何一个数都是等价的

    令g(n)为前n位排好的方案数.

    那么f(n)=g(n-1)*(n-1),

    因为此时前n-1位数字不是1~n-1,而是1~n中除去任意一个x(x∈[1,n-1])的方案数,所以显然g(n-1)≠f(n-1)

    对于每一个k(k属于[1,n-1])

    存在前n-1位的构造根据第n个的摆放可以分成两种情况:

    1) n放在第k位,k放在第n位,剩下n-2的数满足n-2的错排,方案数为f(n-2)

    2) n不放在第k位,那么剩下n-1的数满足n-1的错排,方案数为f(n-1)

    要满足两种情况不重复,就必须满足1~n-1的任意一种错排方案的前n-2个数的排列一定不等于任意一种1~n-2的错排方案

    (很绕的一句话,不过显然是对的,因为假设存在相等,那么第n-1位只能放n-1,不满足错排)

    所以g(n-1)=f(n-1)+f(n-2)

    f(n)=(f(n-1)+f(n-2))*(n-1)

    所以就证好了

    其中初值还是很容易确定的,因为肯定要结合实际意义的嘛

    f(0)=1   不放

    f(1)=0   只有一个数,一个位置,显然不成立

    错排公式的原型长这样→f(n)=n![1/0!-1/1!+1/2!-1/3!+1/4!+...+(-1)^n/n!],可以通过容斥,递推式各种方法求,这里就不证了ww

    【写的有漏洞的,欢迎路过大神吐槽】

    2016-08-06 16:48:00

    Ending.

  • 相关阅读:
    Laya list 居中
    Laya for...in和for each...in
    idea中tomcat启动失败

    通过Mock测试控制器
    Mybatis查询sql传入一个字符串传参数,报There is no getter for property named 'ids' in 'class java.lang.String'。
    Application Server was not connected before run configuration stop, reason: Unable to ping server at localhost:1099
    System.getProperty("XXX")方法
    linux命令
    JDK,IDEA,Tomcat,maven,MySQL的安装
  • 原文地址:https://www.cnblogs.com/wry0112/p/5744399.html
Copyright © 2011-2022 走看看