全排列的编码与解码
2015-05-08 14:05
190 查看
#include<cstdio> const int fac[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320};///阶乘 int KT(int s[], int n) { int i, j, cnt, sum; sum = 0; for (i = 0; i < n; ++i) { cnt = 0; for (j = i + 1; j < n; ++j) if (s[j] < s[i]) ++cnt; sum += cnt * fac[n - i - 1]; } return sum; } int main() { int a[] = {3, 5, 7, 4, 1, 2, 9, 6, 8}; printf("%d\n", 1 + KT(a, sizeof(a) / sizeof(*a))); ///1+98884 }
#include<cstdio> #include<cstring> const int fac[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320};///阶乘 bool vis[10]; ///n为ans大小,k为全排列的编码 void invKT(int ans[], int n, int k) { int i, j, t; memset(vis, 0, sizeof(vis)); --k; for (i = 0; i < n; ++i) { t = k / fac[n - i - 1]; for (j = 1; j <= n; j++) if (!vis[j]) { if (t == 0) break; --t; } ans[i] = j, vis[j] = true; k %= fac[n - i - 1];///余数 } } int main() { int a[10]; invKT(a, 5, 16); for (int i = 0; i < 5; ++i) printf("%d ", a[i]);///1 4 3 5 2 }
地址:http://www.2cto.com/kf/201311/260148.html
相关文章推荐
- 全排列的编码与解码(康拓展开)
- 全排列的编码与解码
- 康拓排列--全排列的解码与编码
- 全排列的编码与解码——康托展开 (附完整代码)
- 康托展开-全排列的编码与解码
- 全排列的编码与解码——【康托展开及其逆运算】
- 全排列的编码与解码——康托展开 (附完整代码)
- 全排列的编码与解码——康托展开
- 全排列的编码与解码——康托展开及其逆展开
- 全排列的编码与解码——康托展开 (附完整代码)
- 解:对url网址编码后解码 20140720 ①文本处理
- speex的基本编码和解码流程
- Base64解码,编码
- 音频编码和解码原理
- 对字符串进行编码解码
- java.net.URLEncode编码 与 URLDecode解码问题
- Javascript与C#编码解码
- 如果想在JM86解码端直接拿测试序列进行误码掩盖(不经过编码和解码这个动作),
- JS编码,解码. asp.net(C#)对应解码,编码
- perl处理base64编码解码问题