数据结构--散列查找

文章目录

  • 一、散列查找
  • 二、常见的散列函数
    • 2.1.除留余数法---H(key)=key%p
    • 2.2.数字分析法
    • 2.3.平方取中法
    • 2.4.分段叠加法
    • 2.5.伪随机数法
  • 三、解决冲突的方法
    • 3.1.开放定址法
      • 3.1.1线性探测法
      • 3.1.2平方探测法
      • 3.1.3伪随机序列法
    • 3.2.链地址法


一、散列查找

散列表:又称哈希表,是一种数据结构,
特点是数据元素的关键字与其存储地址直接相关(映射关系)
数据结构--散列查找_第1张图片
若不同的关键字通过散列函数映射到同一个值,则称它们为“同义词”通过散列函数确定的位置已经存放了其他元素,则称这种情况为“冲突”

二、常见的散列函数

设计目标:让不同关键字的冲突尽可能少

2.1.除留余数法—H(key)=key%p

散列表表长为m,取一个不大于m但最接近或等于m的质数p
数据结构--散列查找_第2张图片
数据结构--散列查找_第3张图片
用质数取模,分布均匀,冲突更少

2.2.数字分析法

选取数码分布较为均匀的若干位作为散列地址

2.3.平方取中法

取关键字的平方值的中间几位作为散列地址

2.4.分段叠加法

2.5.伪随机数法

H(key)=random(key)

三、解决冲突的方法

3.1.开放定址法

所谓的开放定址法:是指可存放新表项的空闲地址既向它的同义词表项开放,又向它的非同义词表项开放
在这里插入图片描述

3.1.1线性探测法

数据结构--散列查找_第4张图片
查找效率分析:
数据结构--散列查找_第5张图片
数据结构--散列查找_第6张图片

查找效率太低的原因在于:线性探测法很容易造成同义词、非同义词的“堆积”现象,严重影响查找效率

3.1.2平方探测法

数据结构--散列查找_第7张图片
数据结构--散列查找_第8张图片
数据结构--散列查找_第9张图片
比起线性探测法不易产生堆积问题

3.1.3伪随机序列法

_是一个随机数

3.2.链地址法

数据结构--散列查找_第10张图片
在这里插入图片描述
在这里插入图片描述
查找长度太长,冲突情况较严重,效率降低

你可能感兴趣的:(数据结构,散列表,哈希算法)