错排规律-CSDN

错排规律

错排问题是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。

n个有序的元素应该有n!种不同的排列。如果一个排列式的所有的元素都不在原来的位置上,则称这个排列为错排。任给一个n,求出1,2,……,n的错排个数f[n]共有多少个。

递归关系式为:f[n] = (n-1) * ( f[n-1] + f[n-2] )

其中f(1) = 0,f(2) = 1。

分析: 

n 个不同元素的一个错排可由下述两个步骤完成: 

第一步,“错排” 1 号元素(将 1 号元素排在第 2 至 n 的任一位置),有 n - 1 种方法。 

第二步,“错排”其余 n - 1 个元素,按如下顺序进行。视第一步的结果,若1号元素落在第 k 个位置,第二步就先把 k 号元素“错排”好, k 号元素的不同排法将导致两类不同的情况发生:

(1)、 k 号元素排在第1个位置,留下的 n - 2 个元素在与它们的编号集相等的位置集上“错排”,有 f(n -2) 种方法;

(2)、 k 号元素不排第 1 个位置,这时可将第 1 个位置“看成”第 k 个位置(也就是说本来准备放到k位置为元素,可以放到1位置中),于是形成(包括 k 号元素在内的) n - 1 个元素的“错排”,有 f(n - 1) 种方法。据加法原理,完成第二步共有 f(n - 2)+f(n - 1) 种方法。 

扫描二维码关注公众号,回复: 2532693 查看本文章

根据乘法原理, n 个不同元素的错排种数 

f(n) = (n-1)[f(n-2)+f(n-1)] (n>2) 。 

还有一种情况就是错排+组合,前面我写过的有一道,HDU2049,想了解的可以去·看一下。

错排的核心代码:

f[1] = 0;
f[2] = 1;
for(i = 3; i <= n; i ++)
	f[i] = (i-1) * (f[i-1] + f[i-2]);

 

 

猜你喜欢

转载自blog.csdn.net/queen00000/article/details/81382192