【问题标题】:Hash Table: Which is the right linear-probing array?哈希表:哪个是正确的线性探测数组?
【发布时间】:2015-09-19 04:17:07
【问题描述】:

我现在正在研究特定哈希表中的数据结构。我遇到了以下问题:

Imagine that we have placed the following keys 
in an initial empty hash table with a length of 7
with linear probing, using the following table of hash-values:

key:    A B C D E F G
hash:   3 1 4 1 5 2 5

Which of the following arrays could be the linear-probing array?

1.
0 1 2 3 4 5 6
G B D F A C E

2.
0 1 2 3 4 5 6
B G D F A C E

3.
0 1 2 3 4 5 6
E G F A B C D

当我创建线性探测阵列时,我得到了这个:

0 1 2 3 4 5 6
G B D A C E F

谁能告诉我为什么我错了,正确答案是什么?

【问题讨论】:

  • 该问题未指定插入键的顺序。注意如果你插入 B-D-F-A-C-E-G,你会得到表 1 作为结果。
  • 在这种情况下,它应该在拼图的地方,而不是计算机课程。

标签: arrays hash hashtable


【解决方案1】:

请注意问题没有指定插入键的顺序,因此只有假设键实际上按 ABCDEFG 顺序插入,您的答案才是正确的,但由于问题没有明确说明顺序,你需要深入挖掘。

但是,您所知道的是,这些密钥中的一个将首先插入,并且它将进入其指定的插槽,如密钥到哈希图所示,因为哈希表最初是空的。这会立即丢弃选项选项 2,因为没有任何键在其指定的数组条目中,让您选择选项 1 和 3。

对于表 1,B 位于插槽 1,对应于其哈希值;对于表 3,键 FA 位于其初始哈希值位置。

很容易证明,在插入FA 之后,表3 上的任何键插入序列都不会产生表3。并且同样容易证明B-D-F-A-C-E-G的键插入序列将产生表1。

虽然这是一个基于哈希表的问题,但老实说,我不认为这是评估您对线性探测知识的好方法,正如@gnasher729 所提到的,这更像是一个难题。

【讨论】:

  • 哇,非常感谢!是的,这是我之前的数据结构考试中的问题......我认为提出问题的方式是错误的......应该是“将项目添加到数组中的顺序”或类似的东西。再次感谢!
  • @user3302735,很高兴我能帮上忙!如果这解决了您的问题,我将不胜感激could mark it as accepted
  • 哈哈,对不起。我还是个新手。完成!
猜你喜欢
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 2022-07-17
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2018-12-30
  • 1970-01-01
相关资源
最近更新 更多