康托展开与全排列
来源:互联网 发布:mac cocos 环境搭建 编辑:程序博客网 时间:2024/05/29 02:10
转自https://www.cnblogs.com/stepping/p/7349082.html
康托展开:已知一个排列,求这个排列在全排列中是第几个
康托展开逆运算:已知在全排列中排第几,求这个排列
其中f[] = { 1,1,2,6,24,120,720,5040,40320,362880 };
//康托展开 LL Work(char str[]) { int len = strlen(str); LL ans = 0; for(int i=0; i<len; i++) { int tmp = 0; for(int j=i+1; j<len; j++) if(str[j] < str[i]) tmp++; ans += tmp * f[len-i-1]; //f[]为阶乘 } return ans; //返回该字符串是全排列中第几大,从1开始 }
//康托展开逆运算 辗转相除法void Work(LL n,LL m) { n--; //因为a中元素下标是从0开始,所以第n个应该是编号n-1 vector<int> v; vector<int> a; for(int i=1;i<=m;i++) v.push_back(i); for(int i=m;i>=1;i--) { LL r = n % f[i-1]; LL t = n / f[i-1]; n = r; sort(v.begin(),v.end()); a.push_back(v[t]); v.erase(v.begin()+t); } vector<int>::iterator it; for(it = a.begin();it != a.end();it++) cout<<*it; cout<<endl; }
阅读全文
0 0
- 全排列与 康托展开
- 康托展开与全排列
- 康托展开 全排列
- 全排列计算(康托展开)
- HDU 1043 全排列 康托展开
- 全排列的编码与解码——康托展开及其逆展开
- 康托展开(用于全排列与整数的转换)
- 康托展开(用于全排列与整数的转换)
- 全排列的编码与解码——康托展开 (附完整代码)
- 全排列的编码与解码——康托展开 (附完整代码)
- 全排列的编码与解码——康托展开 (附完整代码)
- 全排列字典序与序号的一一对应关系 康托展开 perm2num num2 perm
- 全排列的编码与解码——【康托展开及其逆运算】
- 全排列的编码与解码——康托展开
- vijos - P1092全排列 (康托展开 + 康托展开的逆运算)
- 康托展开(基于全排列的某一种hash)
- 关于全排列问题的总结(康托展开)
- 全排列方法二(康托展开)
- mysql的外键约束
- 结构体数组
- 【Scikit-Learn 中文文档】特征选择
- ubuntu作为开发机准备
- 小小数据统计(柱状图、折线图、扇形图)
- 康托展开与全排列
- Python:大小写转换:normalize,求乘积:prod,字符串转float:str2float
- 大话设计模式读书笔记之备忘录模式
- coursera视频
- Qt通过域名获取ip
- iOS:基于Photos框架的图片选择器以及创建自定义相册
- linux命令
- Linux运维人员最常用 150 个命令汇总
- 合理使用缓存减少对服务器的访问之Cache-Control