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
n=0 1
n=1 0 1
n=2 0 1 1
n=3 0 2 3 1
n=4 0 6 11 6
n=5 0 24 50 35
n=6 0 120 274 225

一、定义

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
baike_baidu
\[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
n=0 1
n=1 0 1
n=2 0 1 1
n=3 0 1 3 1
n=4 0 1 7 6
n=5 0 1 15 25
n=6 0 1 31 90

一、定义

表示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\)

Catalan&Stirling数的更多相关文章

  1. 整理一点与排列组合有关的问题[组合数 Stirling数 Catalan数]

    都是数学题 思维最重要,什么什么数都没用,DP直接乱搞(雾.. 参考LH课件,以及资料:http://daybreakcx.is-programmer.com/posts/17315.html 做到有 ...

  2. Stirling数,Bell数,Catalan数,Bernoulli数

    组合数学的实质还是DP,但是从通式角度处理的话有利于FFT等的实现. 首先推荐$Candy?$的球划分问题集合: http://www.cnblogs.com/candy99/p/6400735.ht ...

  3. Bell数和Stirling数

    前面说到了Catalan数,现在来了一个Bell数和Stirling数.什么是Bell数,什么是Stirling数呢?两者的关系如何,有用于解决什么算法问题呢? Bell数是以Bell这个人命名的,组 ...

  4. lightOJ 1326 Race(第二类Stirling数)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1326 题意:有n匹马赛跑.问有多少种不同的排名结果.可以有多匹马的排名相同. 思路:排 ...

  5. 斯特灵数 (Stirling数)

    @维基百科 在组合数学,Stirling数可指两类数,都是由18世纪数学家James Stirling提出的. 第一类 s(4,2)=11 第一类Stirling数是有正负的,其绝对值是个元素的项目分 ...

  6. hdu 4372 第一类stirling数的应用/。。。好题

    /** 大意: 给定一系列楼房,都在一条水平线上,高度从1到n,从左侧看能看到f个, 从右侧看,能看到b个,问有多少种这样的序列.. 思路: 因为肯定能看到最高的,,那我们先假定最高的楼房位置确定,那 ...

  7. HDU 3625 Examining the Rooms:第一类stirling数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3625 题意: 有n个房间,每个房间里放着一把钥匙,对应能开1到n号房间的门. 除了1号门,你可以踹开任 ...

  8. HDU 4372 Count the Buildings:第一类Stirling数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4372 题意: 有n栋高楼横着排成一排,各自的高度为1到n的一个排列. 从左边看可以看到f栋楼,从右边看 ...

  9. [总结] 第二类Stirling数

    上一道例题 我们来介绍第二类Stirling数 定义 第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数,记为 或者 .和第一类Stirling数不同的是,集合 ...

随机推荐

  1. ExpressRoute 先决条件和清单

    若要使用 ExpressRoute 连接到 Azure 服务,需确认是否符合以下部分中所列的要求. 帐户要求 使用中的有效 Azure 帐户.需有此帐户才能设置 ExpressRoute 线路. 连接 ...

  2. [翻译] JKLLockScreenViewController

    JKLLockScreenViewController https://github.com/tiny2n/JKLLockScreenViewController Overview It is Loc ...

  3. [UI] 精美UI界面欣赏[9]

    精美UI界面欣赏[9]

  4. NSOperation的使用细节 [3]

    NSOperation的使用细节 [3] 这一节我们来写自定义concurrent的operation,自定义concurrent的operation稍微有点复杂,需要按照某些既定的步骤编写才可以完成 ...

  5. 可以简易设置文字内边距的EdgeInsetsLabel

    可以简易设置文字内边距的EdgeInsetsLabel 最终效果: 源码: EdgeInsetsLabel.h 与 EdgeInsetsLabel.m // // EdgeInsetsLabel.h ...

  6. 超简易复制Model对象(为后续备忘录设计模式博文做铺垫)

    超简易复制Model对象(为后续备忘录设计模式博文做铺垫) 复制整个Model需要实现NSCopy协议,可以想象是非常麻烦的一件事情,今天我跟大家分享一个不需要你做任何操作的复制Model对象的方法, ...

  7. zabbix日常监控项java(四又分之一)

    因zabbix自带监控JMX的模板通用性差的问题,需要我们自己新建一个属于自己的模板,于是本文就出现了.... 大部分都是参考网上其他博主的文档,在此作为梳理.总结:以方便自己日后使用查询.

  8. php操作redis的两个个小脚本

    redis这东西,查询起来没有mysql那么方便,只能自己写脚本了.下面是工作中写的两个小脚本 第一个脚本,查找有lottery|的键,将他们全部删除|打印出来 <?php $redis = n ...

  9. java StringBuilder案例

    实现输出字符串的长度,容量(容量不够则扩容),及内容 import java.util.Arrays; public class MyStringBuilderDemo { //任务:存储字符串并输出 ...

  10. 关于使用JQ scrollTop方法进行滚动定位

    没图我说个锤子,先来个自拍镇楼. 又到了每周周五总结时间.我广州刘德华又来讲故事了.这一周没啥任务,就一个任务,产品口头交代了两句,也没有psd没有设计图没有样式.自由发挥,你自己敲代码做个作品出来. ...