康托展开

公式:X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! ,其中a[i]为当前未出现的元素中(即后面的所有元素中)是排在第几个(从0开始)。这就是康托展开。

代码:

//康拓展开
//给定一个字符串,按照字典序排序,算出这个字符串在哪个位置,注意此处排列从0开始ll fac[21]; //到20的阶乘表,一般开longlongll cantor(char str[])
{int len=strlen(str);ll ans=0;for(int i=0;i<len;i++){ll tmp=0;for(int j=i+1;j<len;j++){if(str[j]<str[i])tmp++;}ans+=tmp*fac[len-i-1];}return ans;
}

逆康拓展开:

//逆康拓展开
//给定n个元素的全排列,求第m大的全排列数是多少
//这里假设全排列还是从0开始排序int ans[20];  //保存结果
ll fac[20];  //到20的阶乘表void reverse_cantor(int n,int m)
{m--;  //因为康拓展卡是从0开始,而实际问题是从1开始,所以要--,若实际也从0开始,则不用减int vis[20]={0};  //保存某个数被访问没for(int i=n-1;i>=0;i--){int tmp=m/fac[i];int k=m%fac[i];int cnt=0,j;for(j=1;j<=n;j++){if(vis[j]==0)cnt++;if(cnt==tmp+1)   //第tmp+1小的数即为当前位break;}ans[i]=j;m=k;vis[j]=1;}
}

康拓展开和逆康拓展开相关推荐

  1. 康拓展开与逆康拓展开

    康托展开与逆康托展开   康托展开据我所理解,应该便是给你一个已知的排列,然后这个排列在全排列中是第几小或者第几大的,一般都是按字典序计算,即为第几小的.康托展开的公式为:X=a[n]*(n-1)!+ ...

  2. 康托展开和逆康托展开

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

  3. 康拓展开即逆康拓展开(简单易懂版)

    康拓展开 当我们去搜康托展开这个关键字的时候,映入眼帘的是下面的一大堆公式: 其中X为康拓展开值 为整数,且 且表示袁数在当前未出现的元素是排第几个. 很不错,这样一下子会把人弄得搞陀不清(湖南方言) ...

  4. 康托展开与逆康托展开(bzoj 3301: [USACO2011 Feb] Cow Line)

    康拓展开: 已知序列a1, a2, a3, -, an是1~n的一个排列,求这是1~n全排列中,第几小的排列? ans = ,其中F(i)表示后面n-i个数中比当前小的数的个数 例如 n = 5,序列 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 利用nofllow与内页链接做好SEO
  2. Atitit apache 和guava的反射工具
  3. 《OKR源于英特尔和谷歌的目标管理利器》读书笔记
  4. NHibernate教程2(转载)
  5. MSP430程序跑飞原因
  6. .NET 开源免费图表组件库,Winform,WPF 通用
  7. STTN、DSTT、FuseFormer总结(它们改进了什么?)
  8. TensorFlow 学习指南 二、线性模型
  9. 基于原生js的图片延迟加载
  10. Oracle脚本(三)
  11. java 各种数据结构,几种常见的数据结构的JAVA实现
  12. 计算机网络毕业论文格式模板范文,计算机网络论文范文 计算机网络方面有关毕业论文的格式范文2万字...
  13. 微信小程序连续签到获得积分
  14. Android WebView实现长截图
  15. Git命令提交项目代码
  16. Linux:获取线程的PID(TID、LWP)的几种方式
  17. Python爬虫笔记————抓取 猫眼电影排行榜Top100
  18. Matlab常用函数集锦
  19. 靠谱的HEVC方案-软编解码器
  20. MySQL主外键表关联表数据的同时删除

热门文章

  1. 从左到右的流水灯单片机课程设计实验报告c语言版,流水灯_单片机课程设计-实验-LED流水灯.doc...
  2. AI算法工程师岗位职责解析
  3. 港科夜闻|香港科大学生获颁第一届香港-法国社区创新奖项
  4. 国产手机干不过苹果,无奈大举降价抛货,降价超千元的比比皆是
  5. js大小转换,字节转换成K、M、G、T 单位
  6. vue的[__ob__: Observer]
  7. JOS Lab3 User Environment Part B
  8. python pygame小游戏_python:利用pygame实现消消乐小游戏
  9. [DASCTF-Sept-X] 双目失明,身残志坚
  10. ArcMap在地图上绘画点要素以及画线要素详细步骤