1.1 二維整點P的坐標映射
如何將二維整點P的坐標映射為一個整數(shù)虚汛,為一個整數(shù),使得整點P可以由該整數(shù)唯一地代表皇帮。假設(shè)一個整點P的坐標(x卷哩,y),其中0≤x属拾,y≤Range
将谊,那么可以令hash函數(shù)為H(P) = x * Range + y
冷溶。
1.2字符串hash
指將一個字符串S映射為一個整數(shù)。假設(shè)字符串均由大寫字母AZ構(gòu)成尊浓,對應(yīng)026逞频,接下來就按照將二十六進制轉(zhuǎn)換為十進制的思路,(轉(zhuǎn)換成的整數(shù)最大是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'); 二十六進制轉(zhuǎn)換為十進制
}
return id;
}
使用時注意len不能太長栋齿,否則轉(zhuǎn)換出的整數(shù)也會很大苗胀。如果字符串中出現(xiàn)了小寫字母,那么可以把AZ作為025瓦堵,而把az作為2651基协,這樣就變成了一個五十二進制轉(zhuǎn)換為十進制的問題,相似:
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;
}