【发布时间】:2011-01-14 16:38:02
【问题描述】:
我有许多具有键值模式的数据集 - 即字符串键和指向数据的指针。现在它存储在哈希表中,每个表都有对应于哈希键的槽数组,并且在发生冲突时在每个有冲突的槽下形成一个链表(直接链接)。如果重要的话,所有都在 C 中实现(并且应该保留在 C 中)。
现在,数据实际上是 3 种略有不同的数据集:
- 可以随意更改某些集合(添加、删除、替换等)
- 对于某些集合,可以添加数据,但几乎从不替换/删除(即可能发生,但在实践中非常罕见)
- 对于某些集合,数据只添加一次,然后仅查找,一旦加载整个集合,它就永远不会更改。
当然,所有集合都必须尽可能快地支持查找,并且消耗最少的内存(尽管查找速度比大小更重要)。
所以问题是 - 是否有更好的哈希表结构/实现更适合特定情况?我怀疑对于第一种情况,链接是最好的,但不确定其他两种情况。
【问题讨论】:
-
你事先知道套路吗?集合是有限的吗?多大?
-
C 语言中肯定有许多免费的哈希表实现。我建议使用其中之一,因为它们可能比您的代码更好。
-
@Moron:这些集合不是事先知道的,它们中的大多数都非常小(几十个元素),但有些可能很大,尤其是。静态的 - 多达数千甚至更多。
-
@Georg:我已经有了通用案例的链式哈希实现,而且效果很好。我正在寻找的是一个哈希实现的建议,它在特殊情况下会有更好的特性(比如加载后永远不会改变的静态数据)。
-
@Stasm:你有什么样的钥匙?整数?字符串?任何定义明确的结构?
标签: c algorithm hash hashtable lookup