OCaml中的Hashtbl是否有最佳尺寸?

时间:2013-05-23 21:58:02

标签: performance ocaml

假设我需要存储20个键/值,使用2的幂是否更有效,例如32?我读了一篇论文,其中作者使用了251的大小(对于未知数量的键/值),这只是一个随机数,还是有一些推理呢?

我在谈论n中的Hashtbl.create n

1 个答案:

答案 0 :(得分:4)

你所要求的并不完全清楚。由于您通过名称询问Hashtbl,我假设您正在讨论标准哈希表模块。此模块始终以2的幂大小分配表。所以你不必担心它。

哈希表有两种基本的“额外好”大小。两个人的权力很好,因为他们可以很容易地找到你的哈希桶。散列过程的最后一步是将散列值取模为表的大小。如果表大小是2的幂,则可以使用屏蔽操作非常快速地完成该模运算。我不确定这在今天的世界中是否重要,除非你的哈希函数本身计算速度非常快。

第二个好的值是素数。素数是好的,因为它倾向于在整个表中传播值。如果您的哈希值恰好是某个数字的倍数,则这将导致哈希表中的密集群集,除非哈希表大小相对于主要数字的素数。对于几乎所有东西来说,大数字素数是相对主要的,因此它可以防止聚类。所以,251是好的,因为它是素数。