与条目计数相关的哈希表是否有最佳大小?
因此,对于条目= n
,哈希表的最大(或推荐)大小s
取决于n
?让我们说2n
(条目数加倍)或其他一些值?
是否取决于内部结构(散列函数,桶大小等)?在提出要求时请提供一些证据。
答案 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