目录加倍后可扩展散列重新指向指针

问题描述 投票:0回答:1

我需要了解目录加倍后重新指向指针的规则。每个存储桶将有两倍于其当前指针,但我的问题是如何确定哪个目录条目指向每个存储桶?注意:这不是在存储桶分割后重新指向指针的问题,其中局部深度低于目录中当前使用的位数,其中局部深度+1 处的位将确定这一点。

hash extensible
1个回答
0
投票

让我们考虑一个示例,其中每个存储桶的大小为 4,并且最低有效位用于目录。

但在此之前,你必须了解以下术语:

  • 目录的全局深度:区分哪个存储桶所需的最大位数 条目属于.由于我们在示例中使用目录中的最低有效位,因此全局深度 = 识别存储桶所需的最低有效位的数量。
  • 存储桶的本地深度:用于确定条目是否属于的位数 这个桶。

插入一些值后,假设目录和桶的状态如下:

哈希值(用星号表示)显示在桶内(而不是数据)以方便理解。实际上,数据而不是哈希值被放置在桶中。

现在我们插入一个哈希值为 20 的条目。20 的二进制值的最后两位是

00
,所以
20*
应该插入到 Bucket A 中。但是,由于 Bucket A 已满,这是不可能的。

双重目录

为了解决这个问题,我们必须将全局深度增加 1。因此新的全局深度变为 3,这意味着我们现在必须考虑哈希值的最后 3 位来确定其位置。

32*
16*
保存在同一个桶中,因为它们的最后 3 位是相同的。 (将
4*
12*
20*
放入同一个桶中的原因相同。)

注意

  • 如果在目录中使用最高有效位(而不是最低有效位),那么在加倍时,您将必须考虑最高有效位来确定哈希的位置。
  • 通过复制目录将其加倍 调整指针以分割图像页面(使用最低有效位可以通过复制目录实现有效加倍)

参考文献

https://cse.buffalo.edu/~zzhao35/teaching/cse562_spring22/files/08-hashindex.pdf

https://www2.cs.sfu.ca/CourseCentral/354/lxwu/notes/chapter11.pdf

© www.soinside.com 2019 - 2024. All rights reserved.