错排数计数

定义:i[1,n],pii 的长度为 n 的排列数。

一开始看到的时候还想用容斥推:i=0n(ni)(1)i(ni)!,结果发现太垃圾了。

递推法

D(n) 表示长度为 n 的错排数,考虑枚举数 n 放在了第 i 个位置(1in1),然后此时数 i 已经不在自己的位置了,考虑它放在哪:

  • 若数 i 放在了第 n 个位置,那么相当于剩下的 n2 个数的错排问题。
  • 若数 i 不放在第 n 个位置,此时看成数 i 也有一个错排限制,于是相当于 n1 个数的错排问题。

于是有递推式:D(n)=(n1)(D(n1)+D(n2))

生成函数法

排列可以看成若干个置换环组成,错排可以看成若干个大小不为 1 的置换环组成。

可知大小为 n 的置换环的数量为 (n1)!,那么大小为 n(n2) 的置换环数量的 EGF 为:

F(x)=n2(n1)!n!xn=n2xnn=(n0xn)x=(11x)x=ln(1x)x

于是错排数的指数生成函数即为:

expF(x)=exp(ln(1x)x)

递推式变换法

算是递推法的进阶。回顾得到的递推式

d0=1,d1=0dn=(n1)(dn1+dn2)

做一些变换

dn=ndn1+(n1)dn2dn1dnndn1=(dn1(n1)dn2)

en=dnndn1,初项 e1=1,且

en=en1=(1)n

那么

dn=ndn1+(1)ndnn!=dn1(n1)!+(1)nn!

fn=dn/n!,初项 f0=1,于是

fn=fn1+(1)nn!=i=0n(1)ii!

那么错排数的指数生成函数为

ex1x

这和第二种方法推出来是一样的。

posted @   ez_lcw  阅读(161)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示