哈希表
Posted mike_chang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哈希表相关的知识,希望对你有一定的参考价值。
实现方法
一、开放地址法
线性探测
原始下标为x,线性探测就是x+1,x+2,x+3
当数据项占哈希表长的一半或三分之二时,性能最好
二次探测
原始下标为x,二次探测就是x+1,x+4,x+9,即x+1,x+2,x+3
要求哈希表的容量是一个质数
再哈希法
方法是把关键字用不同的哈希函数再做一次哈希化,用这个结果做为步长。这样不同的关键字就会使用不同的步长。
大约装填因子为9/10或更大的比例时,大多数数据项能用一次哈希函数找到,只有一小部分需要使用扩展的探测函数。
第二个哈希函数,不能得到0,否则将没有步长,原地踏步,陷入死循环;要求哈希表的容量是一个质数
二、链地址法
在哈希表的每个单元设置一个链表。
装填因子一般为1,或比1大。当装填因子是1时,大约三分之一的单元是空白单元,三分之一的单元有一个数据项,三分之一的单元有两个或更多的数据项。
链地址法是更健壮的机制,特别是事先难以确定哈希表大小时。
找到初始单元需要O(1)的时间级,搜索链表的时间与链表的平均数据项成正比
哈希表优缺点
优点:
插入(插入到末端)、查找、删除时复杂度是O(1)
缺点:
基于数组,难于扩展。哈希函数根据数组大小计算数据项的位置,所以在扩展哈希表时,不能简单地从一个数组向另一个数组拷贝数据;需要顺序遍历旧数组,重新计算数据项的下标,再插入新数组
不能以任何一种顺序遍历数据
某些哈希表被基本填满时,性能下降得非常严重
相关术语
探测:查找合适单元的过程
装填因子:已填入哈希表的数据项数目和表长的比率
以上是关于哈希表的主要内容,如果未能解决你的问题,请参考以下文章