版权声明:本文为博主原创文章,未经博主允许不得转载。
所谓的错排,有一个错排公式可以来运用,但是就个人而言,还是想给大家深入讲解其含义,当然:“如果看到此处觉得没有必要再深入去了解,自己只是需要个公式而已,那么请你关掉我的博客页面,移步度娘即可。”
切入正题:
首先摆出公式:
// 当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D[n]表示,那么D[n-1]就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.
//维护边界
D[1] = 0; D[2] = 1;
//错排的递归公式
D[n] = (D[n - 1] + D[n - 2]) * (n - 1);
那我们来分析下,为什么式子中用加法的地方不用乘法呢?为什么用乘法的地方不用加法呢?(当然如果你懂了这些,你也就会明白:为什么在求解上楼梯的问题时,你到达最后一层的方法数是:你从第一层到达最后一层的前一层的方法数加上你从第一层到达最后一层的前两层的方法数的加和。)并且这种问题通常都要维护边界。
这将会涉及到我们之前在组合数学中学过的“分类计数原理(加法原理)和分布计数原理(乘法原理)”,两者都是用来统计完成一件事的不同方法总数的问题。
简述一下基础概念:
分类计数原理(加法):针对的是”分类“问题,完成一件事只有一个步骤,用其中任何一种方法都可以完成这件事。
分布计数原理(乘法):针对的是”分布“问题,完成一件事需要多个步骤,用其中所有方法一起才能完成一件事。
错排公式推导步骤:
要求求解的问题:
当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数是多少?
首先将n个元素都放在一个位置,假设这个位置是元素K的位置,那么除去K以外,还有(n - 1)个元素,故有(n - 1)种放置方法。(分析可知:此时我们只求出了n个位置中的一个位置的错排方法数,并没有完全解决紫色加粗字体所陈述的问题,因此这个问题需要执行分布计数)那么,我们就可以猜到,最终式子的一部分如下:
D[n] = (n - 1) * ?; //问号就表示我们接下来还需要求解的部分
//由于是运用分布计数,因此是运用乘法;
此时(k位置已经在第一步计算过,所以要排除掉--------相当于在执行第二步时,问题被缩小了!!),那么当第k个元素放在了第n个位置,那么就要错排剩下的(n - 2)个元素,即为D[n - 2];如果此时第k个元素没有放在第n个位置,那么就要错排剩下的(n - 1)个元素,即为:D[n - 1];(分析可知:此时是两种方法都可以完成除去k位置之后的其他位置的完全错排,故在这个缩小问题的内部运用分类计数)如下:
D[n - 1] + D[n - 2];
那么做到这里前面的问号部分就被我们求解出来了!!最后我们将两部分合起来,错排公式就呈现出来了,如下:
D[n] = (D[n - 1] + D[n - 2]) * (n - 1);
最后再重温一下,因为我们将错排公式推导的一个整体问题,分解成了两部分,并且这两部分谁离开谁都不能独立完成我们所要求解的问题,因此我们最终使用分布计数原理,用乘法将两部分结果乘起来得到了错排公式。
到这里,错排基本上就讲解完毕,最后再推荐错排练手的题目给大家: HDU-2089
在此非常感谢大家的观看,我真切的希望自己的博客能够尽可能多的帮助到大家。
因此还请大家多多指教。当然如果你觉得写的不错有帮助到你,那就请给我点个赞,加加油。