【问题标题】:Hashtables at the exam考试中的哈希表
【发布时间】:2017-02-16 11:10:34
【问题描述】:

我在一月份的算法考试不及格。我明天要去参加口试。我正在通过普通的考试和答案,当有一个我无法理解的答案时。

根据答案,答案是A。为什么? 20 mod 7 是 6,但 12 mod 7 是 5,它是空的。希望你能在这里帮助我。

PS:如果格式错误,请见谅

【问题讨论】:

  • 别忘了将 k 乘以 2
  • 则 (2*20+3*0^2) mod 7 为 5。而第 5 个插槽为空
  • 这就是答案 a) 中的 20
  • 槽位号以0开头..

标签: algorithm hashtable


【解决方案1】:
h(20,0) = 5
h(12,0) = 3
h(5,0) = 3*
h(5,1) = 6
h(3,0) = 6*
h(3,1) = 2
h(1,0) = 2*
h(1,1) = 5*
h(1,2) = 0

* collision

【讨论】:

    【解决方案2】:
    i    k 
    -------------------------   
    0    20    (2*20+3*0^2) mod 7 = (40 + 0) mod 7 = 40 mod 7 = 5 <- [e, e, e, e, e, 20, e]
    0    12    (2*12+3*0^2) mod 7 = (24 + 0) mod 7 = 24 mod 7 = 3 <- [e, e, e, 12, e, 20, e]
    0     5    (2*5+3*0^2) mod 7 = (10 + 0) mod 7 = 10 mod 7 = 3  <- collision
    1     5    (2*5+3*1^2) mod 7 = (10 + 3) mod 7 = 13 mod 7 = 6  <- [e, e, e, 12, e, 20, 5]
    0     3    (2*3+3*0^2) mod 7 = (6 + 0 ) mod 7 = 6 mod 7 = 6   <- collision
    1     3    (2*3+3*1^2) mod 7 = (6 + 3) mod 7 = 9 mod 7 = 2    <- [e, e, 3, 12, e, 20, 5]
    0     1    (2*1+3*0^2) mod 7 = (2 + 0) mod 7 = 2 mod 7 = 2    <- collision
    1     1    (2*1+3*1^2) mod 7 = (2 + 3) mod 7 = 5 mod 7 = 5    <- collision
    2     1    (2*1+3*2^2) mod 7 = (2 + 12) mod 7 = 14 mod 7 = 0  <- [1, e, 3, 12, e, 20, 5]
    

    所以

    [1, empty, 3, 12, empty, 20, 5]
    

    【讨论】:

    • 为什么i只有0、1和2,而不是3?
    • 对于每个数字 k,您都以 i = 0 开头。对于每次碰撞,您递增i 并计算二次散列函数,直到找到一个空槽。在这个特定问题中,您永远不会到达i = 3,因为当i = 2 时,您会发现k = 1 的空槽。
    【解决方案3】:

    这是它的工作原理,每次发生碰撞时,将使用二次探测(使用i=1,2,..)直到哈希表中有可用空间:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      相关资源
      最近更新 更多