哈希函数:
hash: =把....弄糟(乱)
又称为散列函数,杂凑函数
什么是哈希表?
哈希表简单来说可以看作是是对数组的升级,(也有不少人认为哈希表的本质就是数组),那么哈希表和数组的具体联系和区别在哪里呢?
我们在利用数组存储数据的时候,记录在数组中的位置是随机的,位置和记录的关键字之间不存在确定的关系。
联系:哈希表是由数组实现的。
区别:数组中存储的元素的和数组下标没有确定的关系,而哈希表中存储的元素和数组的下标有一个确定的关系,我们将这个确定的关系称之为哈希函数(Hash).
哈希函数的应用场景模拟:
在一个大型超市里找出一个商品的价格
没用哈希函数:
遍历数组,不能一下找到商品的价格,顾客等的时间长,不高兴。
用了哈希函数:
通过哈希函数相同参数,返回特定的值,一下就能找到该元素的位置,顾客很高兴
hash函数的冲突
• 冲突两个不同的关键字,由于散列函数值相同,因而被映 射到同一表位置上。该现象称为冲突(Collision)或碰撞。
因素:
(1)与散列函数有关,一个好的散列函数的值应尽可能平均分布。
(2)与解决冲突的哈希冲突函数有关。
(3)与负载因子的大小。太大不一定就好,而且浪费空间严重,负载因子和散列函数是联动的。
解决冲突的办法:
(1)开放定址法:线性探查法、平方探查法、伪随机序列法、双哈希函数法。
(2)拉链法:把所有同义词,即hash值相同的记录,用单链表连接起来。
特点:
不同的参数返回不同的数(不一定)
相同的参数返回相同的数(一定)
不同的商品借助哈希函数,存储数据,可以实现数据到存储位置的一对一映射,从而把数据和属性放在同一张表里(数组),这种表称为哈希表,也成为散列表。
应用场景:
应用下载检测完整性