2010-03-23 80 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的簡化版本,即使在更高的負載因素下也能很好地工作。