第一类第二类斯特林数学习笔记

2023-10-16 03:18

本文主要是介绍第一类第二类斯特林数学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一类斯特林数

p p p个不同人围着 k k k个不同圆桌坐,要求每桌非空,方案数即为 S ( p , k ) S(p,k) S(p,k)

递推

边界
S ( p , p ) = 1 ( p > = 0 ) , S ( p , 0 ) = 0 ( p > = 1 ) S(p,p)=1(p>=0),S(p,0)=0(p>=1) S(p,p)=1(p>=0),S(p,0)=0(p>=1)
分类讨论一下…
新加入的人可以新开一张桌子,前面的方案即为 S ( p − 1 , k − 1 ) S(p-1,k-1) S(p1,k1)
也可以和之前的人坐,先把前面的人安排好了的方案数是 S ( p − 1 , k ) S(p-1,k) S(p1,k),我们让这个人任选一个人,坐在他的左边,方案数即为 ( p − 1 ) ∗ S ( p − 1 , k ) (p-1)*S(p-1,k) (p1)S(p1,k)
综上,转移即为
S ( p , k ) = S ( p − 1 , k − 1 ) + ( p − 1 ) ∗ S ( p − 1 , k ) S(p,k)=S(p-1,k-1)+(p-1)*S(p-1,k) S(p,k)=S(p1,k1)+(p1)S(p1,k)
复杂度 O ( n 2 ) O(n^2) O(n2)

性质

第一类斯特林数 S ( n , m ) S(n,m) S(n,m)其实可以表示为 x x x n n n次上升幂的第 m m m项系数,即有
x n ↑ = x ( x + 1 ) ( x + 2 ) ⋯ ( x + n − 1 ) = ∑ i = 0 n s ( n , i ) x i x^{n \uparrow} = x(x + 1)(x + 2) \cdots (x + n - 1) =\sum_{i = 0}^n s(n, i) x^i xn=x(x+1)(x+2)(x+n1)=i=0ns(n,i)xi
可以分治NTT或FFT求出,复杂度 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)

某个式子

n ! = ∑ i = 0 n s ( n , i ) n!=\sum _{i=0}^{n}s(n,i) n!=i=0ns(n,i)

证明考虑任意一个排列对应了唯一一个置换,一个置换可以看作一个轮换,于是轮换与置换,排列一一对应,右边相当于枚举所有轮换,由此得证

另一个重要式子

x n ‾ = ∑ i = 0 n s ( n , i ) ( − 1 ) n − i x i x^{\underline{n}}=\sum_{i=0}^{n}s(n,i)(-1)^{n-i}x^i xn=i=0ns(n,i)(1)nixi

证明考虑归纳
x n + 1 ‾ = x n ‾ ( x − n ) = x ∗ x n ‾ − n ∗ x n ‾ = ∑ i = 0 n s ( n , i ) ( − 1 ) n − i x i + 1 − n ∑ i = 0 n s ( n , i ) ( − 1 ) n − i x i = ∑ i = 1 n + 1 s ( n , i − 1 ) ( − 1 ) n − i + 1 x i + n ∑ i = 1 n + 1 s ( n , i ) ( − 1 ) n − i + 1 x i = ∑ i = 1 n + 1 ( s ( n , i − 1 ) + n ∗ s ( n , i ) ) ( − 1 ) n − i + 1 x i = ∑ i = 1 n + 1 s ( n + 1 , i ) ( − 1 ) n − i + 1 x i x^{\underline{n+1}}=x^{\underline{n}}(x-n)\\=x*x^{\underline n}-n*x^{\underline n}\\=\sum_{i=0}^{n}s(n,i)(-1)^{n-i}x^{i+1}-n\sum_{i=0}^{n}s(n,i)(-1)^{n-i}x^i\\=\sum_{i=1}^{n+1}s(n,i-1)(-1)^{n-i+1}x^i+n\sum_{i=1}^{n+1}s(n,i)(-1)^{n-i+1}x^{i}\\=\sum_{i=1}^{n+1}(s(n,i-1)+n*s(n,i))(-1)^{n-i+1}x^i\\=\sum_{i=1}^{n+1}s(n+1,i)(-1)^{n-i+1}x^i xn+1=xn(xn)=xxnnxn=i=0ns(n,i)(1)nixi+1ni=0ns(n,i)(1)nixi=i=1n+1s(n,i1)(1)ni+1xi+ni=1n+1s(n,i)(1)ni+1xi=i=1n+1(s(n,i1)+ns(n,i))(1)ni+1xi=i=1n+1s(n+1,i)(1)ni+1xi
注意这个多项式的常数项一定为 0 0 0所以可以不予考虑,得证

n log ⁡ n n\log n nlogn推出第一类斯特林数

由上可知第一类斯特林数可以用下降幂来搞,但是存在正负性不好考虑,所以用上升幂

f ( x ) = x n ‾ , g ( x ) = ( x + n ) n ‾ f(x)=x^{\underline n},g(x)=(x+n)^{\underline n} f(x)=xn,g(x)=(x+n)n,显然 f ( x ) g ( x ) = x 2 n ‾ f(x)g(x)=x^{\underline {2n}} f(x)g(x)=x2n,这个其实是我们上面分治 N T T NTT NTT的过程,现在我们不考虑递归两侧,直接递归一侧来算出另一侧,于是
f ( x ) = ∑ i = 0 n a i x i 则 g ( x ) = ∑ i = 0 n a i ( x + n ) i = ∑ i = 0 n a i ∑ j = 0 i ( i j ) x j n i − j = ∑ j = 0 n ( ∑ i = j n a i ( i j ) n i − j ) x j f(x)=\sum_{i=0}^{n}a_ix^i\\则g(x)=\sum_{i=0}^{n}a_i(x+n)^i\\=\sum_{i=0}^{n}a_i\sum_{j=0}^{i}\binom{i}{j}x^jn^{i-j}\\=\sum_{j=0}^{n}(\sum_{i=j}^na_i\binom{i}{j}n^{i-j})x^j f(x)=i=0naixig(x)=i=0nai(x+n)i=i=0naij=0i(ji)xjnij=j=0n(i=jnai(ji)nij)xj
中间是个卷积,直接卷就行了,然后再当前层再卷一次

注意我们强行把当前层看作了偶数,如果是奇数再把最后一项暴力乘上去就行了

复杂度就变为 n log ⁡ n n\log n nlogn

第二类斯特林数

n n n个不同球放入 m m m个相同盒子的方案数即为 S ( n , m ) S(n,m) S(n,m)

递推

仍然分类讨论
新加入的球可以新开一个盒子,即为 S ( n − 1 , m − 1 ) S(n-1,m-1) S(n1,m1)
或者在之前任选一个盒子放入,即为 m ∗ S ( n − 1 , m ) m*S(n-1,m) mS(n1,m)
综上所述,有
S ( n , m ) = S ( n − 1 , m − 1 ) + m ∗ S ( n − 1 , m ) S(n,m)=S(n-1,m-1)+m*S(n-1,m) S(n,m)=S(n1,m1)+mS(n1,m)
复杂度 O ( n 2 ) O(n^2) O(n2)

容斥原理

我们可以枚举至少有多少个盒子是空的,剩下的盒子随便放
那么有
S ( n , m ) = 1 m ! ∑ k = 0 m ( − 1 ) k C m k ( m − k ) n S(n,m)=\frac{1}{m!}\sum_{k=0}^{m}(-1)^kC_m^k(m-k)^n S(n,m)=m!1k=0m(1)kCmk(mk)n
再推一下会有
= 1 m ! ∑ k = 0 m ( − 1 ) k m ! k ! ( m − k ) ! ( m − k ) n =\frac{1}{m!}\sum_{k=0}^{m}(-1)^k\frac{m!}{k!(m-k)!}(m-k)^n =m!1k=0m(1)kk!(mk)!m!(mk)n
= ∑ k = 0 m ( − 1 ) k k ! ∗ ( m − k ) n ( m − k ) ! =\sum_{k=0}^m\frac{(-1)^k}{k!}*\frac{(m-k)^n}{(m-k)!} =k=0mk!(1)k(mk)!(mk)n
容易发现,这是一个卷积形式,组合数和次幂都可以预处理
于是可以通过FFT或者NTT求出 S ( n , 0 ) , S ( n , 1 ) . . . S(n,0),S(n,1)... S(n,0),S(n,1)...
复杂度 O ( n l o g n ) O(nlogn) O(nlogn)

性质

n k = ∑ i = 0 m i n ( n , k ) S ( k , i ) ∗ i ! ∗ C n i n^k=\sum_{i=0}^{min(n,k)}S(k,i)*i!*C_n^i nk=i=0min(n,k)S(k,i)i!Cni
等式左边即为 k k k个不同小球放入 n n n个不同盒子的方案数
我们可以通过枚举放入了多少个盒子,即为 S ( k , i ) ∗ i ! S(k,i)*i! S(k,i)i!,由于第二类斯特林数中盒子是相同的所以我们需要乘一个 i ! i! i!
再在 n n n个盒子中选出 i i i个可知等式合法

这篇关于第一类第二类斯特林数学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/218642

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件