一、介绍
与其他建立在“比较”基础上的查找算法不同,哈希表是通过哈希函数将储存位置与值得关键字建立一一对应关系,从而一般一次就能够得到值。但是有时对于不同关键字哈希后得到的地址会是相同的,称这种现象为冲突。具有相同哈希值的关键字称为同义词。
二、哈希函数
哈希函数一般都是尽可能是的关键字随机性较大,出现相同概率小。
直接定址法:根据关键词由哈希函数直接计算得地址
数字分析法:分析关键字规律,尽可能找关键字中不相同数字作为哈希地址
平方取中法:关键字平方后取中间几位作为哈希地址
折叠法:将关键字分割成相同几部分,然后取这几部分的叠加和作为哈希地址
除留余数法:取关键字不大于哈希表长度的m的数p除后所得余数作为哈希地址
随机数法:取关键字的随机函数值作为哈希地址
三、处理冲突
哈希函数的冲突问题是不能避免的,因此当有冲突时需要一种解决办法。
开放地址法:
顾名思义,将其他地址开放给哈希函数存储
再哈希法:
链接地址法:
将所有关键词为同义词的记录存储在同一个线性列表中
建立公共溢出区:
同义词的记录,一旦发生冲突,填入溢出表
四、查找长度
装填因子:
查找长度: