快速理解哈希表(散列表)
哈希表算法
哈希表算法通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。即通过构建哈希函数f(x)找到键值对应的下标值(哈希表的地址),然后将对应数据建立索引的方式。但是在创建的过程中,会有下标值重叠、即产生冲突的情况。目前主要有一下两类方式解决此问题。
1.链表解决方式
数组:寻址容易,插入和删除数组困难;
链表:寻址困难,插入和删除数据容易;
综合了两个的有点,哈希表使用了数组+链表(指针)的方式:
2.开放地址
线性探测法
如果冲突,那么下标+1,知道找到空得位置。
平方探测法
如果冲突,那么下表+i平方。
双哈希
设置第二个哈希函数,如果冲突则使用这个函数,得到i,往后数i个位置。即新位置=原位置+i*hash2。
例如:hash2(key)=R-(key mod R)
保证R取值为比下标数组尺寸小的质数。
注意事项
哈希函数应该设置合理,使得数据不容易产生冲突。
当哈希表的存储量超过70%的时候,应该建立新的哈希表,新表的尺寸应该是旧表的两倍大小,然后把旧表的数据再次填入新表。
参考:https://www.bilibili.com/video/BV1MC4y1p7rP?from=search&seid=12355951824801278180