排列,康托展开,变进制数,火星人/水星人
一个排列可以双映一个数字即可以看做当前排列的的标号,n=3时
123-------1 132--------2 213-----------3 231--------4 ......
把一个排列数转化为这个标号比较简单:
其中, 为整数,并且 。表示原数的第i位在当前未出现的元素中是排在第几个。在n比较大的时候,这个数就算不出来了。这个时候我们便储存所有的a值,而a这个数也叫作变进制数。经过观察可以发现第一位是一进制第二位是二进制......知道这个变进制数也可以求出这个排列,原理类似。
显然,转变一次的时间复杂度是\(O(n)\)的。
本文来自博客园,作者:lei_yu,转载请注明原文链接:https://www.cnblogs.com/lytql/p/14999764.html