错排问题


定义考虑一个有𝑛个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 𝑛个元素的错排数记为𝐷𝑛!𝑛例子伯努利-欧拉的装错信封的问题。形式化定义𝐷𝑛{1,2,,𝑛}上没有不动点的排列(即𝜙:{1,2,,𝑛}{1,2,,𝑛},𝜙(𝑖)𝑖,1𝑖𝑛的个数,𝐷𝑛的值如下:(由𝑛=1起)0,1,2,9,44,265,1854,14833,133496,1334961,14684570,176214841,2290792932...规律𝐷𝑛=𝑛𝐷𝑛1+(1)𝑛递推数列法显然𝐷1=0,𝐷2=1𝑛3时,不妨设n排在了第k位,其中𝑘𝑛,也就是1𝑘𝑛1。那么我们现在考虑𝑘的情况。k排在第𝑛位时,除了𝑛𝑘以外还有𝑛2个数,其错排数为𝐷𝑛2𝑘不排在第𝑛位时,那么将第𝑛位重新考虑成一个新的“第𝑘位”,这时的包括𝑘在内的剩下𝑛1个数的每一种错排,都等价于只有𝑛1个数时的错排(只是其中的第k位会换成第n位)。其错排数为𝐷𝑛1。 所以当n排在𝑘位时共有𝐷𝑛2+𝐷𝑛1种错排方法,又𝑘有从1𝑛1𝑛1种取法,我们可以得到:𝐷𝑛=(𝑛1)(𝐷𝑛1+𝐷𝑛2)生成函数根据规律 𝐷𝑛=𝑛𝐷𝑛1+(1)𝑛可以得到如下:𝐷(𝑥)=𝑥𝐷(𝑥)+𝑒𝑥=𝑒𝑥1𝑥=1𝑥+𝑥22!+...+(1)𝑛𝑥𝑛𝑛!+...1𝑥从置换环的角度考虑,错排就是指置换环中不存在自环的排列。也就是说不存在长度为 1 的置换环。后者的指数生成函数是𝑛2𝑥𝑛𝑛=ln(1𝑥)𝑥因此错排数的指数生成函数就是 exp(ln(1𝑥)𝑥)减掉非错排的情况非错排:存在𝑝𝑖=𝑖的排列只存在一个:𝐶1𝑛𝐷𝑛1,只存在二个:𝐶2𝑛𝐷𝑛2,只存在三个:𝐶3𝑛𝐷𝑛3,只存在n个:𝐶𝑛𝑛𝐷𝑛𝑛,所以,𝐷𝑛=𝑛!(𝐶1𝑛𝐷𝑛1+𝐶2𝑛𝐷𝑛2+𝐶3𝑛𝐷𝑛3+...+𝐶𝑛𝑛𝐷𝑛𝑛)=𝑛𝑘=0(𝑛𝑘)(𝑛𝑘)!那一定是你程序写错了通向公式𝐷𝑛=𝑛!𝑀𝑛𝑀𝑛𝑀𝑛1=(1)𝑛1𝑛!𝐷𝑛=𝑛!(12!13!+14!...+(1)𝑛1𝑛!)多项式模拟𝐷𝑛最接近 𝑛!𝑒 的整数考虑指数函数在 0 处的泰勒展开:𝑒1=1+(1)11!+(1)22!+(1)33!+...+(1)𝑛𝑛!+𝑒𝑐(𝑛+1)!(𝑐1)𝑛=𝐷𝑛𝑛!+𝑅𝑛其中|𝑅𝑛|𝑒0(𝑛+1)!=1(𝑛+1)!所以|𝑛!𝑒𝐷𝑛|𝑛!(𝑛+1)!=1𝑛+1𝐷𝑛=𝑛!𝑒+0.5