大话数据结构—散列表查找(哈希表)

一、基本概念

散列技术:在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。

f:散列函数/哈希函数
采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表
关键字对应的记录存储位置称为散列地址

散列技术既是一种存储方法,也是一种查找方法。
散列技术适合求解问题是查找与给定值相等的记录。查找速度快。
散列技术不适合范围查找,不适合查找同样关键字的记录,不适合获取记录的排序,最值。

冲突:关键字key1不等于key2,但f(key1)=f(key2)。
把key1和key2称为散列函数的同义词。

二、散列函数构造

两个原则:

  1. 计算简单
  2. 散列地址分布均匀

1. 直接定址发

f(key)=a x key+b(a、b为常数)

简单,均匀,不会冲突,但是事先知道关键字的分布情况,适合查找表小且连续。

2. 数字分析法

关键字位数多,比如手机号,可能前几位一样,只是后几位不同,抽取关键字的一部分计算散列存储位置。事先知道关键字分布且若干位分布均匀。
这里写图片描述

3. 平方取中法

不知道关键字分布,且位数不是很大。1234,平方1522756,抽取中间227作为散列地址。

4. 折叠法

不知道关键字分布,位数多。
从左到右分割成位数相等的几部分,这几部分叠加求和,并按散列表表长,取后几位作为散列地址。

5. 除留余数法

散列表长m

f(key)=key mod p(p<=m)

p选取不好,产生冲突。
通常p为<=m(最好接近m)的最小质数或者不包含小于20质因子的合数。

6. 随机数法

关键字长度不等。

f(key)=random(key),random随机函数

当关键字为字符串,转化为某种数字来对待,比如ASCLL码或者Unicode码等。

三、散

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值