4

我将使用 key:value 存储并希望在 Perl 中创建不可碰撞的哈希。是否有 Perl 模块或函数可用于生成不可碰撞的哈希函数或表(可能类似于gperf)?我已经知道我的输入值范围。

4

2 回答 2

4

我找不到纯粹的 Perl 解决方案,最接近的是Reini Urban 对使用类型系统的完美哈希的检查。如果您要在 XS 中执行此操作,那么CMPH(C 最小完美哈希库)可能比 gperf 更合适。CMPH 似乎针对重要的密钥大小和运行时生成进行了优化。

在 Perl 中在运行时生成完美散列函数的成本可能会淹没使用它的价值。为了获得好处,您需要对其进行编译和缓存。因此,再次编写一个 XS 模块,在 XS 编译时从固定键列表生成函数可能是最好的方法。

出于好奇,您的数据有多大,该集合包含多少个键?

于 2011-10-21T01:48:02.103 回答
4

你可能对朱迪感兴趣。它不是一个哈希表实现,但它被认为是一个非常有效的关联数组实现。

请注意,Perl 的哈希值调整得非常好,当存储桶开始变大时,它们会自动重新哈希。

于 2011-10-21T01:56:32.360 回答