2

来自 MIT recitation的良好散列函数的属性:

  1. (大约)满足简单统一散列的假设:每个键都有可能散列到 m 个槽中的任何一个。
  2. 散列函数不应该偏向于特定的槽不会将相似的键散列到同一个槽(例如编译器的符号表不应该将变量 i 和 j 散列到同一个槽,因为它们经常结合使用)
  3. 计算速度很快,应该有 O(1) 运行时间
  4. 是确定性的。对于给定的 k,h(k) 应该始终返回相同的值

有人可以进一步解释第 2 点。变量名与散列函数有什么关系?

编辑:我使用 Java。因此,如果答案包含使用 java 语义的解释,那对我来说没问题。

4

2 回答 2

3

由于哈希表通常用于构建编译器用来查找符号信息(例如变量名和函数名)的查找表,因此使用编译器场景来解释 #2 的要点。

作者取了一对在同一个程序中很常见的变量名ij,并说表示这些变量名称的字符串"i""j",不应该散列到同一个槽中。这是有道理的,因为解决哈希冲突是查找过程中对速度影响最大的部分。

于 2012-08-17T10:17:53.973 回答
2

要点建议编译器使用称为符号表的东西,它是从变量名称到有关该变量的信息的映射,实现为哈希表。

许多编译器都是如此。

于 2012-08-17T10:15:35.947 回答