我知道如何在纸上进行可扩展散列,但我不知道如何创建空桶。
什么会导致在可扩展哈希中创建空桶?你能举个简单的例子吗?
答案 0 :(得分:0)
假设散列函数h(x)
为h(x) = x
,并且每个存储桶可以包含两个内容。
我还将散列码的最低有效位用作散列目录中的索引,而不是最高位。
基本上,为了得到一个空桶,我们想通过尝试将一些东西放入一个没有空间的桶中来诱导哈希表的加倍,但我们希望加倍失败。
所以,让我们开始插入东西。
首先,插入0.这应该放在第一个存储桶中,因为h(0) = 0
和0 % 2 = 0
。
然后,插入4.这也应该放在第一个存储桶中,因为h(4) = 4
和4 % 2 = 0
。
现在,插入8失败,因为存储桶只能容纳两件事,因此表的大小必须加倍。因此,全局哈希级别从1
增加到2
。其他更改包括新的第三个存储桶和指向第二个存储桶的第四个哈希索引。
不幸的是,由于rehashing过程需要h(x) % 4
并且我们所有的数字都是(故意)4的倍数,所以第一个桶仍然太满而第三个桶是空的。这可以通过哈希表的另一倍加倍来解决。