错排问题及其推广小结

错排问题及其推广小结

错排问题最早被尼古拉·伯努利和欧拉研究,因此历史上也称为伯努利-欧拉的装错信封的问题。
问题1
    n个元素放入n个编号位置,其中第k号元素不能放在第k号位置的所有情况有多少种?    

n = 1f(1) = 0;
     n = 2; f(2) = 1;
     n >= 3; f(n) = (n-1)*(f(n-1)+f(n-2));
     n12的情况很好求,对于n大于3的情况,我们可以这样理解:
        a:我们可以这样理解,对第n个元素,如果是(n-1)个元素原本符合要求,那么第n个元素和前(n-1)个元素都交换一次这是一种情况,(n-1)*f(n-1);
        b:也可以是在前(n-1)个元素中有一个元素不是错排的,即对第k元素的排列还是在第k个位置上,这时只要把kn交换也满足了条件,这是第二种情况,(n-1)*f(n-2);
    所以:f(n) = (n-1)*(f(n-1)+f(n-2));
    Tips:f(n)的通项公式为:f(n) = n![1-1/1!+1/2!-1/3!+……+(-1)^n*1/n!] 
    
推广1
    k*n个人,每组k个人,共n组,坐到nk列共n*k个位置中,但若第i(i=1,2......n)组不能坐到第i(i=1,2......n)行中(组内成员可换位置).问:共有几种不同的坐法?    

n = 1; f(1) = 0;
     n = 2; f(2) = A(k)*A(k);  //A(k)函数表示k个元素的全排列数
     n >=3; f(n) = A(k)*(n-1)*(f(n-1)+A(k)*f(n-2));
     n1时:第一组成员不能坐在第一行中,f(1)=0;
     n2时:第一组成员坐第二行,第二组成员坐第一行,f(2)=A(k)*A(k);
    n>=3时:
        a:对于第n列元素,如果前(n-1)列元素原本符合要求,那么第n列元素和前(n-1)列元素都交换一次,这种情况为A(k)*(n-1)*f(n-1);
        b:也可以是在前(n-1)列元素中有一列元素不是错排的,即对第k列元素的排列还是在第k列位置上,这时只要把第k列和第n列交换也满足条件,这种情况为A(k)*A(k)*(n-1)*f(n-2);
    所以:f(n) = A(k)*(n-1)*(f(n-1)+A(k)*f(n-2));


推广2
    k*n个人,每组k个人,共n组,坐到nk列共k*n个位置中,但若第i(i=1,2......n)组不能坐到第i(i=1,2......n)行中,组内成员可换位置,但每组内第j人不能坐到第j列.问:共有几种不同的坐法?
    n = 1; f(1) = 0;
    n = 2; f(2) = D(k)*D(k);  //D(k)函数表示k个元素的全错排列数
    n >=3; f(n) = D(k)*(n-1)*(f(n-1)+D(k)*f(n-2));
    证明略~

 

推广3
    编号为a11,a12,...a1k,......,an1,an2,...ankn*k个人(每组k个人,共n),坐到编号为b11,b12,...b1k,......bn1,bn2,......bnkn*k个位置中(nk), 但编号为aij的人不能坐到编号为aij的位置中,问:共有几种不同的坐法?
    Tips:此问题实际上就是n*k个数的错排问题。
    t = n*k;
    t = 1;  f(1) = 0;
    t = 2;  f(2) = 1;
    t >=3;  f(t) = (n-1)*(f(t-1)+f(t-2));

 

原文地址:https://www.cnblogs.com/ruo-yu/p/4411941.html