学习散列表知识总结(三)

简介: 学习散列表知识总结(三)

我们先来说一下Hash原理,之前没有说到这一点。

Hash原理

  • Hash表采用一个映射函数 f : key —> address 将关键字映射到该记录在表中的存储位置,从而在想要查找该记录时,可以直接根据关键字和映射关系计算出该记录在表中的存储位置.
  • 通常情况下,这种映射关系称作为Hash函数,而通过Hash函数和关键字计算出来的存储位置(注意这里的存储位置只是表中的存储位置,并不是实际的物理地址)称作为Hash地址.

影响产生冲突的三个因素

  1. 散列函数是否均匀
  2. 处理冲突的方法
  3. 散列表的装填因子(也有称之为负载因子)
    定义:α= 填入表中的元素个数 / 散列表的长度
    α是散列表装满程度的标志因子。由于表长是定值,α与“填入表中的元素个数”成正比,所以,α越大,填入表中的元素较多,产生冲突的可能性就越大;α越小,填入表中的元素较少,产生冲突的可能性就越小。
    实际上,散列表的平均查找长度是装填因子α的函数,只是不同处理冲突的方法有不同的函数。

处理冲突方法

  • 开放寻址法;Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列,可有下列三种取法:
  • di=1,2,3,…,m-1,称线性探测再散列;
  • di=1^2,-1^2,2^2,-2^2,3^2,…,±k^2,(k<=m/2)称二次探测再散列;
  • di=伪随机数序列,称伪随机探测再散列。
  • 再散列法:Hi=RHi(key),i=1,2,…,k RHi均是不同的散列函数,即在同义词产生地址冲突时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计算时间。
  • 链地址法(拉链法)
  • 建立一个公共溢出区
目录
相关文章
|
4月前
|
算法
学习散列表知识总结(二)
学习散列表知识总结(二)
39 0
|
4月前
|
存储
学习散列表知识总结(一)
学习散列表知识总结(一)
38 0
|
3月前
|
存储 人工智能 缓存
|
3月前
|
存储 算法
数据结构和算法——了解哈希表(哈希查找、散列的基本思想)
数据结构和算法——了解哈希表(哈希查找、散列的基本思想)
30 0
|
4月前
|
存储 算法 数据安全/隐私保护
【C++入门到精通】 哈希结构 | 哈希冲突 | 哈希函数 | 闭散列 | 开散列 [ C++入门 ]
【C++入门到精通】 哈希结构 | 哈希冲突 | 哈希函数 | 闭散列 | 开散列 [ C++入门 ]
53 0
|
4月前
|
存储 Serverless
【数据结构】万字一文手把手解读哈希————(开/闭散列)解决哈希冲突完整详解(6)
【数据结构】万字一文手把手解读哈希————(开/闭散列)解决哈希冲突完整详解(6)
|
10月前
|
存储 缓存 Shell
【C++杂货铺】一文带你走进哈希:哈希冲突 | 哈希函数 | 闭散列 | 开散列
【C++杂货铺】一文带你走进哈希:哈希冲突 | 哈希函数 | 闭散列 | 开散列
59 0
【C++杂货铺】一文带你走进哈希:哈希冲突 | 哈希函数 | 闭散列 | 开散列
|
存储 算法 Java
Java数据结构与算法分析(十一)散列表(哈希表)
散列表(Hash Table)也叫哈希表,是根据给定关键字(Key)来计算出该关键字在表中存储地址的数据结构。也就是说,散列表建立了关键字与存储地址之间的一种直接映射关系,将关键字映射到表中记录的地址,这加快了查找速度。
163 0
|
存储 缓存 算法
【第五天】算法图解--哈希表(散列表)Hash函数
【第五天】算法图解--哈希表(散列表)Hash函数
|
存储 Serverless
数据结构进阶 哈希桶
数据结构进阶 哈希桶
155 0
数据结构进阶 哈希桶