您的位置:首页 > 其它

全排列的哈希函数,康拓展开

2015-01-31 14:13 330 查看

这里的哈希函数是用能对许多全排列问题适用的方法。

取n!为基数,在第n位的逆序数为哈希值第n位数。

        例:9位数排列1 2 3 4 5 6 7 8 9 的哈希值是0 最小,8 7 6 5 4 3 2 1 0 的哈希值是(9!-1)最大,而其他值都在0 到(9!-1)中,且均唯一。

9位全排列 不一定非要是1~9,或者0~8,也可以是不连续的  只要其逆序关系一定 这样哈希出来的值都是一样的 例如 9位排列:765432108 和 876543219的哈希的值全是40319

例如三个元素的排列

排列    逆序  Hash 

123    000    0

132    001    2

213    010    1

231    002    4

312    011    3

321    012    5

应用 : poj 1077 八数码 问题

9位全排列的hash函数:

int h[10] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};//从 0! 到 8!

int cantor(string s)//以字符串的形式传入 也可以改为数组等

{

   int sum=0;

   for(int i=0;i<9;i++){

       int num=0;

        for(int j=0;j<i;j++)

            if(s[j]>s[i])

               num++;

        sum+=(num*h[i]);

    }

    return sum;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: