第二类斯特林数总结

第二类斯特林数总结

标签: 第二类斯特林数


最近做题的时候遇到了一些跟第二类斯特林数有关的东西,发现网上的资料不是很多,于是写一篇博客来总结一下。

第二类斯特林数

定义

第二类斯特林数\(S(n,m)\)表示的是把n个不同的小球放在m个相同的盒子里方案数。
upd:为了看得清楚,有时候我们也用\(\begin {Bmatrix} n \\ m\end {Bmatrix}\)来表示\(S(n,m)\)

求法

一般有两种求法。
递推:
\(S(n,m)=S(n-1,m-1)+mS(n-1,m)\)
即讨论第一个球是否单独在一个盒子里面。
如果不独占一盒,那么把这个球放进任一个盒子,这个盒子就相当于与其他的盒子不同,那么在乘答案的时候就要多乘一个m.

容斥原理:
\[S(n,m)={\frac 1 {m!}}\sum_{k=0}^m (-1)^k C(m,k)(m-k)^n \]
即枚举空盒的个数,剩下的随意放置,由于盒子是相同的最后要除以\(m!\)
注意到这个式子是一个卷积,所以可以在\(O(nlogn)\)内求出\(S(n,0),S(n,1)......\)

性质

只有一个公式
\[n^k=\sum_ { i=0}^k S(k,i)×i!×C(n,i) \]
很好理解,左边就是k个球可以任意放置在n个盒子里。
右边就是枚举非空盒子的数量i,那么把k个球放在i个盒子(盒子不同,需要乘上一个i!)里面再乘上选出i个非空盒子的方案数。

有了这个东西,我们可以很方便的维护一些东西。

组合等式推导

upd:感觉以前写的菜爆了。。。。更新一点吧

上面的性质与求法都是基于组合意义而来的,接下来我们采用一个具有组合意义的等式,将其通过一些变换得到上面的等式。
\[n^m=\sum_{k=0}^m \begin{Bmatrix} m \\k \end{Bmatrix} n^{\underline k}\]
\(x^{\underline k}\)\(x\)\(k\)次下降幂,就是\(x \times (x-1) \times(x-2)....\times(x-k+1)\)
(其实就是上面的性质啦)
当然准确来说这个式子才是定义式,因为这个式子具有清晰的组合意义。
这个式子可以方便的得到递推式:

\[ \sum_{k=0}^m \begin{Bmatrix} m\\k\end{Bmatrix} n^{\underline k}= \sum_{k=1}^{m} \begin{Bmatrix} m-1\\k-1\end{Bmatrix} n^{\underline {k}} +\sum_{k=1}^{m} k\begin{Bmatrix} m-1\\k\end{Bmatrix} n^{\underline {k}} =\\ \sum_{k=0}^{m-1} \begin{Bmatrix} m-1\\k\end{Bmatrix} n^{\underline {k+1}} +\sum_{k=1}^{m} k\begin{Bmatrix} m-1\\k\end{Bmatrix} n^{\underline {k}} =(n-k+k)n^{m-1}=n^m\]

当然这个步骤写的不太严谨,如果把上面的式子倒过来就是正确的证明步骤,但是这样推就不太好想(不过我们已经知道了结论就随便了)。

好像还有一个等式?
\[\begin{Bmatrix} m \\k \end{Bmatrix}={\frac 1 {k!}}\sum_{i=0}^k (-1)^{k-i} \binom {k} {i} i^m \]
再来审视一下之前的定义式。
\[k^m=\sum_{i=0}^k \begin{Bmatrix} m \\i \end{Bmatrix} i! \binom{k}{i}\]
我们把\(m\)看作常量,令\(f_i=i^m,g_i=\begin{Bmatrix} m \\i \end{Bmatrix} i!\)
那么\(\binom{k}{i}\)相当于从\(g_i\)\(f_k\)的一个转移矩阵
直接二项式反演,得
\[\begin{Bmatrix} m \\k \end{Bmatrix} k!=\sum_{i=0}^k (-1)^{k-i} \binom {k} {i}i^m \]
再把\(k!\)移过去就得到最初的式子了。

斯特林反演

对第二类斯特林数的反演。
\[q_n=\sum_{i=1}^{n}\begin{Bmatrix}n \\ i\end{Bmatrix}p_i \Leftrightarrow p_n=\sum_{i=0}^{n}(-1)^{n-i}\begin{bmatrix}n \\ i\end{bmatrix}q_i\]

其中\(\begin{bmatrix} n\\ m\end{bmatrix}\)是第一类斯特林数,也可以写作\(s(n,m)\),在不作特殊的说明情况的下(即\(s_s(n,m)\)代表有符号的第一类斯特林数),本文中写到的均为无符号的第一类斯特林数。

在这里,我们只需要知道\(s(n,m)\)的生成函数。
\[x^{\underline m}=\sum_{k=0}^m (-1)^{m-k}\begin{bmatrix} m\\k\end{bmatrix} x^k\quad [1] \\x^{\overline m}=\sum_{k=0}^m \begin{bmatrix} m\\k\end{bmatrix} x^k \]

其实这差不多就是有符号和无符号的区别,一个是下降幂,一个是上升幂。

我们发现,这个式子与上面第二类斯特林数的定义式出奇的像。
\[x^m=\sum_{k=0}^m \begin{Bmatrix} m \\k \end{Bmatrix} x^{\underline k} \quad [2]\]
\([1]\)式带入\([2]\)中,得
\[x^m=\sum_{k=0}^m \begin{Bmatrix} m \\k \end{Bmatrix} \sum_{l=0}^k (-1)^{k-l}\begin{bmatrix} k\\l\end{bmatrix} x^l \\ =\sum_{l=0}^m x^l \sum_{k=l}^m (-1)^{k-l}\begin{Bmatrix} m \\k \end{Bmatrix}\begin{bmatrix} k\\l\end{bmatrix}\]
显然得到等式
\[[l=m]=\sum_{k=l}^m (-1)^{k-l}\begin{Bmatrix} m \\k \end{Bmatrix}\begin{bmatrix} k\\l\end{bmatrix}\]
接下来,我们将斯特林反演的两式相互带入,不难得出其等价与上式。

值得一提的是,我们令矩阵\(f_{i,j}=\begin{Bmatrix} i \\ j \end{Bmatrix},g_{i,j}=(-1)^{i-j} \begin{bmatrix} i\\ j \end{bmatrix}\)
那么根据上面的式子,有\(FG=E\),即矩阵\(F,G\)互逆。

转载于:https://www.cnblogs.com/gzy-cjoier/p/8426987.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 装饰器 继承_Python设计模式之装饰器模式

装饰器模式无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法。如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法)使用组合使用继承注意,本文中的Decorator可以为装饰器或者修饰器。与继承相比…

Thread.join(), CountDownLatch、CyclicBarrier和 Semaphore区别,联系及应用

在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法, 由于Thread.join()也和这三个类有类似用法,我也…

string转short java_[Java基础]之 数据类型转换

数据类型转换存在的意义数据类型转换,在实际的应用开发中,常常会对不同类型的数字类型进行计算,所以就用到了数据转换。一方面,使用算术计算符对数字进行运算时,系统在适当的时候回进行自动转换;另一放方面…

adb 静默安装_怎么实现Android APP静默安装

在 Android 中,如果要使用系统限制的权限(比如 android.permission.WRITE_SECURE_SETTINGS),我们需要把程序安装到 /system/app/ 下。下面以 SecureSetting.apk 为例,演示这个操作。需要准备一台已经获得 Root 权限的手机。1、通过 USB 连接手…

跟我一起读postgresql源码(十六)——Executor(查询执行模块之——control节点(下))

5.ModifyTable节点 先看一个ModifyTable节点的例子: postgres# explain update test_01 set id 5 where name xxx;QUERY PLAN ---------------------------------------------------------------Update on test_01 (cost0.00..23.75 rows6 width48)-> Seq Sc…

java获取对象的子_java – 如何根据子对象字段获取父对象

家长班&#xff1a;public class Person {String firstName;String lastName;Long id;List phoneNumber new ArrayList<>();int age;public Person(String firstName, String lastName, int age, Long id, List phone) {super();this.firstName firstName;this.lastNam…

vscode格式化关于符合eslint检测语法配置

.js文件插件&#xff1a;JavaScript Standard Style配置&#xff1a;解决ES6语法格式化 {"files.associations": {"*.js": "javascriptreact"} }.vue文件 配置&#xff1a; {"vetur.format.defaultFormatter.js": "vscode-typesc…

二、配置数据源、SessionFactory、domain对象

1.在applicationContext.xml中配置数据源 <?xml version"1.0" encoding"utf-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"h…

IDEA建立Spring MVC Hello World 详细入门教程

引子&#xff0c;其实从.NET转Java已经有几个月时间了&#xff0c;项目也做了不少&#xff0c;但是很多配置都是根据公司模板或者网上教程比忽略画瓢&#xff0c;对其中最简单的配置和设置并不完全理解&#xff0c;依旧是小白用户。最近项目不忙&#xff0c;重新梳理了一下Spri…

java offsetdatetime_Java OffsetDateTime withHour()用法及代码示例

Java中OffsetDateTime类的withHour()方法返回此OffsetDateTime的副本&#xff0c;其中一天中的小时数按照参数中的指定进行了更改。用法:public OffsetDateTime withHour(int hour)参数&#xff1a;此方法接受单个参数hour&#xff0c;该参数指定要在结果中设置的一天中的小时&…

2048小游戏代码解析 C语言版

2048小游戏&#xff0c;也算是风靡一时的益智游戏。其背后实现的逻辑比较简单&#xff0c;代码量不算多&#xff0c;而且趣味性强&#xff0c;适合作为有语言基础的童鞋来加强编程训练。本篇分析2048小游戏的C语言实现代码。 前言 游戏截图&#xff1a; 游戏实现原理&#xff1…

java中Decimaformat_Java中 DecimalFormat 用法详解

对Java中 DecimalFormat 的所有基础用法进行了一个汇总。DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充&#xff0c;# 表示只要有可能就把数字拉上这个位置。下面的例子包含了差不多所有的基本用法。import java.text.DecimalForm…

java的栈堆的理解_理解堆与栈 - 一步一个脚印 - BlogJava

一、引言&#xff1a;一直不太明白堆与栈到底是什么&#xff0c;是指一块内存区呢&#xff0c;还是指一种数据结构&#xff1f;编写程序中总提到内存分配的栈与堆的区别&#xff0c;静态与动态分配等&#xff0c;总也弄不明白&#xff0c;隐约知道一点&#xff0c;但总分不清堆…

【递归与递推】青蛙过河

题目描述 有一条河&#xff0c;左边一个石墩(A区)上有编号为1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;…&#xff0c;n的n只青蛙&#xff0c;河中有k个荷叶(C区)&#xff0c;还有h个石墩(D区)&#xff0c;右边有一个石墩(B区)&#xff0c;如下图2—5所示。n只青蛙…

人民币读法的java程序_Java浮点数转人民币读法

packagetheTest;public classNumToRmb {private String[] hanArr{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};private String[] unitArr{"仟",&quo…

python arp欺骗

使用python构造一个arp欺骗脚本 import os import sys from scapy.all import * import optparse def main():usage"usage:[-i interface] [-t IP to attack] [-g Gateway IP]"parseroptparse.OptionParser(usage)parser.add_option(-i,destinterface,helpselect int…

java 如何使用dylib,如何在应用程序中使用dylib文件?

I have created lib.dylib dynamic library. I want to use that library in my application.What are the Build setting and build phase settings are required?Steps to use the library in objective-c.解决方案so there are 2 ways...1) if the Dyld is available at li…

python中的基本数据结构

要点概论&#xff1a; 1.了解序列 2.掌握列表 3.掌握元组 4.掌握字符串 5.掌握字典 6.掌握json 1.序列 在python中&#xff0c;最基本的数据结构是序列。 python提供了列表&#xff0c;元组&#xff0c;字符串等序列类型&#xff0c;可以进行某些特定的操作&#xff0c;这些操作…

java对字符串归一化_搜索引擎中的字符串归一化 | 学步园

搜索引擎中对于Q查询&#xff0c;都会涉及到字符串归一化这个步骤&#xff0c;以提高结果召回率。字符串的归一化包括三个方面&#xff1a;繁体转简体&#xff1b;全角字符转半角&#xff1b;大写字母转小写。建倒排时&#xff0c;会先对字符串做归一化处理&#xff0c;然后再分…

java对外sdk提供接口_Android SDK封装,对外提供接口

项目中需要把连接服务器的部分做成一个service并生成一个jar模块。其他产品就可通过这个包来快速的开发连接服务器的应用软件。做成一个service的优点是&#xff1a;1&#xff0e; 在后台运行&#xff0c;可以一直保持与服务器的连接2&#xff0e; 服务可以只对外提供接口&…