假设我需要存储20个键/值,使用2的幂是否更有效,例如32?我读了一篇论文,其中作者使用了251的大小(对于未知数量的键/值),这只是一个随机数,还是有一些推理呢?
我在谈论n
中的Hashtbl.create n
。
答案 0 :(得分:4)
你所要求的并不完全清楚。由于您通过名称询问Hashtbl
,我假设您正在讨论标准哈希表模块。此模块始终以2的幂大小分配表。所以你不必担心它。
哈希表有两种基本的“额外好”大小。两个人的权力很好,因为他们可以很容易地找到你的哈希桶。散列过程的最后一步是将散列值取模为表的大小。如果表大小是2的幂,则可以使用屏蔽操作非常快速地完成该模运算。我不确定这在今天的世界中是否重要,除非你的哈希函数本身计算速度非常快。
第二个好的值是素数。素数是好的,因为它倾向于在整个表中传播值。如果您的哈希值恰好是某个数字的倍数,则这将导致哈希表中的密集群集,除非哈希表大小相对于主要数字的素数。对于几乎所有东西来说,大数字素数是相对主要的,因此它可以防止聚类。所以,251是好的,因为它是素数。