【康托展开】

康托展开:

1.定义:给一个n个不同数字的排列,求所有排列中比该排列要小的个数X

2.式子:$X=a_n*(n-1)!+a_{n-1}*(n-2)!+……+a_1*0!$,其中$a_i$表示第1位到第i-1位上的数字中,比第i位(从右往左数)数字的个数小的数量。

3.例子:如 {1、2、3、4}的一个排列 {2、1、4、3}:

  X=1*3!+0*2!+1*1!+0*1!= 7。

逆康托展开

1.猜想:既然我们可以通过1-n的一个排列S,求出X(S),那么是否给定一个X(S)可以求出S呢?

2.结论:可以。

  对于给定的X(S)我们第一次对(n-1)!取商和余,商即为$a_n$;

  第二次对让第一次的余(n-2)!取商和和余,商即为$a_{n-1}$;

  ……

  求出$a$以后,我们对$a$进行反解,即X(S)

3.例子:X(S)=7

  X=1*3!+0*2!+1*1!+0*0!

  所以$a$={1、0、1、0},那么$s_4=2$,$s_3=1$,$s_2=4$,$s_1=3$。

  反解成功。

原文地址:https://www.cnblogs.com/Troywar/p/8523619.html