「初赛」康托展开学习笔记
十月 17, 2019
938
简介
康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。
——Wikipedia
公式
直接给式子吧
对于一个长度为 的排列,它在全排列中的排名为
MATHJAX-SSR-613
其中为给定排列前 个数中 小于 的 没有出现的 数的数量
例子:
1 |
|
另外,就是有多少个排列比给定排列要小。这个很显然。
逆康托展开
前面说了是可逆的,那么说一说怎么逆回去。
1 |
|
用途
写这玩意有什么用?打开NOIP2018提高组初赛第21题看程序写输出,他要求的就是给定排列往后数t个得到的排列
使用这个方法就可以将给定排列转化为排名,加t之后再转化回排列,进而得到结果
- 本文作者:Handwer STD
- 本文链接:https://blog.handwer-std.top/2019-10-17/Cantor-Expansion/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!