zoukankan      html  css  js  c++  java
  • Catalan&Stirling数

    Catalan&Stirling数

    Tags:数学

    作业部落

    评论地址


    Catalan数

    (1,1,2,5,14,42,132,429,1430,4862,16796,58786...)
    定义式

    [C[x+1]=C[0]C[x]+C[1]C[x-1]+C[2]C[x-2]...+C[x]C[0] ]

    一、递推公式

    [C[n]=frac{C[n-1]*(4*n-2)}{n+1}$$$$C[n]=frac{C(2n,n)}{n+1}$$$$C[n]=C(2n,n)-C(2n,n-1) ]

    二、应用举例

    • 给定(N)个节点,能构成多少种不同的二叉树?((C[N])种,相当于钦定根之后左右子树有(0..n)中选择,用定义式解释)
    • 售票处没有零钱,(n)(5)(n)(10)元的人,多少种排列可以满足每次都可以给(10)元的找零?((C[n])种,出栈序列,用定义式解释)
    • 在圆上选择(2n)个点,将这些点成对连接起来使得所得到的(n)条线段不相交的方法数?((C[n])种,相当于括号序列,左括号和右括号匹配,然后转化为出栈序列)

    第一类Stirling数

    此处只讨论无符号(Stirling)

    |s[n][k])|k=0|k=1|k=2|k=3|k=4|k=5|k=6|
    |-|--|--|--|--|
    |n=0|1||||
    |n=1|0|1|||
    |n=2|0|1|1|
    |n=3|0|2|3|1|
    |n=4|0|6|11|6|1|
    |n=5|0|24|50|35|10|1|
    |n=6|0|120|274|225|85|15|1|

    一、定义

    s[n][k]表示将n个不同的元素构成k个圆排列的方案数
    定义式为((x^{n↑})表示(x)(n)次上升幂)$$x^{n↑} =x(x+1)(x+2)...(x+n-1) =s[n][0]+s[n][1]x+s[n][2]x^2+...+s[n][n]*x^n$$

    二、递推式

    [s[n][k]=s[n-1][k-1]+(n-1)*s[n-1][k]$$两种证明: 1、将第$n+1$个元素插入,那么可以新开一个圆$+s[n][k-1]$,或者插入原来的圆中$+n*s[n][k]$ 2、$x^{(n+1)↑}=x^{n↑}*(x+n)$通过这个式子得到 ###**三、性质** [dalao_blog](https://www.cnblogs.com/owenyu/p/6724661.html) [baike_baidu](https://baike.baidu.com/item/%E6%96%AF%E7%89%B9%E6%9E%97%E6%95%B0/4938529) $$s[1][1]=1,s[n][0]=s[n][k]=0,(n>0,k>n)$$$$s[n][1]=(n-1)!$$$$sum_{k=0}^{n}s[n][k]=n!]

    可以做下这题:HN2018省队集训 6.25T2

    第二类Stirling数

    |S[n][k])|k=0|k=1|k=2|k=3|k=4|k=5|k=6|
    |-|--|--|--|--|
    |n=0|1||||
    |n=1|0|1|||
    |n=2|0|1|1|
    |n=3|0|1|3|1|
    |n=4|0|1|7|6|1|
    |n=5|0|1|15|25|10|1|
    |n=6|0|1|31|90|65|15|1|

    一、定义

    表示n个有区别的球放入k个相同的盒子中的方案数
    也就是将n个数拆成k个非空部分的方案数

    二、递推式

    [S[n][k]=S[n-1][k-1]+k*S[n-1][k]$$意思为第$n$个球可以新开一个盒子也可以放在原来的盒子中 ###**三、计算式** $$S[n][k]=frac{1}{k!}[k^n-C[k][1](k-1)^n+C[k][2](k-2)^n-...+(-1)^{k-1}C[k][k-1]1^n]$$也就是$$S[n][k]=frac{1}{k!}sum_{i=0}^{k}(-1)^iC[k][i](k-i)^n$$把组合数给拆掉$$S[n][k]=sum_{i=0}^{k}frac{(-1)^i(k-i)^n}{i!(k-i)!}$$就**化成了卷积的形式了,可以用$NTT$在$O(nlogn)$时间内求得$S[n]$** 原理是把n个有区别的球放入k个有区别的盒子里的方案数是$k!S[n][k]$,也是至少有0个空盒的方案数-至少有1个空盒的方案数+至少有两个空盒的方案数......属于组合数类型的容斥 ###**四、拓展** 1、把$n$个**有**区别的球放入$k$个**有**区别的盒子里**不能**有空盒的方案数 2、把$n$个**无**区别的球放入$k$个**有**区别的盒子里**允许**有空盒的方案数 前者是$k!*S[n][k]$,表示盒子进行排列 后者是$C(n+k-1,n)$,相当于在$k$中元素中取$n$个作为允许重复的组合,可重组合公式见《组合数学》$P20$]

  • 相关阅读:
    在main函数中使用django模型(附django正反向的外键关联查询)
    使用正则表达式替换文本内容
    spring 上下文和spring mvc上下文和web应用上下文servletContext之间的关系
    idea快捷键
    Spring MVC的jar包版本问题
    Spring MVC的参数类型转换
    HiddenHttpMethodFilter进行请求过滤,实现Rest风格的url
    Spring MVC的异常处理
    Spring MVC 的拦截器
    @ResponseBody&@RequestBody
  • 原文地址:https://www.cnblogs.com/xzyxzy/p/9251029.html
Copyright © 2011-2022 走看看