第二十二次-查找(三)

散列表(hash)的查找技术

散列函数的构造

直接定址法

除留余数法

数字分析法

平方取中法

折叠法(分段叠加法)

冲突处理方法

开放定址法

链地址法

建立公共溢出区

散列函数的构造

直接定址法

除留余数法

数字分析法

平方取中法

折叠法(分段叠加法)

冲突处理方法

开放定址法

链地址法

建立公共溢出区

冲突处理方法

开放定址法

链地址法

建立公共溢出区

散列函数——除留余数法

一般情况下,选p为小于或等于表长(最好接近表长)的最小素数

除留余数法是一种最简单、也是最常用的构造散列函数的方法,并且不要求事先知道关键码的分布。

除留余数法是一种最简单、也是最常用的构造散列函数的方法,并且不要求事先知道关键码的分布。

对关键码平方后,按散列表大小,取中间的若干位作为散列地址(平方后截取)。

散列函数——数字分析法

根据关键码在各个位上的分布情况,选取分布比较均匀的若干位组成散列地址。

散列函数——平方取中法

对关键码平方后,按散列表大小,取中间的若干位作为散列地址(平方后截取)。

对关键码平方后,按散列表大小,取中间的若干位作为散列地址(平方后截取)。

将关键码从左到右分割成位数相等的几部分,将这几部分叠加求和,取后几位作为散列地址。

冲突的处理

开散列方法( open
hashing,也称为拉链法,separate chaining ,链地址法)

闭散列方法( closed
hashing,也称为开地址方法,open addressing ,开放定址法)

建立公共溢出区

线性探测法

当发生冲突时,从冲突位置的下一个位置起,依次寻找空的散列地址。

对于键值key,设H(key)=d,闭散列表的长度为m,则发生冲突时,寻找下一个散列地址的公式为:

Hi=(H(key)+di) % m (di=1,2,…,m-1)
1
二次探测法

当发生冲突时,寻找下一个散列地址的公式为:

             Hi=(H(key)+di)% m

1
(di=12,-12,22,-22,…,q2,-q2且q≤m/2)

随机探测法

处理冲突的方法——拉链法(链地址法)

基本思想:将所有散列地址相同的记录,即所有同义词的记录存储在一个单链表中(称为同义词子表),在散列表中存储的是所有同义词子表的头指针。

用拉链法处理冲突构造的散列表叫做开散列表。

设n个记录存储在长度为m的散列表中,则同义词子表的平均长度为n / m。

处理冲突的方法——公共溢出区

基本思想:

散列表包含基本表和溢出表两部分(通常溢出表和基本表的大小相同),

将发生冲突的记录存储在溢出表中。

查找时,对给定值通过散列函数计算散列地址,先与基本表的相应单元进行比较,若相等,则查找成功;否则,再到溢出表中进行顺序查找。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值