错排计数问题

1-N的自然数有n!个全排列,如果一个排列使得所有元素都不在应在的位置上,则称之为错排。对任意的n,求出n个元素的错排有多少种,并编程输出这些错排。

 

首先来看计数: 设n个数的错排为Sn;

1. 首先放第一个数A1,因为这个数不能放在正确的位置上,所以有 n-1 个位置可以放,假设放的这个位置为Ak应当在的位置;

2.现在我们还有n-1个数,由于第一个数A1占据了Ak的位置,现在我们来放Ak, 假设Ak放在A1的位置上,那么即这两个数相互交换了位置,现在剩余的n-2个数变成了原来的问题,即Sn-2;

3.假设Ak没有放在A1的位置上,加上这个数的n-1个数(除了已经放好的A1),也变成一个原来的问题,即Sn-1,因为在剩余的n-1个位置中,Ak不能放在其中一个位置上,这不跟原来的问题就是一样的吗。

4.所以递推式为  Sn = (n-1)(Sn-1+Sn-2); S1=0, S2=1

发现这个其实跟金刚坐飞机问题是一样的。

 

然后来看排列:

如果我们已经有了n-1个数的错排,那么加入第n个数的错排其实就是将 1~n-1位置的数与第n个数交换,可知前n-1个数换到第n个位置必不是正确的位置,而第n个数也是从正确的位置换出去,所以仍然是一个错排。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值