第一类Stirling数 s(p,k)

    

s(p,k)的一个的组合学解释是:将p个物体排成k个非空循环排列的方法数。

s(p,k)的递推公式: s(p,k)=(p-1)*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


递推关系的说明:

考虑第p个物品,p可以单独构成一个非空循环排列,这样前p-1种物品构成k-1个非空循环排列,方法数为s(p-1,k-1);

也可以前p-1种物品构成k个非空循环排列,而第p个物品插入第i个物品的左边,这有(p-1)*s(p-1,k)种方法。

 

第二类Stirling数 S(p,k)

   

S(p,k)的一个组合学解释是:将p个物体划分成k个非空的不可辨别的(可以理解为盒子没有编号)集合的方法数。

k!S(p,k)是把p个人分进k间有差别(如:被标有房号)的房间(无空房)的方法数。

   

S(p,k)的递推公式是:S(p,k)=k*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

  

递推关系的说明:

考虑第p个物品,p可以单独构成一个非空集合,此时前p-1个物品构成k-1个非空的不可辨别的集合,方法数为S(p-1,k-1);

可以前p-1种物品构成k个非空的不可辨别的集合,第p个物品放入任意一个中,这样有k*S(p-1,k)种方法。

  

第一类斯特林数和第二类斯特林数有相同的初始条件,但递推关系不同。

题目:HDU3625

题意:给N个元素,让我们求K个环排列的方法数。

斯特林第一类数的第推公式:

SN0=0; SNN=1 S00=0 SNK=SN-1K-1+SN-1K*N-1);

这个公式的意思是:当前N-1个数构成K-1 个环的时候,加入第N个 ,N只能构成单环!—S(N-1,K-1)如果N-1个数构

成K个环的时候,加入第N个,N可以任意加入,N-1内的一个环里,所以(N-1*SN-1K这个题目里,因为不能破坏

1个门:所以 SNK-S(N-1,K-1)才是能算构成K个环的方法数!就是去掉1自己成环的情况 。


#include<stdio.h>
#include<string.h>
#define N 21
__int64 fac[N]={1,1};
__int64 stir[N][N];
void init()
{
int i, j;
for(i=2;i<N;i++)
fac[i]=i*fac[i-1];
memset(stir,0,sizeof(stir));
stir[0][0]=0;
stir[1][1]=1;
for(i=2;i<N;i++)
for(j=1;j<=i;j++)
stir[i][j]=stir[i-1][j-1]+(i-1)*stir[i-1][j];
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
{
int n, k, i;
scanf("%d %d",&n,&k);
__int64 cnt=0;
for(i=1;i<=k;i++)
cnt+= stir[n][i] - stir[n-1][i-1];//注意:去掉1自己成环的
printf("%.4lf\n",1.0*cnt/fac[n]);
}
return 0;
}

第一类Stirling数和第二类Stirling相关推荐

  1. 【转】第一类Stirling数和第二类Stirling

    转自:http://blog.csdn.net/acdreamers/article/details/8521134 第一类Stirling数 s(p,k)    s(p,k)的一个的组合学解释是:将 ...

  2. 高等组合学笔记(六): 第二类Stirling数,第一类Stirling数以及生成函数

    集合的分类 定理: nnn元集合NNN的分类μ=(A1,A2,⋯,Am)\mu=(A_1,A_2,\cdots,A_m)μ=(A1​,A2​,⋯,Am​), (∣Ai∣=ai|A_i|=a_i∣Ai​ ...

  3. 高等组合学笔记(八):第一类Stirling数, 整数分拆

    第一类Stirling数的递推关系式 定理A: s(n,k)=s(n−1,k−1)−(n−1)s(n−1,k),(n,k≥1),s(n,0)=s(0,k)=0,(n,k≥1),s(0,0)=1s(n, ...

  4. 第一、二类斯特林(Stirling)数的生成函数(母函数)及推导

    文章目录 预备定义 第一类StirlingStirlingStirling数s(n,k)s(n,k)s(n,k)及第一类无符号StirlingStirlingStirling数c(n,k)c(n,k) ...

  5. 第二类Stirling数(第二类斯特林数)

    第二类Stirling数(第二类斯特林数) 定义 第二类Stirling数表示把nnn个不同的数划分为mmm个集合的方案数,要求不能为空集,写作S(n,m)S(n,m)S(n,m). 和第一类Stir ...

  6. 第一类Stirling数(第一类斯特林数)

    第一类Stirling数(第一类斯特林数) 定义 第一类Stirling数表示把nnn个不同元素构成mmm个圆的排列方案数,写作s(n,m)s(n,m)s(n,m). 根据正负性分为无符号第一类Sti ...

  7. HDU 2643 Rank:第二类Stirling数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2643 题意: 有n个个选手参赛,问排名有多少种情况(可以并列). 题解: 简化问题: 将n个不同的元素 ...

  8. 斯特灵数 (Stirling数)

    @维基百科 在组合数学,Stirling数可指两类数,都是由18世纪数学家James Stirling提出的. 第一类 s(4,2)=11 第一类Stirling数是有正负的,其绝对值是个元素的项目分 ...

  9. 组合数学之六 —— 差分序列Stirling数

    前言:好久没有学数学了 前几天loli给高一的讲课涉及到了本章内容,所以来普及一波 差分序列 基本概念 设 是一个序列,我们定义的(一阶)差分序列为: 很简单吧,就是我们经常使用的差分啊 但是我们在叙 ...

最新文章

  1. span 可编辑 控制数量_CSS如何限制显示的文本字数
  2. 用Python读取整个文件
  3. [bzoj 4869] [六省联考2017] 相逢是问候
  4. MATLAB应用实战系列(五十一)-TXT数据的读取完美教程
  5. nginx 负载均衡集群解决方案 healthcheck_nginx_upstreams (一)
  6. System V 共享内存区
  7. 网站运营活动策划方案模板
  8. DNF自动获取C语言,VC++开发硬件DNF搬砖项目全新发车,想上车的要赶紧
  9. 【深度学习】cs224n 自然语言处理
  10. 【STM32F429】第6章 ThreadX操作系统移植(IAR)
  11. html如何实现统计访客功能,百度统计实时访客功能详解
  12. Excel在筛选后进行排序的函数
  13. 吴国平:开发旅游小镇是一款养成类游戏 | 十年二十人
  14. 国产操作系统VS Windows系统的深度使用比较,哪种操作系统更好用?来自一位深度使用者的全面剖析
  15. 计算x的n次方 高效算法
  16. 长歌行 宋 郭茂倩收编的《乐府歌词》汉代民间诗歌
  17. .net framework MVC ,API, 支持OAS3
  18. Android计步器获取手机步数
  19. 什么是网络安全?网络安全包括哪几个方面?
  20. 阿莫电子论坛 莫进明 涉嫌用户数量造假

热门文章

  1. 用户操作-用户详情服务器端代码实现
  2. visualSVN下载与安装
  3. ES6新特性之了解ES6以及其发展历史
  4. 数据库-优化-数据库结构的优化-数据类型
  5. Servlet_快速入门
  6. Java中的内存划分
  7. 服务提供者与服务消费者
  8. MySQL复制性能优化
  9. fortran和Java学_Fortran模块和全局变量
  10. JDK1.8并发包中的类