• 我对“错排问题”的理解


    思路来自 百度百科 中的一段话:

    (n) 个数的错排方案数为 (D_n)

    第一步,考虑第 (n) 个元素,把它放在某一个位置,比如位置 (k) ,一共有 (n-1) 种放法;

    第二步,考虑第 (k) 个元素,这时有两种情况:

    (1)把它放到位置 (n) ,那么对于除 (n) 以外的 (n-1) 个元素,由于第 (k) 个元素放到了位置 (n) ,所以剩下 (n-2) 个元素的错排即可,有 (D_{n-2}) 种放法;
    (2)第 (k) 个元素不放到位置 (n) ,这时对于这 (n-1) 个元素的错排,有 (D_{n-1}) 种放法。

    根据乘法和加法法则,综上得到

    [D_n = (n-1) imes ( D_{n-2} + D_{n-1} ) ]

    然后我的理解是这样的,我把问题变成了下面的这样一个问题:

    假设现在有 (n) 对亲兄妹,(n) 个哥哥的编号为 (1 sim n), (n) 个妹妹的编号为 (1 ~ n),现在你要给这 (2 imes n) 个人凑成 (n) 对夫妻,要求亲兄妹不能结婚,求方案数?

    我们假设 (n) 对亲兄妹凑成 (n) 对夫妻的方案数为 (D_n),那么我们现在可以考虑:

    给我们 (n) 对亲兄妹,我现在要给编号为 (n) 的哥哥找媳妇,那么编号为 (1 sim n-1) 的妹妹都可以当做编号为 (n) 的哥哥地媳妇。

    假设我选择了编号为 (k) 的妹妹和编号为 (n) 的哥哥配对,则现在有编号为 (k) 的哥哥和编号为 (n) 的妹妹落单了。

    这个时候我有 (2) 种选择:

    选择一:编号为 (k) 的哥哥和编号为 (n) 的妹妹配对。

    这种情况下,其它的 (n-2) 对还需要错排,所以这种方式下的错排方案是 (D_{n-2})

    情景:(n)哥哥和(k)妹妹结婚去了,临走之前(n)哥哥做了一个媒,将自己的(n)妹妹嫁给了(k)哥哥。(凑成了 (2) 对,剩下 (n-2) 对)

    选择二:编号为 (k) 的哥哥和编号不为 (n) 的妹妹配对。

    这种情况下,就是编号为 (k) 的哥哥不能和编号为 (n) 的妹妹配对,那么这个时候就跟他们是亲兄妹是一样的。

    情景:(n)哥哥临走之前想要将自己的(n)妹妹嫁给(k)哥哥,但是被拒绝了,然后(n)哥哥说:“既然你不想娶她,那么你就跟她认一个兄妹吧”,然后(k)哥哥就变成了(n)妹妹的哥哥,然后就又变成了 (n-1) 对兄妹的错排问题。

    两种选择是互斥的,他们汇总之后就是在选择 (n) 哥哥和 (k) 妹妹的错排总方案:

    [D_{n-2} + D_{n-1} ]

    外加 (k) 一共有 (n-1) 种选择,根据乘法原理,错排问题的方案数:

    [D_n = (n - 1) imes ( D_{n-2} + D_{n-1} ) ]

  • 相关阅读:
    c++0.9-----c++ primer之noexcept解读
    c++0.8-----快速定位c++源码位置的小技巧
    c++0.7-----源码分析:iostate及badbit/failbit/eofbit/goodbit以及io文件的包含关系<原创>
    c++0.6-----如何在自己搭建的c++环境中使用extern变量
    c++0.5-----如何在widows下面搭建最简洁的c++环境
    c++0.4-----面向对象的三种关系(继承/复合/委托)
    c++0.3----this指针/static/namespace
    c++0.2-----基于对象的类(包含指针)
    3、静态代理模式
    2、工厂方法模式
  • 原文地址:https://www.cnblogs.com/quanjun/p/12307873.html
Copyright © 2020-2023  润新知