在组合数学,Stirling 数可指两类数,第一类Stirling 数和第二类 Stirling 数,都是由18世纪数学家 James Stirling 提出的。
Stirling 数有两种,第一类和第二类Stirling 数

第一类斯特林数:

形如$\left[\begin{matrix}n\\m\end{matrix}\right]$,也写作 $s(n,k)$

组合意义:

$s(n,k)$ 表示吧$n$个数分成$k$组,每组是一个环,求分成的方案数。

也就是一个轮子,怎么转都是一样的,如:1,2,3,4 和 4,1,2,3 只算一种方案。

递推式:

$$s(n+1,2)=s(n,1)+s(n,2)\cdot n$$

即要么自成一个环,要么加入其它$k$个环,可以插入$n-1$个位置。(每两个数之间)

当然边界条件$\left[\begin{matrix}0\\0\end{matrix}\right]=1$

性质:

1. $s(n,1)=(n-1)!$

2. $s(n,2)=(n-1)!\times\sum_{i=1}^{n-1}\frac{1}{i}$

3. $\sum_{i=0}^n s(n,k)=n!$

证明:

1. 显然,我们把$n$个元素排列起来,有$n!$种可能,首尾相接即可得到一个环。这里面每种情况重复了$n$次,因为可以旋转$n$次,所以除以$n$,得到$s(n,1)=(n-1)!$。

2. 通过数学归纳法可以证明。

\begin{align*}s(n+1,2)&=s(n,1)+s(n,2)\cdot n \\&=(n-1)!+n(n-1)!\sum _{i=1}^{n-1}\frac{1}{i} \\&=(n-1)!+n!\sum _{i=1}^{n-1}\frac{1}{i} \\&=\frac{n!}{n}+n!\sum _{i=1}^{n-1}\frac{1}{i} \\&=n!\sum _{i=1}^{n}\frac{1}{i} \\\end{align*}

3. 这里有一个巧妙地“算两次”方法。
 首先构造一个问题,求$n$个数的所有排列。
 首先用乘法原理直接得出结论,$ans=n!$。
 我们知道,对于一个排列对应一个置换,即:

\begin{pmatrix}
1 & 2 & ... & n \\ a_1 & a_2 & ... & a_n
\end{pmatrix}

把这个置换中的上下对应位置连边,可以得到许多的环。由于排列和置换是一一对应的,所以我们要求排列的个数,就是求用$n$个元素组成环的方案数,所以我们枚举环的个数:

$$n!=\sum_{k=1}^ns(n,k)$$

由于我们有$s(n,0)=0$,所以也可以写成:

$$\sum_{k=0}^ns(n,k)=n!$$

第二类斯特林数:

形如$\left\{\begin{matrix}n\\k\end{matrix}\right\}$,也写作 $S(n,k)$

组合意义:

$S(n,k)$ 表示吧$n$个数分成$k$组,组内无序,每组没有区别。

递推式:

\begin{align*}\begin{Bmatrix}n\\k\end{Bmatrix}=\begin{Bmatrix}n-1\\k-1\end{Bmatrix}+\begin{Bmatrix}n-1\\k\end{Bmatrix}*k\\\end{align*}

即要么自成一个组,要么加入其它$k$个组,可以插入$k$个组。

当然边界条件$\left\{\begin{matrix}0\\0\end{matrix}\right\}=1$

性质:

没有什么特别常用的。

通项公式:

$$S(n,m)=\frac{1}{m!} \sum _{k=0}^m (-1)^kC_m^k(m-k)^n$$

大概就是容斥原理,$k$枚举有多少个集合是空的,每种情况有$C^k_m$种空集情况,$n$个元素可以放进非空的$m-k$个集合中。这样求出来的答案是有序的,所以我们除以$m!$使得其变为无序。

卷积形式:

它具有卷积的形式$\begin{align*}\left\{\begin{matrix}n\\m\end{matrix}\right\}=\sum\limits_{k=0}^m\dfrac{(-1)^k}{k!}\dfrac{(m-k)^n}{(m-k)!}\end{align*}$

可以用FFT在$O(m\log_2m)$的时间内算出$\left\{\begin{matrix}n\\1\end{matrix}\right\}\cdots\left\{\begin{matrix}n\\m\end{matrix}\right\}$

转化幂:

第二类斯特林数可以用于转化幂:$\begin{align*}x^n=\sum\limits_{k=1}^n\left\{\begin{matrix}n\\k\end{matrix}\right\}x^\underline k\end{align*}$,可以用归纳法证明

\begin{align*}x^n&=x\sum\limits_{k=1}^{n-1}\left\{\begin{matrix}n-1\\k\end{matrix}\right\}x^\underline k\\&=\sum\limits_{k=1}^{n-1}\left\{\begin{matrix}n-1\\k\end{matrix}\right\}(x^\underline{k+1}+kx^\underline k)\\&=\sum\limits_{k=1}^n\left\{\begin{matrix}n-1\\k-1\end{matrix}\right\}x^\underline k+\sum\limits_{k=1}^n\left\{\begin{matrix}n-1\\k\end{matrix}\right\}kx^\underline k\\&=\sum\limits_{k=1}^n\left\{\begin{matrix}n\\k\end{matrix}\right\}x^\underline k\end{align*}

斯特林数(Stirling number)的更多相关文章

  1. 【算法】第二类斯特林数Stirling

    第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数,记为 或者 . 第二类Stirling数的推导和第一类Stirling数类似,可以从定义出发考虑第n+1个元 ...

  2. 学习总结:斯特林数( Stirling number )

    基本定义 第一类斯特林数:$1 \dots n$的排列中恰好有$k$个环的个数:或是,$n$元置换可分解为$k$个独立的轮换的个数.记作 $$ \begin{bmatrix} n \\ k \end{ ...

  3. poj 1430 Binary Stirling Number 求斯特林数奇偶性 数形结合| 斯特林数奇偶性与组合数的关系+lucas定理 好题

    题目大意 求子集斯特林数\(\left\{\begin{matrix}n\\m\end{matrix}\right\}\%2\) 方法1 数形结合 推荐一篇超棒的博客by Sdchr 就是根据斯特林的 ...

  4. 特殊计数序列——第一类斯特林(stirling)数

    第一类斯特林数 在这里我因为懒所以还是用\(S(n,m)\)表示第一类斯特林数,但一定要和第二类斯特林数区分开来 递推式 \(S(n,m)=S(n-1.m-1)+S(n-1,m)*(n-1)\) 其中 ...

  5. 特殊计数序列——第二类斯特林(stirling)数

    计算式 \[ S(n,m)=S(n-1,m-1)+mS(n,m) \] \(S(0,0)=1,S(i,0)=0(i>0)\) 组合意义 将\(n\)个不可分辨的小球放入\(m\)个不可分辨的盒子 ...

  6. 【poj1430】Binary Stirling Numbers(斯特林数+组合数)

    传送门 题意: 求\(S(n,m)\% 2\)的值,\(n,m\leq 10^9\),其中\(S(n,m)\)是指第二类斯特林数. 思路: 因为只需要关注奇偶性,所以递推式可以写为: 若\(m\)为偶 ...

  7. 【HDU 4372】 Count the Buildings (第一类斯特林数)

    Count the Buildings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  8. HDU2643(SummerTrainingDay05-P 第二类斯特林数)

    Rank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. HDU3625(SummerTrainingDay05-N 第一类斯特林数)

    Examining the Rooms Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

随机推荐

  1. 【WPF】 布局篇

    [WPF] 布局篇 一. 几个常用且至关重要的属性 1. Width,Height : 设置窗体,控件宽高. 这里注意,WPF是自适应的, 所以把这2个属性设置 Auto, 则控件宽高会自动改变. 2 ...

  2. Qt Charts实践

    Qt Charts的横空出世标志着QWT,QCustomPlot .....时代的终结,让我们开始使用QtCharts吧 在Qt 5.7.0中已经集成了Qt Charts模块,需要在安装Qt的时候把C ...

  3. 虚拟现实-VR-UE4-LEAP-Motion手势识别

    点击打开链接今天到手一个新东西,LEAP手势识别仪. 关于LEAP Leap是一家面向PC以及Mac的体感控制器制造公司. 具体信息百度百科http://baike.baidu.com/link?ur ...

  4. 第二十三篇 logging模块(******)

    日志非常重要,而且非常常用,可以通过logging模块实现. 热身运动 import logging logging.debug("debug message") logging. ...

  5. CSS3 : box-shadow

    box-shadow 用于设置边框阴影,语法: box-shadow: h-shadow v-shadow blur spread color inset; -moz-box-shadow: h-sh ...

  6. LeetCode 21 ——合并两个有序链表

    1. 题目 2. 解答 新建一个带有哨兵结点的链表,依次比较两个有序链表的结点值,将较小值的结点插入到新链表后面.直到其中一个比较完毕,将另一个链表剩余的结点全部放到新链表最后面即可.最后,可以删除哨 ...

  7. 第5讲——cin处理字符输入

    本来这一讲应该是while.for.if之类的,但是,我们可是学过C的男人,再浪费时间搞这个??? 还不如学点C++中的新知识. cin对象支持3种不同模式的单字符输入,其用户接口各不相同. 下面我们 ...

  8. python 生成csv乱码问题解决方法

    需求背景 最近为公司开发了一套邮件日报程序,邮件一般就是表格,图片,然后就是附件.附件一般都是默认写到txt文件里,但是PM希望邮件里的附件能直接用Excel这种软件打开,最开始想保存为Excel,但 ...

  9. 【iOS开发】字典的快速赋值 setValuesForKeysWithDictionary

    前言 在学习解析数据的时候,我们经常是这么写的:PersonModel.h文件中 @property (nonatomic,copy)NSString *name; @property (nonato ...

  10. linux网络编程中需要注意的信号SIGPIPE

    在调试cs时,s端循环收,c端循环发,s端意外崩溃后,c端自动退出,终端提示SIGPIPE导致c端退出.man 7 signal: SIGPIPE Term Broken pipe: write to ...