散列表的查找

Harper886’s Blog / 2023-07-29 / 原文

散列表的查找

基本思想

记录的存储位置与关键字之间存在的对应关系.

使用哈希函数查找对应的数据

image-20230729102725184

就是直接将学生的学号当做下标来存储.

image-20230729103051035

这样就非常好查找

image-20230729103148029

如何让查找

image-20230729103539745

根据散列函数H(key)=k

查找key=n,则访问H(n)=n的地址,若内容为n则成功.

若查询不到,返回一个特殊值,空指针或空记录.

优点:查找效率非常高;

缺点:空间效率低!

若干术语

image-20230729104110783

散列方法:使用一个函数计算元素的存储位置,按这个位置存放.

查找时,由同一个函数对给定值k计算地址,将k与地址单元中元素关键码进行对比,确定查找是否成功;

散列函数:散列方法中使用的转换函数;

冲突:不同关键码映射到同一个散列地址.

同义词:具有相同函数值的多个关键字.

image-20230729104809228

散列函数的构造方法

在散列查找方法中,冲突不可避免,只能尽可能减少.

image-20230729104958359

使用散列表要解决的两个问题

  1. 构造好散列函数
  2. 制定一个好的解决冲突的方案

image-20230729105229761

构造散列函数考虑的因素

  1. 执行速度

  2. 关键字的长度

  3. 散列表的大小

  4. 关键字的分布情况

  5. 查找频率

    image-20230729105539051

散列表的构造的两个要求

  1. 希望散列的地址空间尽可能的小
  2. 尽量均匀的存放元素,避免冲突.

image-20230729105813810

直接定址法

优点:以关键码key的某个线性函数值为散列地址,不会产生冲突.

缺点:要占用连续地址空间,空间效率低.

image-20230729110139121

除留余数法

关键:如何选取合适的p?

技巧:设表长为m,取p<=m且为质数.

image-20230729110400287