zoukankan      html  css  js  c++  java
  • 错排

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

    考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排

    将问题分为两个步骤

    把n本书的错排操作数记为D(n)

    步骤1

    先从n本书里面任意选一本书,下标为m,将m进行错排,可以从n-1个位置里任意选一个位置为k,那么有
    n-1种情况,此时编号为m的放到下标k位置,手里拿着下标为k的书
    下面对下标为k的书进行错排

    步骤2

    下标为k的书有两种选择

    • 直接选择放在下标m位置
    • 从除了位置m以及位置k的剩下的n-2个位置中选择一个位置
      方法1完成后,完成了2个错排,还有D(n-2)个书的错排
      方法2也就是完成了1个错排,将n-1那么就变成了步骤1
      有n-1本书,手里拿着下标为k的书,把下标变成m,这本书不能放在下标为m的地方为D(n-1)

    结论

    • 和组合数一起运用,n个元素有m数字错排

    [C_n^m * D_m ]

    • 全错配递推公式

    [D(n)= (n - 1) * [D(n - 1) + D(n - 2)] \ D(1) = 0, D(2) = 1]

    模板

    void getd(){
        d[1] = 0, d[2] = 1;
        for(int i = 3; i <= 26; i++){
            d[i] = (i - 1) * (d[i - 1] + d[i - 2]);
        }
    }
    
  • 相关阅读:
    tar压缩
    sh脚本的dos和unix
    hive常用函数
    hive的union问题
    hive行转多列LATERAL VIEW explode
    Iterator和Enumeration
    基础啊基础
    一道考题---当n=1,2,3...2015时,统计3n+n3能整除7的个数
    自然语言处理
    矩阵相乘
  • 原文地址:https://www.cnblogs.com/Emcikem/p/11884773.html
Copyright © 2011-2022 走看看