全排列散列,康拓展开

原创 2016年08月29日 16:32:46

康拓展开类似一个哈希函数,把每一个排列编码成唯一的整数
逆展开就是把这个整数还原为原来的那个排列。

一般搜索的时候,用来标记,比如八数码

/*
O(n*n)
全排列散列,康拓展开,康拓逆展开
n数据范围,a[] 排列数组,下标0开始
ans:排名,0开始
*/
int contor(int a[]){
    int ans = 0, n = 3;
    for(int i=0;i<n;i++){
        int tp = 0;
        for(int j=i+1;j<n;j++)if(a[j]<a[i])tp++;
        ans+=tp*fac[n-1-i];
    }
    return ans;
}
void uncontor(int x,int a[]){
    bool used[10]={0};
    int i,j,tp,n=3;
    for(i=0;i<n;i++){
        tp = x / fac[n-i-1];
        for(j=0;j<n;j++)if(!used[j]){
            if(tp--==0)break;
        }
        a[i] = j+1;
        used[j] = 1;
        x %= fac[n-1-i];
    }
}


//--end--
版权声明:一个菜逼的笔记,并没有什么题解。。。

相关文章推荐

全排列散列 - (康托展开 和 逆康托展开)

首先明确我们要求的是什么样的题目。 例如,给定数组a[10] = {1,2,3,4,5,6,7,8,9,10}; 我们把排列{1,2,3,4,5,6,7,8,9,10}规定为0 我们把排列{1,2,3...

康拓展开及其逆运算和全排列函数

有所摘抄,但重要的是自己的想法。   康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。     ...
  • yo_bc
  • yo_bc
  • 2017年01月14日 16:57
  • 558

Javascript数据结构算法之散列(霍纳算法,开链法,线性探测-寻址法)

使用散列存储数据时,通过一个散列函数将键映射为一个数字,这个数字的范围时0到散列表的长度。理想情况下,散列函数会将每个键值映射为唯一的数组索引。一个更现实的目标是将键均匀分布。 在散列上插入...

7.3.1.Open_Hashing 开散列 分离链

貌似有两天没碰D&A了,USACO也扔一边了 前两天我WM的机子模拟android成功,好一阵兴奋,玩了一两天。 超级终端那里,linux上面常用命令大部分可以用,还带颜色。 3D加速太低,导致tak...
  • artwalk
  • artwalk
  • 2011年08月04日 23:56
  • 1102

开散列

#include #include #include #include #include using namespace std; /******************...
  • Decload
  • Decload
  • 2012年02月01日 23:54
  • 830

散列表(三):冲突处理的方法之开地址法(线性探测再散列的实现)

一、开地址法 基本思想:当关键码key的哈希地址H0 = hash(key)出现冲突时,以H0为基础,产生另一个哈希地址H1 ,如果H1仍然冲突,再以H0 为基础,产生另一个哈希地址H2 ,…,直到找...

散列表(四):冲突处理的方法之开地址法(二次探测再散列的实现)

前面的文章分析了开地址法的其中一种:线性探测再散列,这篇文章来讲开地址法的第二种:二次探测再散列 (二)、二次探测再散列 为改善“堆积”问题,减少为完成搜索所需的平均探查次数,可使用二次探测法。 ...

哈希表---开散列实现

#pragma once #ifndef _HASHTABLE_H_ #define _HASHTABLE_H_ #include #define defaultSize 100 struct S...
  • terry_v
  • terry_v
  • 2011年09月13日 23:41
  • 309

数据结构之哈希表二(用开散列法实现哈希表)

前面我们讲了哈希冲突的闭散列(开放定址法)的两种方法,现在我们来介绍另一种方法:开散列法。 通常,每个桶中的同义词子表都很短,设有n个关键码通过某一个散列函数,存放到散列表中的m个桶...

STL全排列函数 next_permutation prev_permutation 及拓展

stl算法实现
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:全排列散列,康拓展开
举报原因:
原因补充:

(最多只允许输入30个字)