哈希表的初始化与条目计数有多大?

时间:2011-05-20 12:54:49

标签: algorithm data-structures hashtable

与条目计数相关的哈希表是否有最佳大小?

因此,对于条目= n,哈希表的最大(或推荐)大小s取决于n?让我们说2n(条目数加倍)或其他一些值?

是否取决于内部结构(散列函数,桶大小等)?在提出要求时请提供一些证据。

2 个答案:

答案 0 :(得分:3)

表的大小与条目数之间的比率称为哈希表的load factor

负载因子至关重要地决定了预期的运行时行为。对于要应用的通常界限(即所有操作的预期时间O(1)),它必须小于1.

在实践中,皮特威尔逊的评论适用:人们试图将负荷系数保持在接近1,以免浪费空间;表的素数大小通常用于改善散列函数的碰撞特性 - 但存在其他策略。

答案 1 :(得分:2)

在java中,使用类HashTable,默认的加载因子(.75)在时间和空间成本之间提供了良好的权衡。

较高的载荷系数值会降低空间要求并增加碰撞的几率。碰撞会增加执行get()和put(...)所需的时间。

较低的负载系数值会增加磁盘/内存空间要求,从而导致大量永久未使用的保留空间。增加的箱数减少了碰撞的几率。

因此,载荷因子(.75)表示HashTable箱已满75%。如果要存储75个元素,则HashTable中的bin数应为100。

因此,回答你的问题,给定N作为你的HashTable中存储的项目数,你的HashTable的大小应该是(1.33 * n)。在某些情况下,其他情况可能会使不同的载荷因子更快。

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Hashtable.html