错排问题比较难,但是也是经典算法问题

文章目录

  • 1 错排问题
  • 2 总结

1 错排问题

家中阳台有10盆不同的花,为保持新鲜感,希望每天重新摆放,使得每盆花都不在第一天放的位置。那么最多可以保持多少天每天摆法都不同?

这是一个典型的错排问题。

错排的定义:若一个 n 元素的全排列中所有的元素都不在本来的位置上,那么称这个全排列就为原排列的一个错排(derangement) 。

也称作“伯努利-欧拉错装信封问题”(The Bernoulli-Euler problem of theMisaddressed letters) ——

  • 小明给 n 个朋友写信,邀请他们来家中聚会,结果粗心的他却把请柬全都装错了信封。请问有多少种全部装错信封的情况

n 个元素的错排的个数记为 D(n),下面通过两种计算方法来得到D(n)的值。

  • 方法1:建立递推关系:

第1步,选择第 n 个元素的位置,共有n-1 种方法(假定放在编号为 k 的位置);

第2步,选择第 k 个元素的位置,有两种可能:

1)第 k 个元素放在编号为 n 的位置,此时剩下的n-2 个元素进行错排即可,方案数是 D(n-2)

2)或者第 k 个元素不在编号为 n 的位置,此时把编号为 n 的位置视作编号为 k 的位置, 将 n-1 个元素进行错排即可, 方案数是 D(n-1):

由此得到递推关系D(n)=(n-1)(D(n-2)+D(n-1)),这个足以写出递归代码。

很容易得到初值 D(1)=0 和 D(2)=1。

如果不使用递归,可以使用这个计算结果进行循环。

  • 方法2 :应用容斥原理

则D(n) = n! - |A1∪A2A~1~\cup A~2~A 1 ∪A 2 ∪A3\cup A~3~∪A 3 ∪...∪An\cup ...\cup A~n~∪...∪A n |

由容斥原理:

可得:

2 总结

  • 学好数学

【离散数学中的数据结构与算法】十一 错排问题相关推荐

  1. 【离散数学中的数据结构与算法】六 排列与组合二

    接着上一篇学习:[离散数学中的数据结构与算法]五 排列与组合一 上一篇文章主要学习了可重复选取的可重排列和不可重复选取的排列.他们都是在n个不同的对象中选取. 今天我们俩学习的是,当这个n个对象中有相 ...

  2. 【离散数学中的数据结构与算法】十 汉诺塔

    汉诺塔也是经典的算法问题 文章目录 1 汉诺塔问题 1 汉诺塔问题 法国数学家卢卡斯(Edouard Lucas)在1883年提出了一个数学游戏: 传说在世界中心贝拿勒斯(印度北部)的圣庙里,一块黄铜 ...

  3. 【离散数学中的数据结构与算法】九 鸽巢原理

    鸽巢原理是非常著名的原理,生活正用的也很多. 文章目录 1 简单鸽巢原理的应用 2 定理(一般性鸽巢原理) 2.1 应用 3 总结 1 简单鸽巢原理的应用 定理(鸽巢原理) 若有 n 个鸽巢, n+1 ...

  4. 【离散数学中的数据结构与算法】八 排列与组合四

    上一篇文章学习了组合(不可重复选取的).今天来将可重复选取的组合学习一下. 文章目录 1 可重复选取的组合-可重组合 2 总结 1 可重复选取的组合-可重组合 现在有4种口味的棒棒糖,你要从中选3个( ...

  5. 【离散数学中的数据结构与算法】七 排列与组合三

    前两篇文章学习了不可重复选取的排列与可重复选取的可重排列.本篇文章开始学习组合的相关定理. 文章目录 1 组合 1.1 组合的计算公式 2 总结 1 组合 跟排列一样.组合也分为不重复选取的组合,与可 ...

  6. 【离散数学中的数据结构与算法】五 排列与组合一

    在leetcode刷题过程中,遇到过很多关于排列组合的问题.弄清楚排列组合的相关原理,是非常有用处的. 文章目录 1 问题 2 排列-有序选取 2.1 重复选取-可重排列 2.2 不重复选取-排列 2 ...

  7. 【离散数学中的数据结构与算法】二 欧几里得算法与裴蜀等式

    欧几里得算法是计算两个数最大公因子算法.又称辗转相除法.本文将学习为什么辗转相除法可以求得两个数的最大公因子.同时也可以根据最大公因子计算两个数的最小公倍数. 文章目录 1 欧几里得算法的理论基础 1 ...

  8. 【离散数学中的数据结构与算法】四 加法法则与乘法法则

    文章目录 1 加法法则 2 乘法法则 3 例子 3.1 例一 3.2 例二 3.3 例三 4 总结 1 加法法则 加法法则: 设事件 A 有 m 种产生方式, 事件 B 有n 种产生方式,则当 A 与 ...

  9. 【离散数学中的数据结构与算法】三 同余定理

最新文章

  1. MFC中利用CFileDialog选择文件并读取文件所遇到的问题和解决方法
  2. 一篇博客带你轻松应对java面试中的多线程与高并发
  3. think php 关联模型,ThinkPHP 关联模型使用图解
  4. Java属性中指定Json的属性名称(序列化和反序列化)
  5. 【译文练习】ReactiveCocoa概要:了解和使用RACCommand
  6. [靠谱原创!] SSH免密登录设置----原理详解+具体操作(全国人民看完都懂了!)
  7. 人脸检测之Haar分类器方法
  8. 从QQ2010看腾讯
  9. Review and start again——First Period JAVA web Program hotelmanagement:6.some about JAVA factory mode
  10. 马云:眼光有多远 未来就有多远【2014世界互联网大会】
  11. oracle 如何删除库,Oracle删除库
  12. 【华人学者风采】周明 微软亚洲研究院
  13. TI DSP各种库文件
  14. Python计算化学式相对分子质量(含完整代码)
  15. 【记录】我的一个Centos开机自启动脚本的制作
  16. 3、 如何搭建高德离线地图服务
  17. 申报绿色工厂对企业有什么好处
  18. XSS平台 XSS挑战之旅 解题记录 writeup
  19. 都有“减少”的意思,decrease和reduce、lower, Diminish,lessen ,Dwindle ,Descend,Abate怎么区分?
  20. H5 VUE实现手机签名功能

热门文章

  1. spring学习(29):xml配置规范
  2. Linux多线程开发-线程同步-读写锁pthread_rwlock_t
  3. Linux shell重复执行某命令n次
  4. 深度学习之数学基础(临时记录)
  5. 集合计数 (容斥原理)
  6. Jmeter之逻辑控制器(Logic Controller)
  7. 原生Js 两种方法实现页面关键字高亮显示
  8. ABAP表生成Java实体Bean
  9. topcoder SRM712 Div1 LR
  10. 阿里云CentOS服务器挂载数据盘