【发布时间】:2016-11-28 17:58:49
【问题描述】:
我知道的,
- 哈希表大小取决于负载因子。
- 它必须是最大的素数,并使用该素数作为 散列函数中的模值。
- 质数不能太接近 2 的幂和 10 的幂。
我怀疑,
- 哈希表的大小是否取决于键的长度?
以下段落来自 Cormen 的《算法简介》一书。 n=2000 是指字符串的长度还是要存储在哈希表中的元素个数?
m 的良好值是不太接近 2 的精确幂的素数。对于 例如,假设我们希望分配一个有冲突的哈希表 通过链接解决,大约保存 n = 2000 个字符串, 其中一个字符有 8 位。我们不介意检查平均 3 一个不成功的搜索元素,所以我们分配一个哈希表 大小 m = 701。选择数字 701 是因为它是靠近 = 的素数 2000/3 但不接近 2 的任何幂。将每个键 k 视为整数, 我们的哈希函数是
h(k) = k mod 701 .
谁能解释一下>
【问题讨论】:
-
“大小”是什么意思?桶数?平均每个桶的元素数?平均链长?与表相关的“一切”在 RAM 中使用的字节数?
-
我不懂你。我问“你所说的'大小'是什么意思”,显然是关于你的问题“......的大小”并且你回答“密钥的长度”......不计算。
-
simple size=桶数和桶数取决于给定字符串键的长度:)
-
不,为什么会这样?老实说,也许你最好只玩一个小例子(用笔和纸),看看会发生什么。看起来你有点沉迷于理论的东西。 ;)
-
哈希表大小实际上不需要是素数或远离二的幂。大多数常见的实现都是这样做的,但理论上并不是严格要求的。