斯特林数(Stirling number)
第一类斯特林数:
形如$\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)的更多相关文章
- 【算法】第二类斯特林数Stirling
第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数,记为 或者 . 第二类Stirling数的推导和第一类Stirling数类似,可以从定义出发考虑第n+1个元 ...
- 学习总结:斯特林数( Stirling number )
基本定义 第一类斯特林数:$1 \dots n$的排列中恰好有$k$个环的个数:或是,$n$元置换可分解为$k$个独立的轮换的个数.记作 $$ \begin{bmatrix} n \\ k \end{ ...
- poj 1430 Binary Stirling Number 求斯特林数奇偶性 数形结合| 斯特林数奇偶性与组合数的关系+lucas定理 好题
题目大意 求子集斯特林数\(\left\{\begin{matrix}n\\m\end{matrix}\right\}\%2\) 方法1 数形结合 推荐一篇超棒的博客by Sdchr 就是根据斯特林的 ...
- 特殊计数序列——第一类斯特林(stirling)数
第一类斯特林数 在这里我因为懒所以还是用\(S(n,m)\)表示第一类斯特林数,但一定要和第二类斯特林数区分开来 递推式 \(S(n,m)=S(n-1.m-1)+S(n-1,m)*(n-1)\) 其中 ...
- 特殊计数序列——第二类斯特林(stirling)数
计算式 \[ S(n,m)=S(n-1,m-1)+mS(n,m) \] \(S(0,0)=1,S(i,0)=0(i>0)\) 组合意义 将\(n\)个不可分辨的小球放入\(m\)个不可分辨的盒子 ...
- 【poj1430】Binary Stirling Numbers(斯特林数+组合数)
传送门 题意: 求\(S(n,m)\% 2\)的值,\(n,m\leq 10^9\),其中\(S(n,m)\)是指第二类斯特林数. 思路: 因为只需要关注奇偶性,所以递推式可以写为: 若\(m\)为偶 ...
- 【HDU 4372】 Count the Buildings (第一类斯特林数)
Count the Buildings Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- HDU2643(SummerTrainingDay05-P 第二类斯特林数)
Rank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU3625(SummerTrainingDay05-N 第一类斯特林数)
Examining the Rooms Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
随机推荐
- nexys4-DDR开发板温度传感器ADT7420U
1. 用这个板子做个什么功能来学习?板子上有个温度传感器,看下官方是否有例程,板子售价1780元,相当的贵,下面是I2C接口, 看下芯片的引脚图 2. 资料下载地址,得注册账号 https://ref ...
- MySQL数据库服务器逐渐变慢分析
第一步 检查系统的状态 1.1 使用sar来检查操作系统是否存在IO问题 #sar -u 2 10 — 即每隔2秒检察一次,共执行20次. [root@CacheMemCache tester]# s ...
- Django 2.0官方文档中文 渣翻 总索引(个人学习,欢迎指正)
Django 2.0官方文档中文 渣翻 总索引(个人学习,欢迎指正) 置顶 2017年12月08日 11:19:11 阅读数:20277 官方原文: https://docs.djangoprojec ...
- Android 序列化比对
本文转自:https://www.zybuluo.com/linux1s1s/note/91046 注:部分内容有更改 在Android中使用序列化,无非两种途经: Parcelable 和 Seri ...
- jmeter使用beanshell构造参数化
1.先在本地写一个java类,用来随机生成一个数字,如: package com.jmeter.test; public class BeanShellTest { public int getRan ...
- cachel-control
nodejs: res.set('Cache-Control', 'public, max-age=31557600'); express全局设置: app.use(express.sta ...
- Android应用AsyncTask处理机制详解及源码分析
1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知识点.前面我们分析了Handler异步机制原理(不了解的可以阅读我的<Android异步消息处理机 ...
- 免费天气预报API接口
一.中国气象局(http://www.weather.com.cn) 1.实时接口 http://mobile.weather.com.cn/data/sk/101010100.html http:/ ...
- 第三十三篇 Python中关于OOP(面向对象)的常用术语
面向对象的优点 从编程进化论可知,面向对象是一种更高等级的结构化编程方式,它的好处主要有两点: 1. 通过封装明确了内外,你做为类的缔造者,你就是女娲,女娲造物的逻辑别人无需知道,女娲想让你知道,你才 ...
- 孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5
孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...