码迷,mamicode.com
首页 > 其他好文 > 详细

哈希表

时间:2019-01-06 20:05:40      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:使用   部分   实现   需要   结果   下标   strong   比例   方法   

实现方法

一、开放地址法

线性探测
原始下标为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)

缺点:
基于数组,难于扩展。哈希函数根据数组大小计算数据项的位置,所以在扩展哈希表时,不能简单地从一个数组向另一个数组拷贝数据;需要顺序遍历旧数组,重新计算数据项的下标,再插入新数组
不能以任何一种顺序遍历数据
某些哈希表被基本填满时,性能下降得非常严重


 

相关术语

探测:查找合适单元的过程
装填因子:已填入哈希表的数据项数目和表长的比率

哈希表

标签:使用   部分   实现   需要   结果   下标   strong   比例   方法   

原文地址:https://www.cnblogs.com/Mike_Chang/p/10229989.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!