Database 这个可扩展散列解决方案有什么问题?

Database 这个可扩展散列解决方案有什么问题?,database,hash,indexing,hashtable,Database,Hash,Indexing,Hashtable,我试图理解可扩展散列的概念,但我对值在桶中的分布感到困惑 例如: 假设我想从头插入6个值:17、32、14、50、35、21 作为一种解决方案,这会有什么问题: 全局深度=2 铲斗尺寸=2 00[] --> [][] 01[] --> [][] 10[] --> [][] 11[] --> [][] 这是否意味着每个散列值只有一个值将指向bucket,因此您增加了全局深度?或者这样行吗 我理解这个过程的开始,我只是在这一点上感到困惑。你不应该增加全局深度。 散列的整个思

我试图理解可扩展散列的概念,但我对值在桶中的分布感到困惑

例如:

假设我想从头插入6个值:17、32、14、50、35、21

作为一种解决方案,这会有什么问题:

全局深度=2
铲斗尺寸=2

00[] --> [][]
01[] --> [][]
10[] --> [][]
11[] --> [][]
这是否意味着每个散列值只有一个值将指向bucket,因此您增加了全局深度?或者这样行吗


我理解这个过程的开始,我只是在这一点上感到困惑。

你不应该增加全局深度。 散列的整个思想是选择这样一个函数,它会将项目或多或少地平等地放入一个桶中

这取决于散列函数。 您可以使用像md5这样复杂的东西作为散列,然后在一个bucket中得到1个元素,但您不能真正保证只有1个元素


所以一般的实现应该在bucket上使用二进制搜索,在bucket内使用其他搜索。您不能也不应该动态更改哈希函数。

您提供的解决方案中没有错误,只是不需要增加全局深度。该解与给定的全局深度完全兼容

假设我们使用最左边的2位选择目录和相应的bucket。然后,解决方案如下所示
此外,二进制格式的数字如下所示

17-010001
32-100000
14-001110
50-110010
35-100011
21-010101

目录-----------存储桶
00------------------->14 |
01------------------->17 | 21
10------------------->32 | 35
11------------------->50 |


希望这能有所帮助。

Bucket不是数组,可以将其视为一个链表。“[]]”只是一个大小为2的Bucket的图形符号。我不是说这是一个阵列,我不明白你的问题,对不起。散列的思想是将这些值放入桶中。好的,您已经选择了2位作为值的“哈希”。14和50将进入同一桶,17和21也将进入同一桶。你的问题是什么?那么解决方案是好的?我只是对存储桶中要输入的值感到困惑,例如,我认为01[]只会在存储桶中输入一个唯一的值,而不是多个值。是的,这很好。想象一下,现在您想检查列表中是否有21个。得到最后两位=01并立即找到一个桶。接下来,您需要在一个桶中搜索。在两个元素之间搜索要比在六个元素之间搜索快。那是你的利润。当然,如果您期望,例如1000个元素,您应该增加全局深度。但不是在飞行中。