java - 变量名与哈希函数有什么关系?

标签 java hash hashtable hash-function

good hash function from MIT recitation 的属性:

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

有人可以进一步解释一下第 2 点吗?变量名与哈希函数有什么关系?

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

最佳答案

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

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

关于java - 变量名与哈希函数有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12003871/

相关文章:

java - 随机生成的 X 数

java - 如何从 dockerized spring boot 连接 dockerized couchbase 服务器

java - 如果我激活 `-parameters` 编译器参数,SDN 将不起作用

php - 将 mysql 数据库中的用户输入与 php 进行比较

python-3.x - 为什么这段代码在 Python 和 Pypy3 中给出不同的结果?

C++:为什么我的 hash_map 给我一个像 map 一样的有序结果?

c++ - 使用AVL树的动态哈希表的复杂性

java - 如何在 javafx 中获取字体系列和字体样式?

algorithm - 随机生成整数的通用哈希函数插入后如何进行查找?

algorithm - 33 字节的错误检测码,检测前 32 字节翻转的位