浅谈错排公式的推导及应用

简介: 近期学弟在HDU刷题时遇到了关于错排公式的一些问题,我作为过来人就写这篇博客来指导他们~~~ 错排的定义:一段序列中一共有n个元素,那么可知这些元素一共有n!种排列方法。假如在进行排列时,原来所有的元素都不在原来的位置,那么称这个排列为错排。

近期学弟在HDU刷题时遇到了关于错排公式的一些问题,我作为过来人就写这篇博客来指导他们~~~

错排的定义:一段序列中一共有n个元素,那么可知这些元素一共有n!种排列方法。假如在进行排列时,原来所有的元素都不在原来的位置,那么称这个排列为错排。而错排数所指的就是在一段有n个元素的序列中,有多少种排列方式是错排。

递归关系:D(n)=(n-1)(D(n-1)+D(n-2))  特别地有D(1)=0,D(2)=1;

错排公式:D(n)=(n!)[(-1)^0/0!+(-1)^1/(1!)+(-1)^2/(2!)+(-1)^3/(3!)+......+(-1)^n/(n!)];   其中n!=n*(n-1)*(n-2)*......3*2*1      特别地有0!=1  1!=1

首先来对递归公式进行解释:

n个不同的元素的一个错排公式可以分作两步完成:

第一步:假设我们错排第一个元素,那么它可以从2~n的位置任意选择其中的一个,一共是有n-1种选择。

第二步:错排其余n-1个元素,也是需要分情况和种类的。因为这需要看第一步的结果,如果第一个元素落在第k个位置上,第二步就需要把k号元素进行错排,k号元素错排位置的不同将导致不同的情况会发生:

1.假设k号元素正好落在了第一个元素的位置,那么就可以将第一个元素和第k个元素完全剔除出去,因为相当于只是他们两者互换了位置,其他元素暂时还没有发生变动。留下来的n-2元素进行错排的话,那么我们就可以得到了D(n-2)种 的错排方式。

2.若k号元素不排到第一个元素的位置,我们可以暂时将现在排在k号位置的第一个元素剔除出去,生下来的就只包含k号元素和原来n-2个的元素了。这时,我们可以将原来的第一个元素的位置看做是现在k号元素的原本位置,因为k号元素不能够放在原来的位置上,所以就相当于是原来的n-2个元素和k共计n-1个元素进行完全的错排。那么一共就有D(n-1)种方法。 第二种情况希望大家仔细理解!配一张图便于理解

 

那么,我们有根据加法原理,完成第二步有D(n-2)+D(n-1)种方法。

根据乘法原理得到D(n)=(n-1)(D(n-1)+D(n-2)) 。递推关系解释完毕。

下面我们来推一下错排公式

前提假设D(n)=n!N(n) 那么我们根据上面的递推公式可以得到n!N(n)=(n-1)[(n-2)!N(n-2)+(n-1)!N(n-1)],等式右边合并一下,我们可以得到

n!N(n)=(n-1)!N(n-2)+(n-1)!N(n-1)同时消去(n-1)!可以得到nN(n)=N(n-2)+N(n-1)

 所以就有两边同时减去nN(n-1)得到:nN(n)-nN(n-1)=(n-1)N(n-1)+N(n-2)-nN(n-1)  即有:n(N(n)-N(n-1))=-N(n-1)+N(n-2)

即为(N(n)-N(n-1))/(N(n-1)-N(n-2))=(-1)/n;

同理有(N(n-1)-N(n-2))/(N(n-2)-N(n-3))=(-1)/(n-1);

            (N(n-2)-N(n-3))/(N(n-3)-N(n-4))=(-1)/(n-2);

            ......

            (N(3)-N(2))/(N(2)-N(1))=(-1)/3;

一共我们得到了n-2个等式,我们可以让左边的等式相乘,右边的等式相乘,因为相消,那么我们可以得到的等式是

(N(n)-N(n-1))/(N(2)-N(1))=(-1)^(n-2)/[n*(n-1)*(n-2)*(n-3)*......4*3]    等式1

又因为(-1)^(n-2)=(-1)^(n) 等式2并且N(2)=D(2)/2!=1/2   N(1)=D(1)/1!=0  所以有N(2)-N(1)=1/2 等式3 将这两个等式2和3带入到上面等式1中我们可以得到:

N(n)-N(n-1)=(-1)^n/[n*(n-1)*(n-2)*(n-3)*......*4*3*2]    即为:N(n)-N(n-1)=(-1)^n/n!

所以有N(n)=(-1)^2/2!+...(-1)^(n-1)/(n-1)!+(-1)^n/n!      又因为存在关系D(n)=n!N(n) 

得到D(n)=n![(-1)^2/2!+...(-1)^(n-1)/(n-1)!+(-1)^n/n! ]    得证

错排公式的应用:

 

n封信放入n个信封,要求全部放错,共有多少种放法,记n个元素的错排总数为f(n)

 

方法一:

 

某人写了n封信和n个信封,如果所有的信都装错了信封。求所有的信都装错信封,共有多少种不同情况。 

 

当N=1和2时,易得解~,假设F(N-1)和F(N-2)已经得到,重点分析下面的情况:

 

1.当有N封信的时候,前面N-1封信可以有N-1或者 N-2封错装。

 

2.前者,对于每一种错装,可以从N-1封信中任意取一封和第 N封错装,故=F(N-1) * (N-1)。

 

3.后者简单,只能是没装错的那封信和第N封信交换信封,没装错的那封信可以是前面N-1封信中的任意一个,故= F(N-2) * (N-1)。

 

基本形式:d[1]=0;   d[2]=1 递归式:d[n]= (n-1)*( d[n-1] + d[n-2])

 

方法二:

 

假设有n封信,第一封信可放在(2-n)的任一个信封里,共n-1种放法,设第一封信放在了第k个信封里,若此时第k封信放在了第1个信封里,则只要将剩下的n-2错排,即f(n-2),若第k封信没有放在了第1个信封里,可将第1封信的位置看成是“第k个位置”,即将n-1封信错排,即为f(n-1)

 

由递推可得,f(n)=(n-1)*(f(n-1)+f(n-2))

 

以下是程序实现:

 

 1 #include<stdio.h>
 2 int fun(int);
 3 int main()
 4 {
 5     int n,res;
 6     printf("input a number:");
 7     scanf("%d",&n);
 8     res=fun(n);
 9     printf("There are %d cases.\n",res);
10     return 0;
11 }
12 int fun(int n)
13 {
14     if(n==1)
15         return 0;
16     if(n==2)
17         return 1;
18     return (n-1)*(fun(n-1)+fun(n-2));
19 }

 

目录
相关文章
|
搜索推荐 前端开发 JavaScript
什么是百度优化?百度SEO优化解决方案
百度优化的解决方案不仅可以帮助企业提升网站在百度PC端的收录与关键词排名,也可以获得更好的移动端收录与关键词排名,从而达到品牌SEO推广及引流的目的。接下来小编为你详细分享什么是百度优化以及实用的解决方案,一起来看看吧。
2025 0
|
关系型数据库 分布式数据库 PolarDB
PolarDB 开源基础教程系列 7.2 应用实践之 跨境电商场景
本文介绍了如何在跨境电商场景中快速判断商标或品牌侵权,避免因侵权带来的法律纠纷。通过创建品牌表并使用PostgreSQL的pg_trgm插件和GIN索引,实现了高性能的字符串相似匹配功能。与传统方法相比,PolarDB|PostgreSQL的方法不仅提升了上万倍的查询速度,还解决了传统方法难以处理的相似问题检索。具体实现步骤包括创建品牌表、插入随机品牌名、配置pg_trgm插件及索引,并设置相似度阈值进行高效查询。此外,文章还探讨了字符串相似度计算的原理及应用场景,提供了进一步优化和扩展的方向。
405 11
|
4月前
|
弹性计算 人工智能 固态存储
阿里云服务器租赁多少钱?最新阿里云服务器租用价格表(轻量服务器/ECS云服务器/GPU云服务器明细报价)
阿里云服务器一年多少钱?目前最新阿里云服务器租用费用价格表,轻量2核2G轻量服务器一年68元,折合5.6元1个月,新老用户同享99元一年服务器,2核4G5M服务器ECS优惠价199元一年(企业专享),2核4G4M轻量服务器298元一年,4核8G服务器955元一年,4核16G10M服务器70元1个月、210元3个月,8核32G服务器160元1个月、480元3个月,整理阿里云服务器租用费用价格表,包括一年优惠价格、一个月和1小时收费明细表:
|
存储 人工智能 自然语言处理
15.4K Star!Vercel官方出品,零基础构建企业级AI聊天机器人
"基于Next.js 14和AI SDK打造的Chat SDK,让开发者快速构建支持多模态交互、代码执行、文件共享的智能对话系统,5分钟完成全栈部署!" —— Vercel AI Chatbot项目核心宣言
743 5
|
7月前
|
数据采集 数据可视化 安全
基于python大数据的天气可视化分析预测系统
本研究探讨基于Python的天气预报数据可视化系统,旨在提升天气数据获取、分析与展示的效率与准确性。通过网络爬虫技术快速抓取实时天气数据,并运用数据可视化技术直观呈现天气变化趋势,为公众出行、农业生产及灾害预警提供科学支持,具有重要的现实意义与应用价值。
|
测试技术
【LaTex】10 从md文件导入\导出word (因为:Typora-版本过高不能转换word 报错:Unknown option --atx-headers. )
【LaTex】10 从md文件导入\导出word (因为:Typora-版本过高不能转换word 报错:Unknown option --atx-headers. )
983 7
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
2045 118
|
存储 算法 API
文档解析(大模型版)能力对比测评
文档解析(大模型版)能力对比测评
1622 38
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。
本文介绍了在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。内容涵盖准备工作、下载源码、编译安装、配置服务、登录设置及实践心得,帮助读者根据需求选择最适合的安装方法。
602 2
|
机器学习/深度学习 数据采集 算法
Python基于低方差特征选择(VarianceThreshold)、遗传算法(TPOTRegressor)实现信用评分卡模型
Python基于低方差特征选择(VarianceThreshold)、遗传算法(TPOTRegressor)实现信用评分卡模型
下一篇
开通oss服务