C中的rehashing功能

时间:2016-01-10 07:13:36

标签: c hashtable hash-function

我正在做哈希表并实现了以下哈希函数

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函数来防止这些冲突,我在谷歌上看到但是对我来说实例很复杂,任何人都可以给我一个想法。

提前致谢

1 个答案:

答案 0 :(得分:2)

哈希是一个非常有趣的话题。我建议你阅读Cormen。它解释清楚。

我会给你一个简单方法的想法 -

  

这里只需要一个计数器,然后插入一个元素   增加它。现在,如果表格的75%被填满,那么你只需加倍   数组的大小。分配两次数组。现在你再一次   使用新的表格大小重新散列所有内容。这就是你如何做到的。

为避免碰撞,您可以使用更好的哈希函数。

  

另外一件事,如果你发生碰撞,只需转移到下一个未填充的地方   一。在最坏的情况下,如果<75%被填满,您将得到一个空槽。尝试   这个。它不是那么好但它有效。