组合数学(1)----错位排列
组合数学(1)----错位排列
整理自Richard A.Brualdi的《组合数学》
1.定义
如果定义全排列 1~n,
那么 一个排列满足 任意的i都满足a[i]!=i,称之为错位排列。
定义集合元素个数为n的错位排列个数为
比如这些问题:
一个聚会上,10位绅士查看他们的帽子。有多少种方式使得这些绅士中没有人能够拿到他们最开始的帽子?
把一个单词打乱,多少种可能新单词和旧单词每一位都不一样?
诸如此类。
2.递推公式
错位排列有两种递推公式
第一:
第二:
其中1,2式子均满足
下面给出《组合数学》中的证明:
假设,考虑的个错位排列
来看看第一个位置的情况:
它可以是除1以外的任何数字,那么一共有种情况并且每一种情况所产生的排列数都应该相同,我们设为
也就是说
现在来看看:
因为第1个位置可以是除1以外的任何数,并且产生排列数相同。
出于方便,我们假设第1个位置的数是2:
确定了第一个位置之后我们发现只需要讨论第二个位置是不是1这是一个特殊的点。
如果第2个位置是1,那接下来的个位置等价于n个元素中有两个元素调换了位置。
那我们可以把他们踢出去,他们已经不影响问题了。
而剩下的元素将继续进行错位排列,也就是 。
如果第2个位置不是1,这时候来重新陈述一下问题:
第2个位置不能是1,第3个位置不能是3,第4个位置不能是4.....第n个位置不能是n
这个问题是不是似曾相识?
是的,又是一个错排,这个错排只少了一个位置,所以他是。
得到:
联立之前的式子就是
再将这个式子不断地递归求解就会得出
3.通项公式
先直接给出结论(uysy这个也没啥用,时间复杂度也是O(n)的)
这个问题需要用到容斥定理的一个结论。
之后在容斥定理的总结中给出(莫比乌斯反演真的看不懂啊* ^ *)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具