文章目录
一、你不了解哈希表
1. 什么是哈希表?
- 我们已经知道了一个数据项,关键字映射存储位置。
- 我们查找过程,其实就是比较,不断比较关键字,从而才可以找到存储位置。
- 现在你应该可以发现,他们就像函数一样,X=关键字,Y=存储位置。
- 哈希表的难点就在于找映射关系:f(x) = y
- 称函数为:哈希函数。
- 按这个思想建立的表为哈希表。
- 哈希表的优点:在于它不需要不断比较,而是直接找到,一次就好。
- 黑体字是重点
2. 冲突
- 函数的数学定义有一点:不允许一个X对应多个Y。
- 哈希函数也是函数,所以还剩下一种情况:多个X对应一个Y。
- 所以哈希表要解决的冲突:不同的关键字可能得到同一存储地址。
- 错误可以解决,冲突不能完全避免。我们通常要设定一种处理冲突的方法。
3. 关键名词
- 哈希表:一个关键字对应一个储存位置,形成的表。
- 存储位置 = 哈希地址 = 散列地址
- 函数关系 = 映射关系 = 对应关系 = 哈希构造 = 散列
- H(x) = y
二、你已经知道了哈希表
(一)、哈希函数的构造方法
- 目标:构造好的哈希函数。
- 好的哈希函数:关键字经过哈希函数得到一个“随机的地址”,以便使一组关键字的哈希地址均匀分布在整个地址区间中,从而减少冲突。
1. 直接定址法
H ( k e y ) = k e y 或 H ( k e y ) = a ∗ k e y + b H(key) = key 或 H(key) = a*key + b H(key)=key或H(key)=a∗key+b
2. 数字分析法
太 灵 活 了 , 知 道 有 这 种 方 法 就 行 了 太灵活了,知道有这种方法就行了 太灵活了,知道有这种方法就行了
3. 平方取中法——重要
取 关 键 字 平 方 后 的 中 间 几 位 为 哈 希 地 址 取关键字平方后的中间几位为哈希地址 取关键字平方后的中间几位为哈希地址
- 如:
4. 折叠法
将 关 键 字 分 割 成 相 同 的 几 部 分 ( 最 后 一 部 分 的 位 数 可 以 不 同 ) , 然 后 取 这 几 部 分 叠 加 和 ( 舍 去 进 位 ) 作 为 哈 希 地 址 将关键字分割成相同的几部分(最后一部分的位数可以不同),然后取这几部分叠加和(舍去进位)作为哈希地址 将关键字分割成相同的几部分(最后一部分的位数可以不同),然后取这几部分叠加和(舍去进位)作为哈希地址
- 折叠发适合关键字位数多,且每一位上的数字分布大致均匀。
- 如:
5. 除留余数法——重要
H ( k e y ) = k e y M O D