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

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

  • 哈希函数的构造方法有哪些?
  • 产生哈希冲突的影响因素有哪些:
  • 处理冲突的方法
      • 1.开放定址法
        • (1)线性探测再散列:di=1,2,3,...m-1
        • (2)二次探测再散列:di=1^2, -1^2, 2^2, -2^2...k^2,-k^2
      • 2.再哈希法
      • 3.链地址法
      • 4.建立一个公共溢出区
  • 衡量哈希表查找效率的量度——平均查找长度(ASL)

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

直接定址法(适用于均匀哈希函数)
数字分析法(适用于关键字位数比哈希地址位数大,且关键字已知)
平方取中法
折叠法
除留余数法(一般笔试题都采用这种构造方法) 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取余,得到的余数决定该关键字连到哪个位置
构造出的哈希表如下:Java笔试题常见知识点:哈希函数和哈希冲突_第1张图片
竖着看,
第一列有6个元素,所以长度是16
第二列有4个元素,所以长度是2
4
第三列…
所以ASL=(16+24+31+41) / 12=1.75

你可能感兴趣的:(Java面试)