错排问题

定义

  • n个有序的元素应有n!个不同的排列,如若一个排列使得所有的元素不在原来的位置上,则称这个排列为错排;
  • 如,1 2的错排是唯一的,即2 1。1 2 3的错排有3 1 2,2 3 1。这二者可以看作是1 2错排,3分别与1、2换位而得的。

错排公式

递推关系

为求其递推关系,分两步走:
第一步,考虑第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)种放法。

根据乘法和加法法则,综上得到:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

错排生成算法

在实际应用中,当n较大时,手动枚举费时费力,需要程序依照算法生成所有错排方案。
主要有递归法、基于字典序的筛选法和改进字典序法。

  • 递归法
    递归法的思想为逐位安排:
    首先安排第一位,并记录被安排的数,然后递归,同样的方法安排第二位……直到安排到到第n位。若第n位满足错排,则错排方案数加一,并输出该错排,并返回;否则直接返回,返回后,撤销该位安排的数。其中,安排每一位时,都遍历了n个数,下一位的递归返回后都撤销这位安排的数,然后遍历到下一个数,重新递归。这样通过不断遍历和递归,实现了所有错排方案的生成。

  • 基于字典序的筛选法
    首先按照字典序生成每一个排列,然后检验生成的该排列是否满足错排,如果是则方案数加一并输出,否则生成下一个排列。

  • 改进字典序法
    改进字典序法是在字典序的基础上改进而成,主要思想是:按照字典序,一旦出现不满足错排的排列,则由此开始跳过接下来的不满足错排的一些排列。由于避免了长段的非错排的排除流程,因此相对传统字典序法能够提高算法效率。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值