单独动态调整大小可以保留哈希表的正确性吗?

时间:2016-04-02 07:51:47

标签: data-structures hash

我正在浏览MIT Open courseware 6.006,它有以下问题,

Alyssa决定为她的哈希表实现冲突解决和动态调整大小。但是,她不想做更多必要的工作,所以她想知道。如果她需要两者来保持她所期望的正确性和表现。毕竟,如果她有动态调整大小,她可以调整大小以避免碰撞;如果她有冲突解决,碰撞不会导致正确性问题。关于这两个属性的哪个陈述是真的?

  1. 仅动态调整大小将保留两个属性。
  2. 单独动态调整大小将保持正确性,但不会保持性能。
  3. 仅碰撞分辨率将保持性能,但不保持正确性。
  4. 两者都是保持性能和正确性所必需的。
  5. 正确答案在解决方案中给出为4,

    "没有冲突解决,没有正确性:可能有实际的哈希冲突,然后没有任何数量的调整将让两者都进入表格。"

    如果我们继续增加表大小并且我们的哈希函数是简单的统一哈希值,那么我就会感到困惑,那么哈希值最终会不会改变?

    if h(k1) = h(k2) => k1 mod size1 = k2 mod size1
    
    if k1, k2 are unique, then 
    
    for some size x
    
    h(k1) != h(k2)
    

    正确?

1 个答案:

答案 0 :(得分:1)

散列函数已经计算出散列的大小的上限。哈希函数将从某个可能的可变长度值计算固定长度值,即无论您的哈希表有多大,总会有冲突的可能性。

仅仅因为您将较大数量的值映射到较少数量的插槽,插槽将分配多个项目。那是一次碰撞,这是不可避免的。