前缀哈希函数的作用是什么?我已经创建了链,二次和线性哈希表。我给出了简单,前缀和全长哈希方法,我不确定它们是用来做什么的?
代码如下:
int HashTable_qp::preHash(string & key, int tableSize )
{
string pad = "AA";
//some words in the input are less than 3 letters
//I choose to pad the string with A because all padded characters
//have same ascii val, which is low, and will hopefully alter the results less
if (key.length() < 3)
{
key.append(pad);
}
return ( key[0] + 27 * key[1] + 729 * key[2] ) % tableSize;
}
碰撞检测:
while(i != DataArray.size())
{
tStart = clock();
if(QuadraticProbingHT.preHash(DataArray[i],101) == QuadraticProbingHT.preHash(DataArray[i],101) )
{
collision_count++;
}
tStop = clock();
total_c += tStop - tStart;
i++;
}
前缀哈希按字符串的前几个字符(前缀)对字符串进行哈希。
请注意,在你给出的实现中,它使用前三个字符对字符串进行散列(如果存在;如有必要,它将填充AA
)。因此,ass
和associate
在这个特定的前缀哈希下具有相同的哈希值。
全长散列使用字符串中的每个字符来确定散列值。