C 的哈希表实现
Posted
技术标签:
【中文标题】C 的哈希表实现【英文标题】:Hashtable implementation for C 【发布时间】:2011-01-30 18:07:38 【问题描述】:什么是 C 的良好哈希表实现?我需要将它与 mpicc 编译器一起使用。不需要删除功能。
【问题讨论】:
实际上没有。此外,哈希表将是不可变的。 在“一经创建,以后不再更改”的意义上是不可变的。 编译时数据是否已知?然后,您可以按照 Remo.D 的建议使用完美的哈希生成器。 是的,数据在编译时是未知的。 【参考方案1】:glib 里面的那个很不错。不过,不确定它是否太大和/或可能与 glib 的其余部分隔离。
如果做不到这一点,Pearson hashing 似乎是实现您自己的一个很好的起点(它是针对具有 8 位寄存器的机器优化的哈希函数)。
【讨论】:
glib 很好,但它太大了,我不建议仅仅为此将它包含在您的项目中。但是,如果您还需要 glib 的所有其他功能,我同意这将是可行的方法。【参考方案2】:如果事先知道所有键,您可以使用perfect hash 生成器来避免哈希表中隐含的空间开销。
另一方面,如果您确实需要一个完整的哈希表,我建议您使用 Cuckoo Hashing 的变体(例如 d-ary 版本)。
我满意地使用了Hopscotch Hashing 的简化版本,即使在更高的负载率下也能很好地工作。
【讨论】:
以上是关于C 的哈希表实现的主要内容,如果未能解决你的问题,请参考以下文章