【问题标题】:rehashing function in CC中的重新散列函数
【发布时间】:2016-04-14 16:03:09
【问题描述】:

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

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);

由于存在任何哈希函数冲突,如何实现重新哈希函数来防止这些冲突,我在 Google 上阅读,但示例对我来说很复杂,任何人都可以给我一个想法。

提前致谢

【问题讨论】:

  • 你可能有一个稍微好一点的哈希函数;见this

标签: c hashtable hash-function


【解决方案1】:

哈希是一个非常有趣的话题。我建议你读科门。解释清楚了。

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

这里只取一个计数器,每当插入一个元素时 增加它。现在,如果 75% 的桌子都被填满了,那么你只需翻倍 数组的大小。分配两次数组。现在你又来了 使用新的表大小重新散列所有内容。你就是这样做的。

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

如果你有碰撞的另一件事只是移动到下一个未填充的 一。由于在最坏的情况下填充了

【讨论】:

  • @RestlessC0bra.:是的,提到的这种方法会产生更好的结果。这是方法之一。否则,简单地增加插槽不会取得任何成果。在一些研究论文或其他东西中可能会讨论一些修改过的方法,但是我会说分析的基本思想是相似的。(如果你发现的话)。
猜你喜欢
  • 2020-08-27
  • 2014-04-27
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多