Hash和字典

Hash

一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小千输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值(哈希冲突,要学会避免)。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

特征:
hash值的计算过程是依据这个值的一些特征计算的,这就要求被hash的值必须固定,因此被hash的值必须是不可变的

Hash和字典_第1张图片

用途 :
文件签名 md5加密
密码验证
这里写图片描述
可以看到:不论多长的字符,都被加密成了相同长度的数字。

字典

哈希这字典有什么联系呢?我们可以想象,字典是如何查找的?
这里写图片描述
首先我们清楚,字典不同于列表,他是无序的,不会和列表一样通过索引来循环。这样效率极低,当存储的数据量很大时,速度极慢。
那么可不可能时这样:
字典首先把所有的键hash成数值,然后排序,然后通过二分法来查找数值从而取出键呢?二分法的效率可是很高的啊!
实际上,字典采用的时一种更高级的算法,需要的步数更少。
这里我们也就明白了hash的另一种作用和与字典的联系。

你可能感兴趣的:(学问思辨)