我试图掌握可扩展散列的概念,但我对于将值分配给存储桶感到困惑。
例如:
说我想从头开始插入6个值:17,32,14,50,35,21
作为解决方案,这会出现什么问题:
全球深度= 2
铲斗尺寸= 2
00[] --> [][]
01[] --> [][]
10[] --> [][]
11[] --> [][]
这是否意味着每个哈希值只有一个值将指向存储桶,那么您是否增加了全局深度?或者这会有用吗?
我理解这个过程的开始,我只是在这一点上感到困惑。
答案 0 :(得分:3)
您提供的解决方案没有任何错误,只是不需要增加全局深度。该解决方案与给定的全局深度完全兼容。
假设我们使用最左边的2位选择目录和相应的存储桶。然后,解决方案将如下所示 二进制格式的数字也如下所示
17 - 01 0001
32 - 10 0000
14 - 00 1110
50 - 11 0010
35 - 10 0011
21 - 01 0101
目录-------------水桶
00 -----------------------> 14 |
01 -----------------------> 17 | 21个
10 -----------------------> 32 | 35个
11 -----------------------> 50 |
希望这有帮助。
答案 1 :(得分:0)
你不应该增加全局深度。 哈希的整个想法是选择这样的功能,它将项目或多或少地放在桶中。
这取决于哈希函数。 您可以使用像md5这样复杂的东西作为哈希,而不是在1个桶中获得1个元素,但是你实际上保证只有1个。
因此,一般实现应该在存储桶上使用二进制搜索,在存储桶中使用其他一些搜索。你不能,你不应该动态改变哈希函数。