散列表查找

定义
通过散列函数寻找某个关键字所存在的位置,利用散列技术存储在一块连续的存储空间中,这块连续的存储空间称为散列表,对应的存储位置成为散列地址。
在这里插入图片描述
冲突
在查找存储位置的时候会存在关键字不同,但是存储位置相同,即对应的散列函数值相同,这种情况即“冲突”。
散列函数的构造
散列函数有很多构造方法,比如直接定址法、除留余数法等等,但不是都适用,因此好的散列函数应该具有:计算简单、散列地址分布均匀的特点
构造方法

  • 直接定址法
    这个方法比较直接,就和它的名字一样,直接。比如年龄统计,一个年龄为66的人,那函数就可以直接以66为值。

  • 平方取中法
    一个值为1234的关键字,sqrt(1234)=1522756,在取最后三位即756作为散列地址。这种方法造成冲突的概率比较大。

  • 除留余数法(最常用)

对表长为m,关键字为x的散列函数公式可以表示为:f(x)= x mod p(p<=m),为了尽量避免冲突,选好p是关键。通常选取p为小于等于表长m的最小质数。

处理散列冲突
f(x)= x mod p;就比如x=37、47,p等于12的时候,37是不是就和47冲突了,所以就要处理冲突来使散列地址发布均匀。
可以做一下改变:
在这里插入图片描述
这样f(37)=1,而f(32)=2就避免了冲突,但是光这样无法达到均匀分布,所以可以改善一下di数组:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值