错排问题详解

错排问题

n个有序的元素应有n!个不同的排列,如若一个排列使得所有的元素不在原来的位置上,则称这个排列为错排;有的叫重排。
错排公式
递推关系
为求其递推关系,分两步走:
第一步,考虑第n个元素,把它放在某一个位置,比如位置k,一共有n-1种放法;
第二步,考虑第k个元素,这时有两种情况:(1)把它放到位置n,那么对于除n以外的n-1个元素,由于第k个元素放到了位置n,所以对剩下n-2个元素的错排即可,有F[n-2]种放法;(2)第k个元素不放到位置n,这时对于这n-1个元素的错排,有F[n-1]种放法。
根据乘法和加法法则,综上得到F[n]=(n-1) * ( F[n-1]+F[n-2] )

再详细一点 转一篇大神的讲解

问题:现有10本书按照顺序摆放,现要求重新排列,使得新的书的顺序中每一本书都不在原来的位置,求有多少种排列方式?

这个问题推广一下,就是错排问题,是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为D(n)。 研究一个排列错排个数的问题,叫做错排问题或称为更列问题

OK,现在详细分析这个问题,我们要的最终结果就是书的编号与所在位置的编号不同,在这里,我们把n本书的错排操作数记为F(n),那n-1本就是F(n-1),n-2本就是F(n-2)啦,下面,我们把放置问题分为两步(初始位置号与书的编号相同):

第一步:

我们取一本书,书的编号为m,现在这本书就在我们手中,注意,按照题目要求,最开始的时候这本书的位置号也是m号,按照题目要求,我们现在放书时不能放回这个位置m了,而是要选择其他位置,那么有多少种选择呢,想一下,总共有n本书,n个位置,现在我手里这本书不能把它放到位置m,那么剩下的n-1个位置我当然就是随便扔啦,也就是n-1种扔法,好,现在,我选择了位置k,我决定把手里这本书放到位置k这里,记住这个是位置编号k,那么,我肯定要把原来这里的编号为k的书拿出来,再把这本编号为n的书放进去喽。所以,现在我们手里的书的编号是k

第二步:

我们把手里这本编号为k的书本放到书架,注意,放的过程中我们又面临两种情况,可以想到,此时此刻现在书架上编号m的位置是空着的,所以我们可以选择放在这个位置上,书的编号为k,位置编号为m,没错,满足题意,这是第一种情况,还有一种就是我不选择这个空着的位置m,我再重新选择一个新的位置,我们称之为第二种情况,下面详细分析

第一种情况:我把这本编号为k的书放到这个编号为m的地址,那现在我们面前是什么状况呢,就是位置k和位置m的书交换位置,也就是位置号不等于书号,即满足错排,总共n个位置,我们只动了m和k这两个位置,那么剩下的n-2个位置还是纹丝不动,保持一一对应的关系呢,那么对于剩下的这n-2本书的错排操作,我们又回到了问题的起点,求n-2本的错排操作数F(n-2),结合第一步,我们可以得到第一种情况总共有 (n-1) * F(n-2) 种方法

第二种情况:我们不选择这个空着的位置m啦,我们手持这本编号为k的书,加上剩下的n-2本书一共有n-1本,直接对这n-1本书进行错排就好了,即 (n-1) * F[n-1]

原答案第二种情况我认为有点废话,所以这里我进行了改动 这里给出我对第二种情况的思考 因为第一种情况是将编号为k的书放在m位上,所以第二种情况要求k不在m位上,但我一直搞不懂为什么对n-1个元素进行错排就能确定k不在m位上 其实这里是需要跳脱出来的 我们可以将m位视作k的位置,即k不能放在k上 那其实就是对包括编号k的n-1本书进行错排
暂时先这样理解吧- -我认为这是唯一能让我不再纠结下去的办法了

好的,现在我们总结两种情况,结果进行相加,就可以得到递推公式啦

递推公式为:F[n]=(n-1) * ( F[n-1]+F[n-2] )

给出大神的原详解

这里还有一种解释我觉得是比较易懂的,就写一下
借用HDU2049的题目:不容易系列之(4)——考新郎
在这里插入图片描述
首先考虑,如果开始有n-1个新郎,并且这n-1个人都已经完成了错排(有f(n-1)种可能),现在又来了一个人,那么后来的第n个人可以通过用自己的新娘去和那n-1个人中的任意一个交换,来实现n个人都错排。这种情况有 (n-1) * f[n-1] 种可能;

另外,如果开始的n-1个人不是都错排,那么要想使第n个人过来与其中一个交换后实现错排的话就必须满足两个条件:

1.那n-1个人中只有一个人选到了自己的新娘,也就是说有n-2个人都已经错排了。

2.第n个人必须和那个选到自己新娘的人去交换,但那个选到自己新娘的人可以是n-1个人中的任意一个。这种情况有 (n-1) * f[n-2] 种可能。

其他情况都不能满足n个人错排。

因此递推关系:f[n]=(n-1)*(f[n-1]+f[n-2])

如果实在有不会的那就先套公式吧- -别有强迫症 多刷刷题再回来看看 会简单很多

猜你喜欢

转载自blog.csdn.net/m0_46108436/article/details/104240272