错排算法

题目:年会分奖
描述:今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:

  1. 首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;
  2. 待所有字条加入完毕,每人从箱中取一个字条;
  3. 如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”

现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?
输入描述:
输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。
输出描述:
对应每一组数据,以“xx.xx%”的格式输出发生无人获奖的概率。
示例1
输入
2
输出
50.00%

这是牛客网上一道典型的错排算法题。

错排算法,简单来说就是n个元素,让他们重新排列后都不在自己的位置上。设有n个元素,共有m种错排方式

  • n = 1, 那么 m = 0;
  • n = 2, 有[2,1]一种排列方式 , m = 1;
  • n = 3, 有[2, 3, 1], [3, 1, 2]两种, m = 2;
  • n = 4, m = 9,具体可以自己枚举。

可以看出,n越大,需要枚举的次数就越多,这时就需要找出通解。

我们拿n = 4举例:
①全排列共 4!,由于 全排列次数 = 错排 + 正确。所以我们需要排除存在正确位置的排列项即可,而1排正确的次数有 3!,2排正确的次数有3!。
所以错排次数 = 4!- 4 × 3!
②那么此时存在一个问题,在减去排一次正确的时候多减了排两次正确的次数,比如1, 2排正确有[1, 2, 4, 3], 2, 1排正确有[1, 2, 4,3],就减了两次。此时需要加上排两次正确的次数。两个正确的组合有6种(12,13,14,23,24,34),剩余两个随便排2!
所以错排次数 = 4!- 4 × 3 ! + 6 × 2.
③又存在一个问题,在加上两个正确的组合后却多加了三个正确的组合,比如,1,2, 3位置正确时我们加了[1,2,3,4]这个组合,那么在2,3, 1位置正确的时候,我们也加了[1,2,3,4]这个组合,所以此时应该减去3次正确的次数,三个正确的组合有(123,134,124,234)四种,剩余一个排就1种。
所以错排次数 = 4!- 4 × 3 ! + 6 × 2 - 4 × 1.
④又有问题了,在减去三个正确的组合时,多减了4个正确的组合,比如1,2,3, 4位置正确时减去了[1,2,3,4], 2,3,4,1位置正确时减去了[1,2,3,4].所以应该加上4个正确的情况,[1,2,3,4].
所以错排次数 = 4!- 4 × 3 ! + 6 × 2 - 4 × 1 + 1 = 9.
下面这个图方便理解,将面积作为次数,次数加减相当于图形面积的加减,可以看出,每次涉及到图形加减时都会重复的加或减去多个图形公共的部分,就比如要算 红色和绿色的面积 = 红 + 绿 - 红绿相交。
在这里插入图片描述
所以总结出来的公式为
在这里插入图片描述
还有一个理解方法,
解释:n个不同的元素的错排。

1:首先我们先错排第1号元素,第一号元素可以排的位置有第二个位置到第n个位置,那么第一步有(n-1)种情况;

2:第二步,“错排”其余 n - 1 个元素,按如下顺序进行。视第一步的结果,若1号元素落在第 k 个位置,第二步就先把 k 号元素“错排”好, k 号元素的不同排法将导致两类不同的情况发生:
① k 号元素排在第1个位置,留下的 n - 2 个元素在与它们的编号集相等的位置集上“错排”,有 f(n -2) 种方法;
② k 号元素不排第 1 个位置,这时可将第 1 个位置“看成”第 k 个位置(也就是说本来准备放到k位置为元素,可以放到1位置中),于是形成(包括 k 号元素在内的) n - 1 个元素的“错排”,有 f(n - 1) 种方法。据加法原理,完成第二步共有 f(n - 2)+f(n - 1) 种方法。
根据乘法原理, n 个不同元素的错排种数
f(n) = (n-1)[f(n-2)+f(n-1)] (n>2) 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值