全排列与逆序对


全排列

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫n的全排列。

逆序列

逆序

在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。

逆序数

一个排列中逆序的总数就称为这个排列的逆序数。

奇偶排列

逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列

相关问题

给排列,求逆序数

这个问题比较简单,直接对每个数字求一下逆序数,相加就可以了。

可以用线段树,树状数组等优化

根据逆序数推排列数

问题1

给定一个n元排列,它的逆序数存在且唯一,那么我们求一下已知一个n元排列的逆序数为m,这样的n元排列有多少?

我们用$f(n,m)$表示逆序数为m的n元排列的个数

前提知识1

对任意n>=2且0<=m<=$C_n^2$时$f(n,m)$>=1;当m>$C_n^2$时,$f(n,m)$=0

$f(2,0)=1,f(2,1)=1,f(2,2)=0$

易证

前提知识2

$f(n,m)=f(n,C_n^2-m)$

对于一个逆序数为m的n元排列,$a_1,a_2,a_3,…a_n$,那么$a_n,a_{n-1},a_{n-2}…a_1$的逆序数为$C_n^2-m$

反过来同理

前提知识3

$f(n+1,m)=f(n,m)+f(n,m-1)+…+f(n,m-n)$

考虑由$a_1,a_2,…a_n$组成的排列,那么我们在其中加上$a_{n+1}(a_{n+1}>\{a_1,a_2,…a_n\})$的话,$a_{n+1}$ 可以放在排列中的任意一个位置

放在末尾对逆序列没有影响,那么$f(n+1,m)+=f(n,m)$,放在首位的话逆序对增加$n$那么$f(n+1,m)+=f(n,m-n)$,以此类推,放在排列中的其他位置就是$f(n+1,m)=f(n,m-i)$

那么$f(n+1,m)=f(n,m)+f(n,m-1)+f(n,m-2)+…+f(n,m-n)$

前提知识4

$f(n,0)=f(n,C_n^2)=1$

前提知识5

$f(n,1)=f(n,C_n^2-1)=n-1$

$f(n,1)=f(n-1,1)+f(n-1,0)=f(n-1,1)+1$

前提知识6

$f(n,2)=f(n,C_n^2-2)=C_n^2-1(n>2)$

由3,4,5可知

$f(n,2)=f(n-1,2)+f(n-1,1)+f(n-1,0)=f(n-1,2)+n-1$

根据$f(2,2)=0$可证

同理:

$f(n,3)=C_n^3-C_n^2-C_n^1(n>3)$

$f(n,4)=C_n^4+2C_n^3-C_n^1(n>4)$

$f(n,5)=C_n^4+3C_n^4+2C_n^3-C_n^2+1(n>5)$

$….$

问题2

给定逆序数,求满足此逆序数的最小排序

前提知识1

对于n的全排列,在它完全倒序的时候逆序数最多

前提知识2

对于一个形如$1,2,3,…,i-1,i,n,…,i+1$的排列$q$,在数$n$前保证首项为1,且严格以公差为1递增而数n以后排列任意的数列

当数$n$之后是递减的时候$q$的逆序数最多,$t=C_{n-i}^{2}$

排列$q$是出现逆序对为$t$的最小排列

前提知识3

我们把数$n$之后的第$k$小数与数$n$的前一个数(即$i$)交换,然后是数$n$后面保持逆序,这样得到的新排列的逆序对数为

$t=C_{n-i}^2+k$,且这个排列是逆序数$t$的最小排列


文章作者: Mug-9
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Mug-9 !
评论
  目录