计算机基础(数据结构)——散列查找

数据元素直接映射到相关存储地址,查找效率取决于散列函数、处理冲突的方法、装填因子

装填因子/负载因子:用于衡量存储键值对的满的程度

常见映射存储地址的散列函数

1.除留取余法 H(key)=key%p,p是不大于表长的质数

2.直接定址法 H(key)=key*a+b

3.数字分析法 选取数码分布较为均匀的若干位数作为散列地址

hash冲突的解决办法

1.拉链法 同一映射地址(同义词)的元素串成链表

延伸:使用无序容器(unordered_map)存储键值对时,会先申请一整块连续的存储空间,此空间用来存储各个链表的头指针,各键值对真正的存储位置是各个链表的节点。STL 标准库通常选用 vector 容器存储各个链表的头指针,建立新节点存储键值对,同时将该节点链接到对应编号的链表头指针上。在查找元素时,先用函数算出对应的编号,然后遍历编号链接的节点,若没有找到可以创建节点,链接到链表上

2.开发定址法(可存放新表项的空闲地址既向他的同义词开发,又向非同义词开放)

线性探测法  发生冲突时,每次往后探测相邻的下一个元素

平方(二次)探测法  发生冲突时,每次往后探测冲突次数的平方个单位的地址

伪随机序列法  把往后探测的位置存储起来,探测的位置随机产生

3.再散列法:准备多个散列函数,发生冲突就用下一个

参考王道教材数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值