这又是放收藏里面的坑
具体解释,建议看百度百科,挺详细的----康托展开
再,个人理解:
就是分成展开值和展开逆运算:
展开值X是再给1~n个数的随机组合中,第X大的数,即再这个数前面还有X-1个数。
运算
数组:1 2 3 4 5
组合: 3 4 1 5 2
展开值:2 * 4 !+2 * 3!+0* 2!+1*1!+0 * 0!=61
该组合就排在第62位
其中,阶层第一个是(总个数-1)的阶层然后递减
然后乘号前面那个数:是该数对应位置那个数,在组合里面,在这个数后面比他小的数的个数
eg: 3后面比他小的是1,2;4后面小也是1,2…
换成公式就是这样。
再写一个展开逆运算:
n=5,x=96,求他的组合:
那么第一个数就是(96-1)/ 4!,得3余23,那么就代表在第一个数后面又3个比他小的数,所以第一个数是4,再用余数计算
第二个数:23 / 3! 得到3余5,说明有3个数比第2位小,可以是4,但是4已出现过,因此是5.
第三个数:用5 / 2!,得到2余1,这一位是3.
第四位数:用1 / 1!,得到1余0,这一位是2.
最后一位只能是1.
所以这个数是45321
(其实这里有个小小的疑问,那这个数可不可以是8 9 7 6 5,毕竟按照定义和他本身的值没有关系,只和个数位数有关,再不重复)
具体应用:(忘记再哪里了,找到了再补上来)