完全错排解题细节补充

错排问题,又称更列问题,是组合数学中的问题之一。对于它的研究最早可以追溯到十八世纪,当时他被数学家尼古拉·伯努利和欧拉研究,因此在历史上也被称为伯努利--欧拉的错装信封问题。这个问题有许多具体的版本,比如在写信时讲n封信装到n个不同的信封里,有多少种全部装错信封的情况?再比如n个人各写一张贺卡相互赠送,有多少种赠送方法?这些经典的题目都是典型的错排问题。

相信看过上面对于错排问题的简单的介绍,大家也都对它有了一些初步的了解,归结起来,就是考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排,n个元素的错排数记为D(n)。那么对于这样的排列D(n)有多少种呢?

我们一步一步进行分析:

首先,对于D(n),有1~n这样n个元素错排,所以对于第一个元素①,它现在可能的位置有(n-1)个,倘若它在第k个元素的位置上,对于第k个元素而言,它所在的位置就有两种可能—第一种,它处在非第一个元素①位置上,所以对于接下来的排列就相当于是n-1个元素的错排,即D(n-1);第二种,它处在第一个元素①的位置上,所以在排列D(n)中有两个元素找到了位置,那么接下来的队列就相当于是n-2个元素的错排。

因此,对于D(n)都有 D(n) = (n-1) (D(n-2) + D(n-1))

补充说明

讲到这里应该会有很多人不太理解D(n-1)的情况难道不包含D(n-2)的情况吗?

如果用A、B、C、D、E五名学生来解释更具体,第一个元素我们选择A,A占据了B的位置,B如果同时占据了A的位置,那么剩下的就是CDE三个人错排占坑了,但是如果A占据了B的位置,B并没有去占A的位置,这时候怎么理解呢?上面直接给了D(n-1)的结论,这是很让人摸不着头脑的,估计转发这道题的人也没搞明白。

这里绕了一个弯,利用了等价思维,你会发现当B不能在A位置时,就等价于B不能在B位置上,这跟A一开始不能在A的位置上是等价的,这里的A位置可以理解为B的位置了,其余CDE三个位置不变,这样B(A位置)CDE组成新四个位置,这四个位置,仍然要全部错排,B不能在A位置,但可以在CDE位置上,以此类推,就相当于我们要知道D(n-1)的错排数。

所以,上述的B的位置分两种,一种是在A上,一种是不在A上,且两种情况没有重叠。

def bucket(n):
    if n == 1:
        return 0
    if n == 2:
        return 1

    return (n - 1) * (bucket(n - 1) + bucket(n - 2))


print(bucket(5))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值