定义

第一类斯特林数\(s(n,m)\)表示把\(n\)个不同元素放到\(m\)个相同圆排列里的方案数。

有转移方程:

\[s(n,m)=s(n-1,m-1)+(n-1)\times s(n-1,m)

\]

第二类斯特林数\(S(n,m)\)表示把\(n\)个不同元素放到\(m\)个相同集合里的方案数。

有转移方程:

\[S(n,m)=S(n-1,m-1)+m\times S(n-1,m)

\]

还有一些我自己的定义:

\(x\)的\(n\)次下降幂\(x_{(n)}=\prod_{i=0}^{n-1} (x-i)\)。

\(x\)的\(n\)次上升幂\(x^{(n)}=\prod_{i=0}^{n-1} (x+i)\)。

(只是因为我不会LaTeX写这东西而已)

求法

第一类斯特林数

求一行

有一个式子:

\[\sum_{k=0}^n s(n,k)x^k=\prod_{i=0}^{n-1}(x+i)=x^{(n)}

\]

利用数学归纳法来证明:

\[\begin{align*}

&x^{(n+1)}\\

=&(x+n)\sum_{i=0}^n s(n,i)x^i\\

=&\sum_{i=0}^{n+1}(s(n,i-1)+n\times s(n,i))x^i\\

=&\sum_{i=0}^{n+1}s(n+1,i)x^i

\end{align*}

\]

直接暴力分治FFT可以做到\(O(n\log^2 n)\),但还可以更好。

\[F_n(x)=\prod_{i=0}^{n-1}(x+i)=x^{(n)}

\]

由于\(F_{2n}(x)=F_n(x)F_n(x+n)\),所以求解\(F_{2n}(x)\)时,可以先求出

\[F_n(x)=\sum_{i=0}^n a_ix^i

\]

那么就有

\[\begin{align*}

F_n(x+n)&=\sum_{i=0}^n a_i(x+n)^i\\

&=\sum_{i=0}^n a_i\sum_{k=0}^i x^kn^{i-k}{i\choose k}\\

&=\sum_{k=0}^nx^k\frac{1}{k!}\sum_{i=k}^n a_i i!n^{i-k}\frac 1{(i-k)!}

\end{align*}

\]

后面显然是个卷积的形式,可以FFT求出来。

两边都有之后就可以乘在一起了。复杂度\(O(n\log n)\)。

求一列

同样是生成函数,把\(n\)个球丢进一个圆排列的方案数的质数生成函数是

\[\sum_{n>0} (n-1)!\frac{1}{n!}x^n

\]

那么丢进\(m\)个无序圆排列就是

\[\frac 1 {m!}(\sum_{n>0} (n-1)!\frac{1}{n!}x^n)^m

\]

然后多项式快速幂。

第二类斯特林数

求一行

由组合意义可得

\[n^m=\sum_{k=0}^m k!{n\choose k} S(m,k)

\]

等价于

\[n^m=\sum_{k=0}^n k!{n\choose k} S(m,k)

\]

二项式反演,得

\[k!S(m,k)=\sum_{i=0}^k i^m(-1)^{k-i}{k\choose i}

\]

(上式直接容斥也可以得到相同结果)

可以发现展开之后就是一个卷积,暴力FFT即可。

求一列

等价于分成\(m\)个集合不变,丢\(n\)个球进去,使得集合非空。

考虑\(n\)个球放入一个集合中的方案数的指数生成函数,就是

\[\sum_{n} [n\ne 0]\frac{1}{n!}x^n

\]

也就是

\[e^x-1

\]

那么\(m\)个不同集合,生成函数就是

\[(e^x-1)^m

\]

由于集合无序,所以变成

\[\frac 1 {m!}(e^x-1)^m

\]

然后可以多项式快速幂。

斯特林反演

这里丢个式子,并不打算证明qwq

\[f_n=\sum_{k=0}^n s(n,k)g_k\Leftrightarrow g_n=\sum_{k=0}^n (-1)^{n-k}S(n,k)f_k

\]

斯特林数与上升、下降、普通幂的关系

首先有上升下降幂之间的转化:

\[x^{(n)}=(-1)^n (-x)_{(n)}\\

x_{(n)}=(-1)^n(-x)^{(n)}

\]

较为显然,不证明。

然后有上面一个式子:

\[x^{(n)}=\sum_{i=0}^n s(n,i)x^i

\]

反演得到

\[x^n=\sum_{i=0}^n (-1)^{n-i}S(n,i)x^{(i)}

\]

上升和下降转化一下得到

\[x_{(n)}=\sum_{i=0}^n s(n,i)x^{i}(-1)^{n-i}

\]

把\(x\)替换为\(-x\)又可以得到

\[x^n=\sum_{i=0}^n S(n,i)x_{(i)}

\]

诸如此类……

总结一下,应该都是普通转上升/下降时用第二类,上升/下降转普通时用第一类。这也许和斯特林数最基本的定义有关。

其他一些可能有用的东西

\[S(n+1,m+1)=\sum_k{n\choose k}S(k,m)

\]

利用组合意义很容易理解。

\[s(n+1,m+1)=\sum_k s(n,k){k\choose m}

\]

这个学长不知道怎么组合意义,那我更不会了qwq

update:会了。

考虑后面的式子的意义,就是选出一些元素组成 \(m\) 个圆排列,剩下的随便搞。

那么就等价于加入一个特殊元素,分成 \(m+1\) 个圆排列,其中没有特殊元素的圆排列就是需要的 \(m\) 个圆排列,剩下的从特殊元素这里断开,可以对应到一个排列,而众所周知一个排列即可对应到任意组合的圆排列。

斯特林数 java实现_斯特林数学习笔记相关推荐

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

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

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

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

  3. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  4. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  5. Java开发面试高频考点学习笔记(每日更新)

    Java开发面试高频考点学习笔记(每日更新) 1.深拷贝和浅拷贝 2.接口和抽象类的区别 3.java的内存是怎么分配的 4.java中的泛型是什么?类型擦除是什么? 5.Java中的反射是什么 6. ...

  6. Java虚拟机(JVM)学习笔记(不定时更新)

    Java虚拟机(JVM)学习笔记 不少组织都曾开发过Java虚拟机: SUN公司曾经使用过3个虚拟机,Classic.Exact VM.Hotspot.     其中Hotspot虚拟机沿用至今,并已 ...

  7. (尚硅谷java零基础教程)学习笔记day7/8-数组

    1.数组的概述 1.1 定义 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理. 1.2 数组的相关概念 数组名 元素 数组的索引 ...

  8. 《Java并发编程实践》学习笔记之一:基础知识

    <Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念:  (2)进程:是一种活动,它是由一个动作序列组成 ...

  9. Java程序猿的JavaScript学习笔记(汇总文件夹)

    最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...

最新文章

  1. 我应该如何道德地接近用户密码存储以便以后的明文检索?
  2. 频段表_VoLTE高低频段覆盖能力研究
  3. MySQL自定义排序函数FIELD()
  4. 微软工程师测试题——未来
  5. helloworld:一个完整的WCF案例
  6. Nginx通过地理位置限制访问
  7. notepad自动对齐html代码,notepad如何存储为html格式化
  8. Algorithms Part 1-Question 6- 2SUM Median-数和以及中位数问题
  9. 关于 iOS 证书,你必须了解的知识
  10. 转:Java多线程学习(吐血超详细总结)
  11. 趣文:如果像招聘程序员那样招聘木匠
  12. 微信小程序设置字体无效_小程序设置字体样式 微信小程序字体样式
  13. ping 不通百度问题的解决
  14. 《大数据时代:生活、工作与思维的大变革》:看“大数据时代预言家”的真知灼见
  15. 如何解决eclipse官网下载速度超慢的问题
  16. Vue3+TS + element-plus 项目 动态生成Icon图标
  17. Java开源 开源工作流
  18. java创建user类在哪里_java中创建对象有哪几种方式
  19. 【python向日葵】愿我们的生活像向日葵一样灿烂~~~
  20. C++编程规范(参考Google、华为)

热门文章

  1. 拍雪景得诗一首,记之,以表心绪[有能和者,不妨凑个热闹给大家解闷]
  2. 极度烧脑+惊人发现:4个颠覆你世界观的量子理论实验
  3. 180页PPT,讲解人工智能技术与产业发展
  4. STM32之通用定时器编码器模式
  5. 装了这几个插件后,我不得不给 IDEA 上个防沉迷
  6. 漫话:如何给女朋友解释什么是删库跑路?
  7. 这些工具类用起来真的很”香“
  8. Java!越来越像Kotlin了!!
  9. 不懂 ZooKeeper?没关系,这一篇给你讲的明明白白
  10. 你看,公司状告员工不加班,居然还告赢了