博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全排列与 康托展开
阅读量:4689 次
发布时间:2019-06-09

本文共 779 字,大约阅读时间需要 2 分钟。

对于没有重复元素的全排列来说,存在如下的对应关系

X=an(n-1)!+an-1(n-2)!+...+ai(i-1)!+...+a21!+a1*0!

ai为整数,并且0<=ai<i(1<=i<=n)

这种对应称为康托展开,是一种全排列与整数的双射,n位(0~n-1)全排列后,其康托展开唯一且最大约为n!

可用于压缩状态,可作为Hash函数。

康托展开:

int contor(int num[]){    int k=1;    for(int i=1;i<=n;i++){        int t=0;        for(int j=i+1;j<=n;j++){            if(num[i]>num[j]){                t++;            }                    }k+=t*fac[n-i];    }    return k;}

康拓逆展开:

void recontor(int num[],int k){    int t=0;k--;    bool f[12]={0};    for(int i=1;i<=n;i++){        t=k/fac[n-i];        int j;        for( j=1;j<=n;j++){            if(!f[j]){                if(t<=0) break;                t--;            }        }        num[i]=j;        f[j]=1;        k%=fac[n-i];    }}

转载于:https://www.cnblogs.com/Mr-WolframsMgcBox/p/7868301.html

你可能感兴趣的文章
python--注释
查看>>
SQL case when else
查看>>
MVc Identity登陆锁定
查看>>
cdn连接失败是什么意思_关于CDN的原理、术语和应用场景那些事
查看>>
ultraedit26 运行的是试用模式_免费试用U盘数据恢复工具 – 轻松找回U盘丢失的各种数据!...
查看>>
python sum函数导入list_python sum函数iterable参数为二维list,start参数为“[]”该如何理解...
查看>>
android 练习之路 (八)
查看>>
tp5 中 model 的聚合查询
查看>>
android wear开发之:增加可穿戴设备功能到通知中 - Adding Wearable Features to Notifications...
查看>>
压缩文件函数库(转载)
查看>>
【转】ubuntu12.04没有/var/log/messages解决
查看>>
Oracle EBS 初始化用户密码
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
17_重入锁ReentrantLock
查看>>
我的第一篇博客
查看>>
大数据学习线路整理
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>