Java笔试题常见知识点:哈希函数和哈希冲突

哈希函数的构造方法有哪些?

直接定址法(适用于均匀哈希函数)
数字分析法(适用于关键字位数比哈希地址位数大,且关键字已知)
平方取中法
折叠法
除留余数法(一般笔试题都采用这种构造方法) H(key)=key mod p
随机数法

产生哈希冲突的影响因素有哪些:

哈希函数的选择
处理冲突的方法
哈希表的装填因子(装填因子=表中填入的记录数 / 哈希表长度)

处理冲突的方法

1.开放定址法

给一组关键字、H(key)=key mod p、哈希表长度和处理冲突的方法,如何构造出哈希表?

(1)线性探测再散列:di=1,2,3,…m-1

例题:关键字19,14,23,01,68,20,84,27,55,11,10,79,按H(key)=key mod 13和线性探测再散列方法处理冲突,请构造表长为16的哈希表
答:哈希表长为16(序号0~15)
每个关键字对13取余
19%13=6-----占据6号位置
14%13=1-----占据1号位置

遇到重复序号时,余数+1继续取余,还重复就把最开始的余数+2…直到序号不重复

(2)二次探测再散列:di=1^2, -1^2, 2^2, -22…k2,-k^2

和线性探测再散列类似,
只是遇到重复序号时,余数先+1^2,若还重复,就+(-1 ^2)…直到不重复

2.再哈希法

3.链地址法

4.建立一个公共溢出区

衡量哈希表查找效率的量度——平均查找长度(ASL)

已知一组关键字为(19,14,23,01,68,20,84,27,55,11,10,79),则按哈希函数H(key)=key mod 13和链地址法处理冲突的平均查找长度为?
每个关键字都对13取余,得到的余数决定该关键字连到哪个位置
构造出的哈希表如下:在这里插入图片描述
竖着看,
第一列有6个元素,所以长度是16
第二列有4个元素,所以长度是2
4
第三列…
所以ASL=(16+24+31+41) / 12=1.75

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值