哈希函数
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地址的情况,这种情况叫做哈希冲突。
当冲突发生时,我们需要想办法解决冲突,一般常用的方法有:开放定址法、单独链表法、双散列法、再散列法以及建公共溢出取等方法。
开放定值法