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])
    
  • 相关阅读:
    密码
    日历游戏
    最大公约数
    从map到hash
    9、RabbitMQ-集成Spring
    8、RabbitMQ-消息的确认机制(生产者)
    7、RabbitMQ-主题模式
    6、RabbitMQ-路由模式
    5、RabbitMQ-订阅模式 Publish/Subscribe
    4、RabbitMQ-消息应答与消息持久化
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/12608481.html
Copyright © 2011-2022 走看看