【问题标题】:Growing a dynamic hash table [closed]增长动态哈希表[关闭]
【发布时间】:2016-01-02 04:04:39
【问题描述】:

我正在用 C 语言编写一个使用哈希表作为字典的程序。当负载因子达到 75% 时,将创建一个大小为旧大小两倍的新表,并从内存中释放旧的哈希表。

问题是用户的主程序只能访问几个功能:

  • create_dictionary() – 返回一个指向字典的指针
  • close_dictionary(dictionary)
  • add_word(dictionary, word)

所以用户创建了一个字典,添加了很多单词,最终字典需要增长。辅助函数在后台自动调用。现在的问题是用户不知道旧字典已被替换,并且指向旧字典的指针不再正确。

解决此问题的最佳方法是什么?我可以以某种方式增长哈希表吗?现在我分配新空间,将旧词重新散列到其中,然后删除旧的哈希表

【问题讨论】:

  • 什么是dictionary?如果它是指向后备数组的指针,则您的封装可能太弱了。它应该是指向一些struct 的指针,即使您需要重新分配也不会改变。否则,该函数将不得不return 新指针。 (顺便说一句,如果您的界面还具有在字典中查找内容的功能,您的界面会更有用……)
  • 您不是第一个在 C 中实现哈希表的人。看看简单的现有实现(例如来自Gnulib 的实现:hash.hhash.c)。如果您对您的实施有特定的问题,我们需要查看您的代码。

标签: c hashmap hashtable


【解决方案1】:

一种可能性是让您的指针指向一个支持结构。在该结构中,您放置哈希表的大小、它包含的元素数量以及指向该表的指针。当您检测到超过 75% 时,您分配一个更大的表,将旧值散列到新表中,然后释放旧表并使结构中的指针指向新表

【讨论】:

    猜你喜欢
    • 2011-08-17
    • 1970-01-01
    • 2020-10-07
    • 2021-09-20
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多