与哈希表相关的专业名词! 一文搞懂!

刚接触哈希的时候, 哈希表(hash table)、哈希(hashing)、哈希函数(hash function)、哈希算法(hashing algorithm)、字典(dictionary)、键(key)、值(value)、索引(index)、哈希码(hash code)、哈希值(hash value)这些名词总是在脑海里成为一团麻, 但又太过基础, 没有人清晰地帮我们辨析. 别担心! 本文将一一为你解答.

首先让我们回顾一下数据结构的概念.

我们都知道抽象数据类型(Abstract Data Type, ADT), 是指一种面对用户的纯理论的数学模型, 不涉及具体的实现. 而数据结构(data structure)则包含了实现ADT的具体数据及其方法. 举例来说, 堆栈是一种抽象数据类型,当我们定义了它是一个拥有push和pop接口的一个数据集合时. 而我们在具体实现时, 选择了array或者linked list这些数据结构.

在哈希表这个主题下, 字典(dictionary)/关联数组(associative array)/映射(map)是哈希表(hash table)的抽象数据类型. 因此, 当我们在说键(key)值(value)的时候, 我们是在dictionary这个上层概念的范围内描述的. 对于用户来说, 他只关心如何用字典来存放他的数据, 而无需关心下层的hash table是怎么实现的. 举例来说, 假设有一个人想要存储一群人的信息, 他可以选择使用字典来存放, 将每个人的姓名作为key, 而将生日、国籍、职业这些信息作为value. 通过字典, 便可以轻松操作这群人的信息. 但这个人并不知道, 他所方便使用的字典的下层, 其实是一个哈希表在服务这个字典.

图片[1] - 与哈希表相关的专业名词! 一文搞懂! - MaxSSL

哈希表是什么? 首先, 哈希表中的数据是存放在一个数组(array)当中的, 这个数据拥有索引(index). 而这个index也被我们称为哈希码(hash code)哈希值(hash value). 其次, 哈希表如何帮助实现字典中通过key获取value这样的方法的呢? 答案就是哈希! 哈希(hashing)是指使用哈希函数获得数组的索引(或者说获得哈希值)的过程. 其中,哈希函数(hash function)的输入是用户的key, 输出是数组的index, 或者说是hash code. 用数学符号表示就是 index = h(key). 其中h代表hash function. 当获得数组的index, 我们便可以访问数组中存放的对应的value. 总结来说, 哈希函数的计算和通过索引访问数组数据, 这两步的时间复杂度都是常数, 因而使用哈希表访问数据的时间复杂度为常数. 而哈希算法(hashing algorithm)就是哈希函数的别称.

总结, 在哈希这个话题下:

用户能看到的只有键(key)和值(value).

一些同义而不同名的专业名词总结如下:

索引(index)==哈希值(hash value)==哈希码(hash code)

哈希函数(hash function)==哈希算法(hashing algorithm)

希望对大家有所帮助! 有什么问题请在评论区提出:)

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享