2010-03-23 79 views
5

什么是C的散列表实现?我需要在mpicc编译器中使用它。删除功能不是必需的。C的散列表实现C

+0

没有,实际上。此外,哈希表将是不变的。 – Alex 2010-03-23 12:14:32

+0

在'一旦创建,以后不再改变'的意义上是不变的。 – Alex 2010-03-23 12:15:23

+0

数据在编译时是已知的吗?然后,您可以使用Remo.D建议的完美哈希生成器。 – quinmars 2010-03-23 13:52:33

回答

4

glib中的那个非常好。不过不知道它是否太大和/或可能从其余的glib中分离出来。

如果不成功,Pearson hashing似乎是实现自己的一个很好的起点(这是一个针对具有8位寄存器的机器进行优化的散列函数)。

+0

glib很好,但它太大了,我不会建议将它包含在你的项目中。如果你还需要glib拥有的所有其他特性,我同意这将是一条路。 – 2010-03-23 11:25:05

3

如果提前知道密钥,则可以使用perfect hash生成器,以避免散列表中隐含的空间开销。

另一方面,如果你真的需要一个完整的散列表,我会建议一个Cuckoo Hashing(例如d-ary版本)的变体。

我已经满意地使用了Hopscotch Hashing的简化版本,即使在更高的负载因素下也能很好地工作。