1 定义
n个有序的元素应有n!个不同的排列,如若一个排列使得所有的元素不在原来的位置上,则称这个排列为错排;有的叫重排。
2 推导及公式
考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排
将问题分为两个步骤
把n本书的错排操作数记为D(n)
第一步,选择第n个元素的位置,共有n-1种方法(假定放在标号为k的位置);
第二步,选择第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.
举例:123的完全错排只有231、312两个
;;完全错排common lisp 源代码
(defun d (n)
(cond ((not (integerp n)) (format t "完全错排参数应该是整数") )
((<= n 0) (format t "完全错排参数应该大于0") )
( (= n 1) 0 )
( (= n 2) 1 )
((> n 2) (* (- n 1) (+ (d (- n 1) ) (d (- n 2) ))))))