百度百科就够了

自己的体会:
康托展开是基于比他小的前面的个数来进行计算的
       另外康托展开也是一个数组到一个数的映射,因此也是可用于hash,用于空间压缩。比如在保存一个序列,我们可能需要开一个数组,如果能够把它映射成一个自然数, 则只需要保存一个整数,大大压缩空间。比如八数码问题。

欧拉项目上的第二四题就需要用逆康拓展开的,不过这道题不是说的自然数,包括0,所以构建数组的时候把0搞进去就好了
(欧拉项目上记得不赞成贴code的,

#include <bits/stdc++.h>
using namespace std;
static const int fac[]={1,1,2,6,24,120,720,5040,40320,362880};//阶乘
int cantor(int *a,int n){   //康托展开int x=0;for(int i=0;i<n;++i){int smaller=0;   //当前位置之后小于它的个数for(int j=i+1;j<n;++j){if(a[j]<a[i])++smaller;}x+=fac[n-i-1]*smaller;}return x;
}
void decantor(int x,int n){std::vector<int> v;std::vector<int> a;for(int i=0;i<n;++i) v.push_back(i);//这儿根据要求被排列的数字进行选择有那几个,不过要注意一下在0作为前导的时候for(int i=1;i<=n;++i)  v.push_back(i);for(int i=n;i;--i){int r = x % fac[i-1];int t= x / fac[i-1];x=r;sort(v.begin(),v.end()); //从小到大排序 a.push_back(v[t]);         //剩余数里第t+1个数为当前位v.erase(v.begin()+t);     // 移除选做当前位的数}int sz=a.size();for(int i=0;i<sz;++i)cout<<a[i];cout<<endl;
}
int main(){cantor();decantor(1000000-1,10);
}

【康拓展开逆康托展开】相关推荐

  1. 康托展开与逆康托展开详解

    文章目录 康拓展开 运用 板子 逆康托展开 板子 康拓展开 康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩. 康托展开的实质是计算当前排列在所有由小到大全排列中的名次,因此是可逆 ...

  2. 数论--康托展开与逆康托展开模板

    ACM常用模板合集 #include<bits/stdc++.h>using namespace std; const int MAX = 13; int Fac[MAX],N; //求出 ...

  3. 数学--数论--康托展开与逆康托展开

    康托展开 可以理解为把一个全排列映射到一个数上面,因为全排列如果按照从小到大或者从大到小,肯定是有一个确定的序列的. 一般是从小到大的序列个数.我们就是要求出这个序列的位置.,想法很简答,就是求出前面 ...

  4. UVA11525 Permutation 逆康托展开

    传送门 文章目录 题意: 思路: 题意: 思路: 逆康托展开板子 // Problem: UVA11525 Permutation // Contest: Luogu // URL: https:// ...

  5. 基本算法——康托展开与逆康托展开

    含义 康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩. 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的. 原理 X = s1(n-1)! + s2(n-2 ...

  6. 详解康托展开与逆康托展开

    康托展开 rank=an(n−1)!+an−1(n−2)!+⋯+a10! 再举个例子说明. 在(1,2,3,4,5)5个数的排列组合中,计算 34152的康托展开值. 首位是3,则小于3的数有两个,为 ...

  7. 关于康托展开和逆康托展开详解,及python代码

    在LeetCode上有这样一道题: 60. 第k个排列 给出集合 [1,2,3,-,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: ...

  8. 康托展开和逆康托展开

    简述 康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩.设有n个数(1,2,3,4,-,n),可以有组成不同(n!种)的排列组合,康托展开表示的就是是当前排列组合在n个不同元素 ...

  9. java实现排程算法_康托展开算法和逆康托展开算法[Java实现]

    基于这篇介绍我实现了基于Java的算法 都能看懂的康托展开_ltrbless的博客-CSDN博客​blog.csdn.net 条件 一个数组:[1, 2, 3, 4, 5] 康托展开算法 找出 524 ...

最新文章

  1. linux中的网络配置
  2. java 多项式拟合最多的项数_牛顿插值法、曲线拟合、多项式拟合
  3. 酷狗音乐在线试听下载
  4. C语言中, 有些时候数值名并不与指针等价.
  5. [转]Angular2 使用管道Pipe以及自定义管道格式数据
  6. libcap-ng库旨在使具有posix功能的编程比传统的libcap库容易得多
  7. mysql group_concat null_MySQL教程之concat以及group_concat的用法
  8. PyTorch 入坑九:权重初始化
  9. 移除单元格选中时的高亮显示状态
  10. 关于机器学习一些好的博客和资料
  11. SwiftUI iOS 精品开源之 具有货币转换功能的iOS计算器 网络后端汇率API (教程含源码)
  12. 【力扣 912】十大排序算法
  13. centos host在哪 local_centos怎么查看hostid
  14. Go语言之工具Go Playground
  15. 手机就能申请摇号 杭州市小客车摇号功能全新上线
  16. Typescript助力项目开发:JS切换TS、TS类型定制与思考
  17. python数据清洗--对双十一淘宝直播流量数据进行数据真实性验证
  18. 人工智能于交通系统而言
  19. 【c++ primer】第五版第十四章习题答案
  20. Android 应用程序开发

热门文章

  1. 高通QSD MSM APQ区别
  2. Wince 隐藏TASKBAR的方法
  3. WINCE6.0 中文支持
  4. 读书笔记--《机器人时代》
  5. 华为配置(S3100)
  6. 【数据平台】Python解析Ngnix日志
  7. 【Python学习系列十七】基于scikit-learn库逻辑回归训练模型(delta比赛代码2)
  8. Java实现算法导论中凸包问题Jarvis步进法
  9. 字符串之数字子串求和
  10. 在Visual Studio中调试samples中可能出现的错误