现学两种
(1) bkdrhash
int fac[10]={1,1,2,6,24,120,720,5040,40320,362880};
int calc(char s[9])
{
int i,j,c=0,res=0;
for (i=8; i>=0; i--)
{
c=0;
for (j=0;j<i; j++)
if (s[j]<s[i]) c++;
res=res+c*fac[i];
}
return res;
}
(2)全排列hash
int bkdrhash(char str[])
{
long long hash=0;
int j=0;
while (j<strlen(str))
{
hash=hash*131+str[j];
hash=(hash & 0x07FFFFFF) ;
j++;
}
return hash%maxm;
}