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. [翻译] MotionBlur

    MotionBlur https://github.com/fastred/MotionBlur MotionBlur allows you to add motion blur effect to ...

  2. 转载:python的编码处理(一)

    以下内容转载自: http://in355hz.iteye.com/blog/1860787 最近业务中需要用 Python 写一些脚本.尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些, ...

  3. JDBC 连接mysql获取中文时的乱码问题

    前段时间学习JDBC,要连接mysql获取数据.按照老师的样例数据,要存一些名字之类的信息,用的都是英文名,我当时就不太想用英文,就把我室友的名字存了进去,嘿嘿,结果,出问题了. 连接数据库语句: s ...

  4. 【Excel】如何用SUMIF实现SUMIFS的功能

    如何用SUMIF实现SUMIFS的功能   添加辅助列,辅助列内容为"条件区域1内容+条件区域内容2" 举个例子,我要挑选出"二车间"的"过桥过路费& ...

  5. MVC四大筛选器—AuthorizeFilter

    在Action的执行中包括两个重要的部分,一个是Action方法本身逻辑代码的执行,第二个就是Action方法的筛选器的执行. MVC4中筛选器都是以AOP(面向方面编程)的方式来设计的,通过对Act ...

  6. C# 词法分析器(一)词法分析介绍

    系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 虽然文章的标题是词法分析,但首先还是要从编译原理说开 ...

  7. Java执行CMD命令

    参见:https://blog.csdn.net/lixingshi/article/details/50467840 public static void runtimeCommand() thro ...

  8. 微信小程序 置顶/取消置顶

    wxml <view wx:for="{{confirmlist}}" wx:for-item="confirm" wx:for-index=" ...

  9. 隐马尔可夫(HMM)模型

    隐马尔可夫(HMM)模型 隐马尔可夫模型,是一种概率图模型,一种著名的有向图模型,一种判别式模型.主要用于时许数据建模,在语音识别.自然语言处理等领域广泛应用. 概率图模型分为两类,一类:使用有向无环 ...

  10. Python spli指定多个分隔符

    #!/usr/bin/python # -*- coding: UTF-8 -*- import re a='Beautiful, is; better*than\nugly' 以竖线"|& ...