在组合数学,Stirling数可指两类数,第一类Stirling数和第二类Stirling数。

stirling常应用于许多组合枚举问题中。

第一类stirling数:

对第一类Stirling数

  ,也可记为 
s(n,m)的一个的组合学解释是:而个人分成m组做环排列的方法数目。

递推式:

$$\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*}$$

s(p,k)的递推公式: $s(p,k)=(p-1) \times s(p-1,k)+s(p-1,k-1) ,1<=k<=p-1$

边界条件:s(p,0)=0 ,p>=1  s(p,p)=1  ,p>=0

性质:

 

 

 

 

 

 

 

第二类stirling数:

  ,同时可记为 
将p个物体划分成k个非空的不可辨别的(可以理解为盒子没有编号而物品有编号)集合的方法数。
 
第二类Stirling数要求盒子是无区别的,所以可以得到其方案数公式:

递推式:

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

S(p,k)的递推公式是:$S(p,k)=k \times S(p-1,k)+S(p-1,k-1) ,1<= k<=p-1$$

边界条件:S(p,p)=1 ,p>=0    S(p,0)=0 ,p>=1

通项递推式:

$S(n,m)=\frac{1}{m!} \sum _{k=0}^m (-1)^kC_m^k(m-k)^n$

性质:

  • $s(0,0)=1$;
  • $S(n,0)=0,n>0$
  • $S(n,n)=1$
  • $S(n,2)=S(n-1,1)+S(n-1,2)*2=1+S(n-1,2)*2=2^{n-1}-1$
  • $S(n,n-1)=C_n^2$
  • $S(n,n-2)=C_n^3+3C_n^4$

简单巧妙的证明:我们分成两种情况,把n个不同的元素分成n?2个集合有两种情况,分别是有一个集合有三个元素和有两个集合有两个元素。对于前者,我们选出三个元素为一个集合,

其他的各成一个集合,这种情况的方案数就是C(n,3)。对于后者,先选出四个元素来,考虑怎么分配。当其中一个元素选定另一个元素形成同一个集合时,这种情况就确定了,

所以是$3 \times C(n,4)$。加法原理计算和即得证。

  • $S(n,3)=\frac{1}{2}(3^{n-1}+1)-2^{n-1}$

  • $S(n,n-3)=C_n^4+10C_n^5+15C_n^6$

浅谈stiring数的更多相关文章

  1. 浅谈卡特兰数(Catalan number)的原理和相关应用

    一.卡特兰数(Catalan number) 1.定义 组合数学中一个常出现在各种计数问题中出现的数列(用c表示).以比利时的数学家欧仁·查理·卡特兰的名字来命名: 2.计算公式 (1)递推公式 c[ ...

  2. 浅谈JavaScript--函数重载

    个人认为重载就是一组具有相同名字.不同参数列表的函数(方法). 从语言角度来说,javascript不支持函数重载,不能够定义同样的函数然后通过编译器去根据不同的参数执行不同的函数. 但是javasc ...

  3. python浅谈正则的常用方法

    python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...

  4. 浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

    心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验 ...

  5. 浅谈php生成静态页面

    一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...

  6. 浅谈c语言结构体

    对于很多非计算机专业来说,c语言课程基本上指针都不怎么讲,更别说后面的结构体了.这造成很多学生对结构体的不熟悉.这里我就浅谈一下我对结构体的认识. 结构体,就是我们自己定义出一种新的类型,定义好之后, ...

  7. 浅谈产品测试人员的KPI

                                                                                                   浅谈产品测 ...

  8. 浅谈JAVA集合框架

    浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...

  9. Android性能优化的浅谈

    一.概要: 本文主要以Android的渲染机制.UI优化.多线程的处理.缓存处理.电量优化以及代码规范等几方面来简述Android的性能优化 二.渲染机制的优化: 大多数用户感知到的卡顿等性能问题的最 ...

随机推荐

  1. Golang 读写锁RWMutex 互斥锁Mutex 源码详解

    前言 Golang中有两种类型的锁,Mutex (互斥锁)和RWMutex(读写锁)对于这两种锁的使用这里就不多说了,本文主要侧重于从源码的角度分析这两种锁的具体实现. 引子问题 我一般喜欢带着问题去 ...

  2. ASP.NET Core Web API + Angular 仿B站(二)后台模型创建以及数据库的初始化

    前言: 本系列文章主要为对所学 Angular 框架的一次微小的实践,对 b站页面作简单的模仿. 本系列文章主要参考资料: 微软文档: https://docs.microsoft.com/zh-cn ...

  3. POJ2366【二分】

    题意: 给两个序列,问两个序列中是否有两个数加起来=1e4: 思路: 直接先排序好b序列,然后枚举a序列,二分查找b序列就好了: 贴一发挫code-. //#include <bits/stdc ...

  4. P5161 WD与数列(后缀自动机+线段树合并)

    传送门 没想出来→_→ 首先不难看出要差分之后计算不相交也不相邻的相等子串对数,于是差分之后建SAM,在parent树上用线段树合并维护endpos集合,然后用启发式合并维护一个节点对另一个节点的贡献 ...

  5. EasyUI设置Layout自适应浏览器宽度和高度

    //设置自适应浏览器宽度和高度 function setLayoutHeight() { var height = $(window).height() - 20; $("#main_lay ...

  6. Gist使用经验

    注:本文只是分享Gist使用经验,不讨论类似软件或服务的优劣,对于技术或软件不要有傲慢与偏见 一.Gist是什么 关于Gist的详细介绍,请阅读官方文档About gists,下面只简略介绍我所用到的 ...

  7. C#程序结构与基本语法

    C# 程序结构 Hello World 实例 一个 C# 程序主要包括以下部分: 命名空间声明(Namespace declaration) 一个 class Class 方法 Class 属性 一个 ...

  8. python之url编码

    import urllib.parsempp='besttest 自动化测试'print(urllib.parse.quote_plus(mpp)) #url编码print(urllib.parse. ...

  9. Codeforces 1107G(dp)

    1.答案要取连续的区间疯狂暗示线段树. 2.外层枚举r,内层枚举l显然过于暴力. 3.考虑内层的优化.dp[i]:以第i位为结尾的答案(长度大于1的).dp[i] = max(第一种情况,第二种情况) ...

  10. Android课程设计第三天帧动画区间动画

    注意:课程设计只为完成任务,不做细节描述~ 点火是帧动画,发射是区间动画,于是 <?xml version="1.0" encoding="utf-8"? ...