第一类Stirling数和第二类Stirling
第一类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个环排列的方法数。
斯特林第一类数的第推公式:
S(N,0)=0; S(N,N)=1; S(0,0)=0; S(N,K)=S(N-1,K-1)+S(N-1,K)*(N-1);
这个公式的意思是:当前N-1个数构成K-1 个环的时候,加入第N个 ,N只能构成单环!—S(N-1,K-1)如果N-1个数构
成K个环的时候,加入第N个,N可以任意加入,N-1内的一个环里,所以(N-1)*S(N-1,K)这个题目里,因为不能破坏
第1个门:所以 S(N,K)-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相关推荐
- 【转】第一类Stirling数和第二类Stirling
转自:http://blog.csdn.net/acdreamers/article/details/8521134 第一类Stirling数 s(p,k) s(p,k)的一个的组合学解释是:将 ...
- 高等组合学笔记(六): 第二类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 ...
- 高等组合学笔记(八):第一类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, ...
- 第一、二类斯特林(Stirling)数的生成函数(母函数)及推导
文章目录 预备定义 第一类StirlingStirlingStirling数s(n,k)s(n,k)s(n,k)及第一类无符号StirlingStirlingStirling数c(n,k)c(n,k) ...
- 第二类Stirling数(第二类斯特林数)
第二类Stirling数(第二类斯特林数) 定义 第二类Stirling数表示把nnn个不同的数划分为mmm个集合的方案数,要求不能为空集,写作S(n,m)S(n,m)S(n,m). 和第一类Stir ...
- 第一类Stirling数(第一类斯特林数)
第一类Stirling数(第一类斯特林数) 定义 第一类Stirling数表示把nnn个不同元素构成mmm个圆的排列方案数,写作s(n,m)s(n,m)s(n,m). 根据正负性分为无符号第一类Sti ...
- HDU 2643 Rank:第二类Stirling数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2643 题意: 有n个个选手参赛,问排名有多少种情况(可以并列). 题解: 简化问题: 将n个不同的元素 ...
- 斯特灵数 (Stirling数)
@维基百科 在组合数学,Stirling数可指两类数,都是由18世纪数学家James Stirling提出的. 第一类 s(4,2)=11 第一类Stirling数是有正负的,其绝对值是个元素的项目分 ...
- 组合数学之六 —— 差分序列Stirling数
前言:好久没有学数学了 前几天loli给高一的讲课涉及到了本章内容,所以来普及一波 差分序列 基本概念 设 是一个序列,我们定义的(一阶)差分序列为: 很简单吧,就是我们经常使用的差分啊 但是我们在叙 ...
最新文章
- span 可编辑 控制数量_CSS如何限制显示的文本字数
- 用Python读取整个文件
- [bzoj 4869] [六省联考2017] 相逢是问候
- MATLAB应用实战系列(五十一)-TXT数据的读取完美教程
- nginx 负载均衡集群解决方案 healthcheck_nginx_upstreams (一)
- System V 共享内存区
- 网站运营活动策划方案模板
- DNF自动获取C语言,VC++开发硬件DNF搬砖项目全新发车,想上车的要赶紧
- 【深度学习】cs224n 自然语言处理
- 【STM32F429】第6章 ThreadX操作系统移植(IAR)
- html如何实现统计访客功能,百度统计实时访客功能详解
- Excel在筛选后进行排序的函数
- 吴国平:开发旅游小镇是一款养成类游戏 | 十年二十人
- 国产操作系统VS Windows系统的深度使用比较,哪种操作系统更好用?来自一位深度使用者的全面剖析
- 计算x的n次方 高效算法
- 长歌行 宋 郭茂倩收编的《乐府歌词》汉代民间诗歌
- .net framework MVC ,API, 支持OAS3
- Android计步器获取手机步数
- 什么是网络安全?网络安全包括哪几个方面?
- 阿莫电子论坛 莫进明 涉嫌用户数量造假