康托展开
康托展开可以用来求一个
什么是排列的排名?
把
时间复杂度?
康托展开可以在
怎么实现?
因为排列是按字典序排名的,因此越靠前的数字优先级越高。也就是说如果两个排列的某一位之前的数字都相同,那么如果这一位如果不相同,就按这一位排序。
比如
举个栗子
我们知道长为
按照这样统计下去,答案就是
注意到我们每次要用到 当前有多少个小于它的数还没有出现,这里用树状数组统计比它小的数出现过的次数就可以了。
逆康托展开
因为排列的排名和排列是一一对应的,所以康托展开满足双射关系,是可逆的。可以通过类似上面的过程倒推回来。
如果我们知道一个排列的排名,就可以推出这个排列。因为
引用上面展开的例子
首先让
此时让排名减去
让
实际上我们得到了形如 有两个数小于它 这一结论,就知道它是当前第
本页面最近更新:2021/8/6 23:58:35,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:Enter-tainer, Great-designer, hjsjhn, Ir1d, MegaOwIer, wjy-yy
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用