排列,康托展开,变进制数,火星人/水星人

一个排列可以双映一个数字即可以看做当前排列的的标号,n=3

123-------1     132--------2    213-----------3    231--------4 ......

把一个排列数转化为这个标号比较简单:

 

其中, 为整数,并且 表示原数的第i位在当前未出现的元素中是排在第几个。在n比较大的时候,这个数就算不出来了。这个时候我们便储存所有的a值,而a这个数也叫作变进制数。经过观察可以发现第一位是一进制第二位是二进制......知道这个变进制数也可以求出这个排列,原理类似。

显然,转变一次的时间复杂度是\(On)\)的。

 

posted @ 2021-07-11 21:36  lei_yu  阅读(44)  评论(0编辑  收藏  举报