哈希表基本知识:
哈希表(Hash Table)又称散列表,是除顺序储存结构,链表存储结构和索引表存储结构之外的又一种存储结构。
哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素,一般哈希表都是用来快速判断一个元素是否出现集合里。
哈希冲突:哈希冲突是指两个不同的键通过哈希函数映射到同一个位置的情况。这通常发生在哈希表的大小有限,而数据量较大时。哈希冲突是不可避免的,但可以通过设计良好的哈希函数和使用合适的冲突解决策略来最小化。
哈希碰撞:哈希碰撞是哈希冲突的另一种说法,它描述的是两个或多个不同的键值对在哈希表中被映射到同一个索引位置。碰撞会导致数据覆盖或需要额外的存储结构来处理冲突。
哈希碰撞的解决办法:
开放定址法:是一类以发生冲突的哈希地址为自变量,通过某种哈希冲突函数得到一个新的空闲的哈希地址的方法。
(1)线性探测法
从发生冲突的地址(设为d)开始,依次探测d 的下一个地址(当到达下标为m-1的哈希表表尾时,下一个探测的地址是表首地址0),直到找到一个空闲单元为止。
d0=H(key)
di=( di -1+1) % m(1≤i≤m-1)
(2)二次探测法
d0=H(key)
di=(d0±i2) % m(1≤i≤m-1)
其中,d0是发生冲突的地址,m是哈希表的长度。
四数相加:
《一》思路
我们可以将四个数组分成两部分,先遍历前两个数组,求出其和的所有情况加入到哈希表中
再遍历后两个数组,逐个求其两个数的和sum,并搜索哈希表中是否存在0-sum,如果存在则这四个数之和为0
《二》运用哈希表心得
如果需要频繁查找数据,使用哈希表可以通过避免线性扫描显著提高查找效率。
遍历数组的时间复杂度是O(n),而哈希表可以将这个查找过程优化为O(1)。
当我们遇到了快速判断一个元素是否出现在集合里的时候,就要考虑哈希法