在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! ]    得证

各位看官,推公式不易,且看且珍惜,THX。

c语言 错排公式 程序,错排公式详解相关推荐

  1. mysql错误码:2006-MySQL server has gone away详解

    mysql错误码:2006-MySQL server has gone away详解 1.背景 代码测试过程中发现程序运行一段时间之后mysql数据库就报2006的错误码,程序重启之后恢复正常. 2. ...

  2. 百度提前批-百度智能小程序(面经详解)

    文章目录 百度提前批-百度智能小程序(面经详解) 1.定位 2.z-index .层叠 3.作用域(scope) 4.单例模式 5.原型链 6.继承(借用构造函数,寄生组合继承,缺点是什么) 7.闭包 ...

  3. 程序阅读_全面详解LTE:MATLAB建模仿真与实现_自学笔记(1)调制与编码_程序阅读

    程序阅读_全面详解LTE:MATLAB建模仿真与实现_自学笔记(1)调制与编码_程序阅读 在粗浅地掌握了LTE知识后,从今天开始对<全面详解LTE:MATLAB建模仿真与实现>一书的学习. ...

  4. 程序阅读_全面详解LTE_MATLAB建模仿真与实现_自学笔记(2)OFDM_程序阅读

    程序阅读_全面详解LTE:MATLAB建模仿真与实现_自学笔记(2)OFDM_程序阅读 本章详细阅读 LTE 标准中的 OFDM 帧结构和实现,讨论 OFDM信号的时-频映射和多种适应信道带宽的资源元 ...

  5. C语言中的字符串转数字函数常见问题详解

    目录 C语言中的字符串转数字函数常见问题详解 字符串转整形 atoi函数 字符串转长整形 strtol函数, C语言中的字符串转数字函数常见问题详解 字符串转整形 atoi函数 函数原型: int a ...

  6. time库是python中处理时间的标准库_python语言time库和datetime库基本使用详解

    今天是边复习边创作博客的第三天,我今年大二,我们专业开的有这门课程,因为喜欢所以更加认真学习,本以为没人看呢,看了后台浏览量让我更加认真创作,这篇博客花了2个半小时的时间,结合自己所学,所思,所想写作 ...

  7. C语言0长度数组(可变数组/柔性数组)详解

    CSDN GitHub C语言0长度数组(可变数组/柔性数组)详解 AderXCoding/language/c/zero_length_array 本作品采用知识共享署名-非商业性使用-相同方式共享 ...

  8. 小程序开发入门超详解之WXML

    小程序开发入门超详解之WXML 小程序入门开发超详解版之WXML 开发框架组成介绍 WXML语法 WXML特性 小程序入门开发超详解版之WXML 欢迎大家添加月神的微信:18333806737进行专业 ...

  9. c语言中getenv的作用,C语言putenv()函数和getenv()函数的使用详解

    C语言putenv()函数和getenv()函数的使用详解 C语言putenv()函数:改变或增加环境变量头文件: #include4 定义函数: int putenv(const char * st ...

  10. R语言基于forestplot包可视化森林图实战详解:美化的森林图:自定义字体设置、置信区间、坐标轴(刻度、标签、范围)、无效线去除、水平线、辅助线、box形状、色彩等

    R语言基于forestplot包可视化森林图实战详解:美化的森林图:自定义字体设置.置信区间.坐标轴(刻度.标签.范围).无效线去除.水平线.辅助线.box形状.色彩等 目录

最新文章

  1. SVO 学习笔记(三)
  2. Android的消息机制(2)
  3. 相机设置感兴趣区域(自带API)
  4. “开店办厂,去望城!” ——望城区市场主体总量突破十万户
  5. Linux编程练习 --多线程3--mutex
  6. 蚂蚁金服王旭:开源的意义是把社区往前推进一步
  7. MySQL update For_mysql SELECT FOR UPDATE语句使用示例
  8. java xframeoptions,Header:X-Frame-Options开启与关闭方法
  9. SOCK开发之---TCP/IP简介
  10. 清华,就要成为地表最强研究机构了
  11. java打包成jar文件
  12. 螺旋模型 增量模型_螺旋模型| 软件工程
  13. VOC2007数据集
  14. 软件测试预演环境,什么是软件测试用例预演 有何优点?-软件水平考试-考试吧...
  15. 第三方登陆之微博登录
  16. python求解二元一次方程组代码_如何编程求二元一次方程组的解
  17. 磁共振t1t2信号记忆顺口溜_核磁共振诊断报告中的T1T2信号是什么意思?
  18. vue将图片链接、本地图片转为二进制文件流
  19. 有哪些免费的CRM软件可以使用?
  20. [附源码]SSM计算机毕业设计小微企业库存管理系统JAVA

热门文章

  1. 常用的 7 款最佳 Java 框架分享
  2. Licode(一):入门介绍
  3. css 网页自适应方案 大屏自适应方案
  4. linux 4 没有inittab,linux根文件系统之inittab
  5. 为何高频交易在期货交易中深受异议
  6. 外卖店销量怎么做起来?提升配送服务
  7. 零数科技CTO兰春嘉:区块链的iPhone时刻,终将以螺旋发展方式到来
  8. 非常棒的FLASH版本PPT制作工具PREZI_我是亲民_新浪博客
  9. Zuul 2是如何动态加载Filter的?
  10. 如何删除在微软注册的组织