ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-03-23 08:50:13  阅读:246  来源: 互联网

标签:... 数据结构 cup 元素 离散数学 位置 编号 错排


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

文章目录

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! - |A 1 A 2 A~1~\cup A~2~A 1 ∪A 2 A 3 \cup A~3~∪A 3 ...A n \cup ...\cup A~n~∪...∪A n |

由容斥原理:

在这里插入图片描述

可得:

在这里插入图片描述

2 总结

  • 学好数学

标签:...,数据结构,cup,元素,离散数学,位置,编号,错排
来源: https://blog.csdn.net/qq_37375427/article/details/88753152

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有