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

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

我们先来说一下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均是不同的散列函数,即在同义词产生地址冲突时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计算时间。
  • 链地址法(拉链法)
  • 建立一个公共溢出区
目录
打赏
0
0
1
0
2
分享
相关文章
|
10月前
|
学习散列表知识总结(二)
学习散列表知识总结(二)
58 0
|
10月前
|
学习散列表知识总结(一)
学习散列表知识总结(一)
59 0
C#哈希查找算法
C#哈希查找算法
从C语言到C++_30(哈希)闭散列和开散列(哈希桶)的实现(上)
从C语言到C++_30(哈希)闭散列和开散列(哈希桶)的实现
71 4
从C语言到C++_30(哈希)闭散列和开散列(哈希桶)的实现(下)
从C语言到C++_30(哈希)闭散列和开散列(哈希桶)的实现
61 1
从C语言到C++_30(哈希)闭散列和开散列(哈希桶)的实现(中)
从C语言到C++_30(哈希)闭散列和开散列(哈希桶)的实现
62 1
|
9月前
|
数据结构和算法——了解哈希表(哈希查找、散列的基本思想)
数据结构和算法——了解哈希表(哈希查找、散列的基本思想)
81 0
【C++入门到精通】 哈希结构 | 哈希冲突 | 哈希函数 | 闭散列 | 开散列 [ C++入门 ]
【C++入门到精通】 哈希结构 | 哈希冲突 | 哈希函数 | 闭散列 | 开散列 [ C++入门 ]
141 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等