散列查找-复习

散列表相关知识点复习

散列查找

散列查找就像用字典一样,以最快的方式去定位到需要寻找的位置(通过关键字定位),定位的方式就是散列函数,如果定位有冲突,那么就用解决冲突的方法去解决!
这里不需要过于关心这个散列函数
如何快速搜索到需要的关键词?如果关键词不方便比较怎么办?
散列查找法的两项基本工作:
计算位置:构造散列函数确定关键词存储位置;
解决冲突:应用某种策略解决多个关键词位置相同的问题
查找的本质: 已知对象找位置。

直接“算出”对象位置:散列
时间复杂度几乎是常量:O(1),即查找时间与问题规模无关!

散列的一些操作
在这里插入图片描述

散列函数

“好”的散列函数一般应考虑下列两个因素:

  1. 计算简单,以便提高转换速度;
  2. 关键词对应的地址空间分布均匀,以尽量减少冲突。

函数有如下几个方法
数字关键字
1.直接定址法
取关键词的某个线性函数值为散列地址,即
h(key) = a * key + b

2.除留余数法 (最常用)
散列函数为:h(key) = key mod p

3.数字分析法
取11位手机号码key的后4位作为地址:散列函数为:h(key) = atoi(key+7)
atoi函数是把字符串转换成整数

字符串关键字
这里不懂的话,可以去看看视频的例子
在这里插入图片描述

解决冲突

开放定址法**
1.线性
每次冲突以线性的增长去寻找空间
2.平方探测
每次冲突以正负i增量去寻找空间
平方探测的代码示例
理论证明,当tablesize的大小是以4K+3的形式的素数时(k是正整数),这个方法可以探测全表

3.双散列探测
顾名思义,需要在一个hash函数中再计算另一个hash函数
4.再散列探测
在开放地址法中,不能进行删除操作,否则会找不到关键词。因此,需要增加删除标记。

分离链接表

分离链接表代码

每一行的单链表链接的都是同一个位置有冲突的值。在这里插入图片描述

KMP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值