我正在做哈希表并实现了以下哈希函数
int linesn=8;
int hash(char *str, int table_size)
{
int sum;
// Make sure a valid string passed in
if (str==NULL) return -1;
// Sum up all the characters in the string
for( ; *str; str++) sum += *str;
// Return the sum mod the table size
return sum % table_size;
}
char *str="Carlos";
int hashv=hash(str,linesn);
printf("\nThe hash value is: %d",hashv);
由于存在任何哈希函数冲突,如何实现一个rehashing函数来防止这些冲突,我在谷歌上看到但是对我来说实例很复杂,任何人都可以给我一个想法。
提前致谢
答案 0 :(得分:2)
哈希是一个非常有趣的话题。我建议你阅读Cormen。它解释清楚。
我会给你一个简单方法的想法 -
这里只需要一个计数器,然后插入一个元素 增加它。现在,如果表格的75%被填满,那么你只需加倍 数组的大小。分配两次数组。现在你再一次 使用新的表格大小重新散列所有内容。这就是你如何做到的。
为避免碰撞,您可以使用更好的哈希函数。
另外一件事,如果你发生碰撞,只需转移到下一个未填充的地方 一。在最坏的情况下,如果<75%被填满,您将得到一个空槽。尝试 这个。它不是那么好但它有效。