哈希表:哪个是正确的线性探测阵列?

时间:2015-07-01 20:22:37

标签: arrays hash hashtable

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

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

有人可以告诉我为什么我错了,得到了正确答案吗?

1 个答案:

答案 0 :(得分:1)

注意问题是如何指定键的插入顺序的,所以你的答案是正确的,假设键实际上是按照ABCDEFG的顺序插入的,但由于问题没有明确说明说明命令,你需要深入挖掘。

然而,您知道的是,其中一个密钥将首先被插入,并且它将转到其指定的插槽,如Key-to-Hash图所示,因为哈希表最初是空的。这会立即丢弃选项2,因为没有任何键位于其指定的数组条目中,只留下选择1和3.

对于表1,B位于插槽1中,对应于其散列值,对于表3,键FA位于其初始散列值点。< / p>

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

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