zoukankan      html  css  js  c++  java
  • 错位重排算法公式的理解

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

    公式是

    D[n] = (n-1)(D[N-1] + D[n-2])
    

    假设n个数是从1到n,
    n个位置(或者说信封)是从p1到pn。

    将数字分为两种1~(n-1),和n。
    第一种分有(n-1)个数,针对每个数考虑有几种排列,假设当前考虑的是数字k

    显然数字k不能放在pk上(否则不符合错位的要求)

    公式第一部分

    考虑将k放在pn上,将n放在pk上,这样n和k就满足了错位的要求。

    那么在这种情况下,有多少种排列呢?因为n个数字中,2个数字固定,所以相当于剩下n-2个数字的错排数量:D[n-2]

    公式第二部分

    这一部分稍难理解。

    同样,k还是放在pn上,但是此时同样也不允许n放在pk上,也就是将n也放入剩下的n-2个数字中进行错排,此时有D[n-1]种组合。

    这里的关键点在于,n-1个数错排,所谓错排,就有相应的对排(原位置),除k以外,其他数字原位置就是她们的数字位置,但数字n的原位置在哪呢?

    在k。即这种情况下k的位置出现数字n是不允许的。

    这有两层含义:

    1. 这种情况下,就完全符合D[n-1]的情况
    2. 这样n不允许在k处,也就和公式第一部分数量不重复。同时又和第一种情况完全互补

    合并

    由于有n-1个(公式第一部分+公式第二部分),所以最后公式为

    D[n] = (n-1)(D[N-1] + D[n-2])
    
  • 相关阅读:
    JBoss野心勃勃的Web Beans
    缺陷消除率(DRE)
    New Features in EJB3.1(Part 1)
    Anders谈C# 4.0:新功能和展望
    NetBeans 时事通讯(刊号 # 32 Nov 03, 2008)
    JBoss野心勃勃的Web Beans
    Seam 敏捷开发与 JavaEE 经典分层架构
    目前加密算法解释【转载】
    借助FireBug来学习JavaScript的window对象
    extjs form 取值 赋值 重置
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/12608481.html
Copyright © 2011-2022 走看看