算法 —— 错排算法

错排算法

1.认识:
什么是错排算法?
举个简单的例子,教室里有十个座位(1 ~ 10),十位同学分别坐在一个不同的位置上(1 ~ 10),现要求打乱所有同学的位置,打乱规则如下:所有的同学都不能出现在原来的位置上,问有多少种打乱的方法?

引出错排问题:有n个正整数1,2,3,……n,将这n个正整数重新排列,使其中的每一个数都不在原来的位置上,这种排列称为正整数1,2,3,……n的错排,问这n个正整数的错排个数是多少?

我们设有一个表达式 a(n) 可以让我们直接计算出 n 个数的错排个数,如何找到这个表达式就是我们需要解决的问题。

2.找表达式
为了解决这个问题,我们可以先从简单的情形入手:

  1. 当n=1时,由于只有一个数1,不可能有错排,所以a1=0.

  2. 当n=2时,两个数的错排是唯一的,所以a2=1.

  3. 当n=3时,三个数1、2、3只有2、3、1和3、1、2两种错排,所以a3=2.

  4. 当n=4时,四个数1、2、3、4的错排有:2、1、4、3; 2、3、4、1; 2、4、1、3; 3、1、4、2; 3、4、2、1; 4、1、2、3; 4、3、1、2; 4、3、2、1,共有9种错排,所以a4=9.

  5. 当n=5时,。。。。。。

可以发现,在n很小的时候我们要找到错排的个数还是很容易,但从n=5甚至n=4开始就不再是那么容易的事情了。
那怎么办呢?
哎!我们可以想到在错排过程中第n个数不能放在n位上,那它放在哪,我们现在假设n放在m位上(1 =< m =< n-1),那问题来了,你占了m的位置m放在哪,可以很容易想到m有两种情况:

  1. 放在n位,那么整个错排过程就是对除了n和m之外的其他n-2个数进行错排,即a(n-2)
  2. 不放在n位,那么整个错排过程就是对除了n之外的其他n-1个数进行错排,即a(n-1)

所以n在第m位上的错排数共有 a(n-1)+a(n-2) 种,由于m可取1、2、3、4、……、n-1共n-1 种取法,

n个数的错排个数递推公式,a1=0,a2=1,当n≥3时,
a(n) = (n-1)*(a(n-1) + a(n-2))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值