哈希函数

hash函数

hash函数,简单点说,就是输入一个数,输出一个数,输出具有唯一性,输入和输出具有一一映射关系,该函数叫做哈希函数或杂凑函数,输出值叫做哈希值或杂凑值,常见的杂凑算法有:Md5、Sha256、SM3等。

Hash通过Hash函数,将Key值映射为地址,Address = F[key];

无论输入是什么数字格式、文件有多大,输出都是固定长度的比特串。以比特币使用的Sh256算法为例,无论输入是什么数据文件,输出就是256bit。

每个bit就是一位0或者1,256bit就是256个0或者1二进制数字串,用16进制数字表示的话,就是多少位呢?

16等于2的4次方,所以每一位16进制数字可以代表4位bit。那么,256位bit用16进制数字表示,当然是256除以4等于64位。

于是你通常看到的哈希值,就是这样的了:
00740f40257a13bf03b40f54a9fe398c79a664bb21cfa2870ab07888b21eeba8

在学数据结构时,常见的hash函数有:直接定址法、数字分析法、平方取中法、折叠法、随机数法、除留余数法.

直接定值法

数字分析法

平方取中法

折叠法

随机数法

除留余数法

碰撞(冲突)问题

不管选用何种散列函数,不可避免的都会产生不同Key值对应同一个Hash地址的情况,这种情况叫做哈希冲突。

当冲突发生时,我们需要想办法解决冲突,一般常用的方法有:开放定址法、单独链表法、双散列法、再散列法以及建公共溢出取等方法。

开放定值法


链表法

装填因子

参考

1、Hash详解
2、《一切皆是映射:代码的本质》哈希算法

posted @ 2022-03-01 17:06  PamShao  阅读(1986)  评论(0编辑  收藏  举报