利用可扩展 hash 方法对以下记录进行 hash 存储

利用可扩展 hash 方法对以下记录进行 hash 存储:

  3, 5, 7, 12, 16

设 hash 函数 h(x)= x mod 8,其中散列函数 h(k)是一个 b(足够大)位二进制序列,序列的前d位用作索引,来区分每个元素属于哪个桶。

现要求每个桶至多包含2个元素,以上元素按从左往右的顺序依次添加。开始时只使用

序列的前1位作索引(即d=1),当桶满时进行分裂,d相应增大。请画出添加完以上

所有元素后,最终的索引结构

初始时,将所有记录按照 h(k) = k mod 8 值为 3, 5, 7, 4, 0,分布在桶0, 3, 5, 4, 7中。

插入记录3时,h(3) = 3,由于桶0未满,直接放入桶0中。

插入记录5时,h(5) = 5,由于桶5未满,直接放入桶5中。

插入记录7时,h(7) = 7,由于桶7未满,直接放入桶7中。

插入记录12时,h(12) = 4,由于桶4未满,直接放入桶4中。

插入记录16时,h(16) = 0,由于桶0已经有元素,需要进行分裂。
将桶0中的元素3、16,按照 h(k) = k mod 16 的值分为两个新的桶:0和8。0中放入3,8中放入16。

现在的索引结构为:

  • 桶0:3
  • 桶3:5
  • 桶5:7
  • 桶4:12
  • 桶7:空
  • 桶8:16

此时,每个桶至多包含2个元素,没有超过限制。因此,d保持为1。

最终的索引结构如下所示:

  • 桶0:3
  • 桶1:空
  • 桶2:空
  • 桶3:5
  • 桶4:12
  • 桶5:7
  • 桶6:空
  • 桶7:空
  • 桶8:16