快速理解哈希表(散列表)

哈希表算法

哈希表算法通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。即通过构建哈希函数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