第一类斯特林数

定义

$S_1(n,m)$表示$n$个元素,形成$m$个环的方案数,记作$\begin{bmatrix}n\\m\end{bmatrix}$。

其中每个元素是不同的,每个环是相同的。

递推公式

从实际含义上去考虑,第一类斯特林数递推公式为:

$\begin{bmatrix}n\\m\end{bmatrix}=\begin{bmatrix}n-1\\m-1\end{bmatrix}+(n-1)*\begin{bmatrix}n-1\\m\end{bmatrix}$

分别对应形成新的环,方案数即$\begin{bmatrix}n-1\\m-1\end{bmatrix}$。

接在原来的一个环中一个元素的后面,方案数即$(n-1)*\begin{bmatrix}n-1\\m\end{bmatrix}$

一些简单性质

1.第一类斯特林数第$n$行的和为$n!$,即

$\sum \limits_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}=n!$

考虑$n!$,表示$n$个元素的排列。建立$i \rightarrow p_i$的置换,显然会形成若干个环。

这与第一类斯特林数在第$n$行的的一种方案是一一对应的。

2.第一类斯特林数的一个用途是用通常幂表示上升幂,有

$x^{\overline n}=\sum \limits_{i=0}^n \begin{bmatrix}n\\i\end{bmatrix}x^i$

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

当$n=0$,原式$x^{\overline 0}=1=x^0$显然成立。

$x^{\overline n}=\sum \limits_{i=0}^n \begin{bmatrix}n\\i\end{bmatrix}x^i$

设原式在$n$时成立,只要证原式在$n+1$时也成立。

左右同乘$x+n$可得,$x^{\overline n+1}=x^{\overline n}*(x+n)$

$=\sum \limits_{i=0}^n \begin{bmatrix}n\\i\end{bmatrix}x^i*(x+n)$

$=\sum \limits_{i=0}^{n+1} \begin{bmatrix}n+1\\i\end{bmatrix}x^i$

3.对于通常幂,显然有$x^n=(-x)^n*(-1)^n$

对于下降幂和上升幂,同样有

$x^{\overline n}=(-x)^{\underline n}*(-1)^n$

$x^{\underline n}=(-x)^{\overline n}*(-1)^n$

将该式代入$x^{\overline n}=\sum \limits_{i=0}^n \begin{bmatrix}n\\i\end{bmatrix}x^i$

整理可得用通常幂表示下降幂的式子

$x^{\underline n}=\sum \limits_{i=0}^n \begin{bmatrix}n\\i\end{bmatrix}(-1)^{n-i}x^i$

求法

对于同一行第一类斯特林数的求解,可以直接利用第二个性质。

对$x^{\overline n}$做分治$fft$即可。

这个做法的复杂度是$O(nlog^2n)$的,可以用一些做法优化到一个log,待补。

第二类斯特林数

定义

$S_2(n,m)$表示$n$个元素,形成$m$个集合的方案数,记作$\begin{Bmatrix}n\\m\end{Bmatrix}$。

其中每个元素是不同的,每个集合是相同的。

递推公式

从实际含义上去考虑,第二类斯特林数递推公式为:

$\begin{Bmatrix}n\\m\end{Bmatrix}=\begin{Bmatrix}n-1\\m-1\end{Bmatrix}+m*\begin{Bmatrix}n-1\\m\end{Bmatrix}$

分别对应形成新的集合,方案数即$\begin{Bmatrix}n-1\\m-1\end{Bmatrix}$。

加入任意一个已有的集合,方案数即$m*\begin{Bmatrix}n-1\\m\end{Bmatrix}$

一些简单性质

1.第二类斯特林数的一个用途是用下降幂表示通常幂,有

$x^n=\sum \limits_{i=0}^n \begin{Bmatrix}n\\i\end{Bmatrix}x^{\underline i}$

证明(1) 通过数学归纳法,与第一类斯特林数的证明类似,这里略过。

证明(2) 考虑$x^n$的实际含义,将$n$个不同元素放入$x$个不同集合中。

有$x^n=\sum_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}\binom{x}{i} i!$

因为第二类斯特林数中的集合是无差别的,所以最后应当乘上$i!$。

整理上式可得要证的式子,实际上这个含有组合数的公式也是有时候要化成的形式。

2.同样代入负数形式,可得用上升幂表示通常幂的形式,即

$x^n=\sum \limits_{i=0}^n \begin{Bmatrix}n\\i\end{Bmatrix}(-1)^{n-i}x^{\overline i}$。

求法

单点求解第二类斯特林数存在一种$O(n)$的容斥方法。

设共有n个不同元素,为了方便,设共有m个不同集合。

设$g_x$表示恰好$x$个集合为空的方案数。

设$f_x$表示钦定$x$个集合为空的方案数,有

$f_x=\binom{m}{x}(m-x)^n$

$f_x=\sum \limits_{i=x}^{m}\binom{i}{x}g_i$

由二项式反演得

$g_x=\sum \limits_{i=x}^{m}(-1)^{i-x}\binom{i}{x}f_i$。

代入$x=0$,可得

$\begin{Bmatrix}n\\m\end{Bmatrix}=\frac{1}{m!}*\sum \limits_{i=0}^{m}(-1)^i\binom{m}{i}(m-i)^n$

拆一拆就发现这个玩意是个卷积式,所以求同一行第二类斯特林数可以做到$O(nlogn)$。

斯特林数 java实现_关于斯特林数相关推荐

  1. 斯特林数 java实现_斯特林数学习笔记

    定义 第一类斯特林数\(s(n,m)\)表示把\(n\)个不同元素放到\(m\)个相同圆排列里的方案数. 有转移方程: \[s(n,m)=s(n-1,m-1)+(n-1)\times s(n-1,m) ...

  2. 斯特林数 java实现_斯特林数 - BILL666 - 博客园

    第一类斯特林数 定义 \(\left[\begin{matrix}n\\m\end{matrix}\right]\) 表示将\(n\)个带标号的元素放入\(m\)个不带标号的环的方案数 递推式 \[\ ...

  3. 1000以内所有同构数java算法_使用c语言求1到1000同构数的代码

    使用c语言求1到1000同构数的代码 发布时间:2020-04-30 14:39:17 来源:亿速云 阅读:679 作者:小新 今天小编给大家分享的是使用c语言求1到1000同构数的代码,相信很多人都 ...

  4. 对称数java算法_对称数的简单实现

    在百度面试题中看到这样一个题,可能比较老套了,这里为了学习,自己写了改写了个简单算法. 我们把一个数字倒着读和原数字相同的数字称之为对称数, (例如1,121,88,8998),不考虑性能,请找出1- ...

  5. 斐波那契数java实现_斐波那契数列Java实现[剑指offer]

    描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 题解 1.递归实现 采用递归的方式进行实现时,从第n个节点向下递归时,存 ...

  6. 【组合数学】第一类,第二类斯特林数(Stirling),Bell数

    第一类斯特林数 定理: 第一类斯特林数S1(p,k)计数的是把p个对象排成k个非空循环排列的方法数. 证明:把上述定理叙述中的循环排列叫做圆圈 递推公式: S1(p,p)=1(p>=0),有p个 ...

  7. java压测请求线程数_程序员撕开京东 618 大促压测的另一面 | 原力计划

    作者 | 天涯泪小武 责编 | 王晓曼 出品 | CSDN博客 前天618大促演练进行了全链路压测,在此之前刚好我的热key探测框架也已经上线灰度一周了,小范围上线了几千台服务器,每秒大概接收几千个k ...

  8. java 统计文本行数_统计文本文件的行数,单词书,字节数

    [java]代码库import java.io.*; /** * 统计文本文件的行数,单词书,字节数 */ class WordCount { public static int words = 1; ...

  9. java 36 进制_数学-在Java中如何将十进制数转换为以36为底的数字?

    数学-在Java中如何将十进制数转换为以36为底的数字? 如果我有一个十进制数字,如何在Java中将其转换为以36为基数? slavoj asked 2020-07-13T23:15:07Z 10个解 ...

  10. tb计算机存储单位_如何节省数TB的云存储

    tb计算机存储单位 Whatever cloud provider a company may use, costs are always a factor that influences decis ...

最新文章

  1. 整理一份详细的数据预处理方法
  2. (转载)Nutch2 WebPage 字段解释
  3. C# 代码注释生成代码提示和帮助文档
  4. Python机器学习基础教程(一):简介
  5. 系统级芯片设计语言和验证语言的发展
  6. 权限管理----用户与角色关系
  7. 推荐一个字体工具:Fontmin
  8. PHP Error(不定时更新)
  9. 关于m3u8中的IV参数
  10. CSS的选择器(超详细!!)
  11. 程序员编程规范之注释
  12. css样式字体文本汇总
  13. 计算机网络谢希仁(1)
  14. NameError: name ‘XXX‘ is not defined
  15. 腾讯云函数 python_腾讯云函数添加依赖方法之官方方案
  16. 中兴N880S使用SuperOneClick2.1.1出现waiting device
  17. ES6 解构赋值学习
  18. 各种License介绍
  19. java接入短信平台源码
  20. asc和desc的区别

热门文章

  1. 小心,家中路由器发出的WiFi信号可能让你家变“透明”
  2. 长春甲骨文华育兴业|大数据社会的十三大具体应用场景
  3. 【深入浅出向】从自信息到熵、从相对熵到交叉熵,nn.CrossEntropyLoss, 交叉熵损失函数与softmax,多标签分类
  4. Adobe Acrobat 如何通过书签制作多级目录
  5. 计算机二进制祖宗是西方人?中国道教一张八卦图千年前早已解释!
  6. foxmail设置,服务器备份(很实用)
  7. 12年双11:从春雷到秋实,为复苏喝彩
  8. Excel使用技巧大全
  9. 网络翻译-利用有道接口
  10. Android截屏截图方法所有方法汇总(包括Activity、View、ScrollView、ListView、RecycleView、WebView截屏截图)