康拓展开

介绍

康拓展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩,康拓展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。

定义

X=a_n(n-1)!+a_{n-1}(n-2)!+a_{n-2}(n-3)!+···+a_2(1)!+a_1(0!)

其中 a[i]为整数,并且0<=a[i]<i,代表元素arr[i]在还未出现的数字中排第几,简而言之,就是后面与多少个数小于arr[i]

康拓展开是可逆的,若求排列中第x个数的排列,则先将x-1,之后按照公式依次除以(n-i)!

Author: universal42
Link: https://universal4s.github.io/2019/02/14/cantor-expansion/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.