利用可扩展 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。
现在的索引结构为:
此时,每个桶至多包含2个元素,没有超过限制。因此,d保持为1。
最终的索引结构如下所示: