错排问题

本文深入探讨了错排问题,一种经典的组合数学问题。通过递推式、容斥原理、二项式反演等多种数学工具,详细解析了错排排列计数的算法。文章提供了丰富的数学表达式和推导过程,适合对数学算法感兴趣的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错排问题:有多少个长度为n的排列满足对于所有的1&lt;=i&lt;=n1&lt;=i&lt;=n1<=i<=ni!=aii!=a_{i}i!=ai

递推式

f[1]=0,f[2]=1f[1]=0,f[2]=1f[1]=0,f[2]=1
f[i]=(n−1)⋅(f[i−1]+f[i−2])f[i]=(n-1)\cdot(f[i-1]+f[i-2])f[i]=(n1)(f[i1]+f[i2])

容斥1

  • f[i]f[i]f[i]表示 至少iii个位置不变的方案数
  • ans[i]ans[i]ans[i]表示有iii个位置不变的方案数
    f[i]=Cni⋅(n−i)!f[i]=C_{n}^{i}\cdot (n-i)!f[i]=Cni(ni)!
    ans[i]=f[i]−∑j=i+1nCji⋅ans[j]ans[i]=f[i]-\sum_{j=i+1}^{n}C_{j}^{i}\cdot ans[j]ans[i]=f[i]j=i+1nCjians[j]

二项式反演

f[n]=∑i=0nCni⋅g[i]f[n]=\sum_{i=0}^{n}C_{n}^{i}\cdot g[i]f[n]=i=0nCnig[i]
g[n]=∑i=0n(−1)n−i⋅Cni⋅f[i]g[n]=\sum_{i=0}^{n}(-1)^{n-i}\cdot C_{n}^{i}\cdot f[i]g[n]=i=0n(1)niCnif[i]

容斥2

  • 两个辅助数组和容斥1相同,计算答案时稍有不同
    ans[i]=∑j=in(−1)j−iCji⋅f[j]ans[i]=\sum_{j=i}^{n}(-1)^{j-i}C_{j}^{i}\cdot f[j]ans[i]=j=in(1)jiCjif[j]
  • 如何推得此式,考虑二项式反演
    f[i]=∑j=inCji⋅ans[j]f[i]=\sum_{j=i}^{n}C_{j}^{i}\cdot ans[j]f[i]=j=inCjians[j]
    ans[i]=∑j=in(−1)j−iCji⋅f[j]ans[i]=\sum_{j=i}^{n}(-1)^{j-i}C_{j}^{i}\cdot f[j]ans[i]=j=in(1)jiCjif[j]

容斥3

  • f[i]f[i]f[i]表示序列长度为iii时的错位排列个数
  • 可以得到
    n!=∑i=0nCni⋅f[i]n!=\sum_{i=0}^{n}C_{n}^{i}\cdot f[i]n!=i=0nCnif[i]
  • 是否觉得和二项式反演公式很相似?
    f[n]=∑i=0n(−1)n−iCni⋅i!f[n]=\sum_{i=0}^{n}(-1)^{n-i}C_{n}^{i}\cdot i!f[n]=i=0n(1)niCnii!
    f[n]=∑i=0n(−1)n−in!(n−i)!f[n]=\sum_{i=0}^{n}(-1)^{n-i}\frac{n!}{(n-i)!}f[n]=i=0n(1)ni(ni)!n!
    f[n]=n!⋅∑i=0n(−1)ii!f[n]=n!\cdot \sum_{i=0}^{n}\frac{(-1)^{i}}{i!}f[n]=n!i=0ni!(1)i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值