/*全排列哈希
这里要介绍一种变进制数,用来表示字符串的排列状态
这种数的第i位逢i进一,第i位的位权是i!
用d[i]来表示一个变进制数第i位上的数字
一个n位变进制数的值就为∑[i:0~n-1] (d[i]×i!)
*/
int permutation_hash(string s, int n) //求长度为n的字符串某种排列的哈希值
{
//n不能太大,通常不超过12,否则会溢出
int ans = 0;
for(int i = 0; i < n; i ++)
{
int d = 0;
for(int j = 0; j < i; j ++)
if(s[j] > s[i]) d ++; //求s[i]与其前面的字符组成的逆序对个数
ans += d * fact[i];
}
return ans;
}
全排列Hash函数
最新推荐文章于 2022-10-03 22:05:43 发布