球盒模型

介绍

球盒模型指的是把球放入盒子里的题目模型(强行解释)

分为盒子同或不同,球同或不同,盒子允许空或不空,所以一共八种问题

结论

不妨假设n个球,m个盒子

盒异,球同,盒子允许空 Cm+n1m1

盒异,球同,盒不允许空Cn1m1

盒同,球同,盒子允许空j=1m11xj中的xn系数

盒同,球同,盒不允许空xmj=1m11xjxn的系数

盒异,球异,盒子允许空 mn

盒异,球异,盒不允许空k=0m(Cmk(1)mkkn)

盒同,球异,盒子允许空i=0mk=0iCik(1)ikkni!

盒同,球异,盒不允许空k=0mCmk(1)mkknm!

证明

盒异,球同,盒子允许空

做法1

考虑母函数,我们用指数代表球的个数,显然每个盒子可以放0个,1个,2个,3个,等等,一共m个盒子,则这些多项式直接乘起来即可,则定义母函数 f(x)=(i=0xi)m=(11x)m=(1x)m

很明显,其中的xn的系数就是答案。

根据二项式定理,我们考虑(x)n这一项,他是
Cmn(x)n=k=mn+1mkn!(x)n=k=mm+n1kn!xn=Cm+n1m1xn

如果大家认为这个解释很牵强,那我们对f(x)进行泰勒展开,根据泰勒公式f(𝑥)=i=0𝑓(i)(x0)i!(𝑥𝑥0)i

我们先对f(x)进行求导 f(x)=m(1x)m1(1)f(x)=m(m1)(1x)m2(1)2f(x)=m(m1)(m2)(1x)m3(1)3...f(n)(x)=(i=0n1(mi))(1x)mn(1)n 我们取出f(x)x0=0的泰勒展开中的n次方项 (j=0n1(mi))(10)mnn!(𝑥0)𝑛(1)n=j=0n1(m+i)n!𝑥𝑛=(m+n1)!(m1)!n!𝑥𝑛=Cm+n1m1xn

做法2

我们可以假设一共有n+m个球,然后每个盒子至少放一个球,可以证明这个问题与当前问题等价

盒异,球同,盒不允许空

考虑隔板,n个球一共n-1个间隙,向其中置入m-1个隔板,形成m个段,每一段放入一个盒子即可。即Cn1m1

盒同,球同,盒子允许空

由于盒子相同,我们不妨设这m个盒子中球的大小分别是 a1a2...am

更一般的,由于盒子相同,所以a的顺序不影响结果。所以我们让其单增。设bi=aiai10b1=a1

ai=j=1ibj

a1+a2+...+am=n可以写作mb1+(m1)b2+(m2)b3+...+bm=m

这里b的唯一约束仅仅只是非负整数。于是构造生成函数, 首先是b1,他可以是0,1,2..., 则它对应的多项式就是(xm)0+(xm)1+(xm)2+..., 然后是b2,他对应是(xm1)0+(xm1)1+(xm1)2+...,然后乘起来,得到了 f(x)=( (xm)0+(xm)1+(xm)2+...)( (xm1)0+(xm1)1+(xm1)2+...)...=11xm11xm111xm2...11x=j=1m11xj

盒同,球同,盒子不允许空

显然对于上一种情况的b1,他的约束从非负变成了恒正。所以生成函数第一个变成了(xm)1+(xm)2+...

于是 f(x)=( (xm)1+(xm)2+...)( (xm1)0+(xm1)1+(xm1)2+...)...=xm1xm11xm111xm2...11x=xmj=1m11xj

盒异,球异,盒子允许空

每个球都有m中选择,即放入任何一个盒子。所以答案是mn

盒异,球异,盒子不允许空

不妨设第一个盒子有a1个球,第二个有a2个球,后面同理,得到了一个a序列,考虑母函数f(x)=(x1+x2+...)m,这个函数体现了盒子非空、盒异,但是没有体现出球异。实际上,如果要体现球异,首先要乘以全排n!,其次由于多个球放入了一个盒子,这里也要去全排,考虑序列a的放置方法,最终答案为n!1a1!1a2!1a3!... 体现到母函数上就是 f(x)=n!(x11!+x22!+x33!+...)m=n!(ex1)m=n!k=0m(Cmk(1)mk(ex)k)=n!k=0m(Cmk(1)mk(1+(kx)11!+(kx)22!+(kx)33!+...)) 考虑xnn!k=0m(Cmk(1)mk(kx)nn!)=(k=0mCmk(1)mkkn)xn

盒同,球异,盒子允许空

根据下一问枚举空盒子个数i i=0mk=0i(Cik(1)ikkn)i!

盒同,球异,盒不允许空

相当于盒异,球异,盒不允许空去全排。即除以m!

读者在这里可以花大部分时间想想为什么前面不能使用这种方式来推导。

第二类斯特林数

即盒同,球异,盒不允许空的解

我们回忆一下,这个解是k=0m(Cmk(1)mkkn)m!

可以直接定义斯特林数 S(n,m)={mn}=k=0m(Cmk(1)mkkn)m!

第二类斯特林数递推

S(n,m)=S(n1,m1)+S(n1,m)m

计算斯特林数的某一整行

即一次性计算S(n,0),S(n,1),S(n,2)...

我们对这个S的通项公式稍微变形,分离变量,然后就可以卷积运算了 k=0mCmk(1)mkknm!=k=0m(1)mkknk!(mk)!=k=0m(1)mk(mk)!knk!