1.1 二维整点P的坐标映射
如何将二维整点P的坐标映射为一个整数,为一个整数,使得整点P可以由该整数唯一地代表。假设一个整点P的坐标(x,y),其中0≤x,y≤Range
,那么可以令hash函数为H(P) = x * Range + y
。
1.2字符串hash
指将一个字符串S映射为一个整数。假设字符串均由大写字母AZ构成,对应026,接下来就按照将二十六进制转换为十进制的思路,(转换成的整数最大是26^len-1)代码如下:
int hashFunc(char S[], int len)
{
int id = 0;
for (int i=0; i<len; i++)
{
id = id*26 + (S[i] - 'A'); 二十六进制转换为十进制
}
return id;
}
使用时注意len不能太长,否则转换出的整数也会很大。如果字符串中出现了小写字母,那么可以把AZ作为025,而把az作为2651,这样就变成了一个五十二进制转换为十进制的问题,相似:
int hashFunc(char S[], int len)
{
int id = 0;
for (int i=0; i<len; i++)
{
if (S[i] >= 'A' && S[i] <= 'Z')
id = id * 52 + (S[i] - 'A');
else if(S[i] >= 'a' &&S[i] <= 'z')
id = id * 52 + (S[i] - 'a') + 26;
}
return id;
}