我将使用一个键:值存储,并希望在Perl中创建不可碰撞的哈希。是否有一个Perl模块或函数,我可以用来生成一个不可碰撞的哈希函数或表(可能像gperf)?我已经知道了我的输入值范围。
答案 0 :(得分:4)
我找不到纯粹的Perl解决方案,最接近的是Reini Urban's examinations of using perfect hashes with a type system。如果你是在XS中做的话,CMPH (C Minimal Perfect Hashing Library)可能比gperf更合适。 CMPH似乎针对非平凡密钥大小和运行时生成进行了优化。
在Perl中运行时生成完美哈希函数的成本可能会淹没使用它的价值。为了获得好处,您需要编译和缓存它。因此,编写一个在XS编译时从固定密钥列表生成函数的XS模块可能是最好的方法。
出于好奇,您的数据有多大以及该集合包含多少个键?
答案 1 :(得分:4)
您可能对Judy感兴趣。它不是哈希表实现,但它应该是一个非常有效的关联数组实现。
请注意,Perl的哈希值已经过很好的调整,当铲斗开始变大时,它们会自动重新散列。