直接定址法(适用于均匀哈希函数)
数字分析法(适用于关键字位数比哈希地址位数大,且关键字已知)
平方取中法
折叠法
除留余数法(一般笔试题都采用这种构造方法) H(key)=key mod p
随机数法
哈希函数的选择
处理冲突的方法
哈希表的装填因子(装填因子=表中填入的记录数 / 哈希表长度)
给一组关键字、H(key)=key mod p、哈希表长度和处理冲突的方法,如何构造出哈希表?
例题:关键字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…直到序号不重复
和线性探测再散列类似,
只是遇到重复序号时,余数先+1^2,若还重复,就+(-1 ^2)…直到不重复
已知一组关键字为(19,14,23,01,68,20,84,27,55,11,10,79),则按哈希函数H(key)=key mod 13和链地址法处理冲突的平均查找长度为?
每个关键字都对13取余,得到的余数决定该关键字连到哪个位置
构造出的哈希表如下:
竖着看,
第一列有6个元素,所以长度是16
第二列有4个元素,所以长度是24
第三列…
所以ASL=(16+24+31+41) / 12=1.75