散列函数:把关键字的值映射到位置的函数。
散列表:利用散列函数简历的表,时间复杂度:O(1) 。
一个实用的散列函数应当满足两个条件:
1)能快速计算;
2)具有均匀性。
均匀性:假设散列函数H(key)最多可取M个不同的值,即0<=H(key)<M,如果key是从关键字值得集合中随机选取的一个值,则H(key)以同等概率取[0,M-1]中的一个值。
解决散列冲突的方法:
1、拉链法:为每个散列地址建立一张单链表,表中存储具有该散列值的同义词(取模运算相等)
2、开地址法:建立由M个元素组成的散列表,逐个向表中插入新纪录。
几个比较常用的开地址法:
1)线性探查法
2)伪随机探查法
3)二次探查法
4)双散列法
线性探查法容易使许多纪录在散列表中连成一片,该现象称为基本聚集;
伪随机探查法、二次探查法若有相同的基位置,择就会有同样的探查序列,该现象称为二次聚集;
双散列法可解决以上两个问题:第一个散列函数计算探查序列初始值,第二个散列函数计算探查步长。