哈希表是一种根据关键码值(Key value)而直接进行访问的数据结构。
一、基本概念
1. 哈希函数:将任意长度的输入通过特定算法转换为固定长度的输出,这个输出值就是哈希值。例如,通过某种哈希算法将一个字符串转换为一个整数。
2. 哈希表的组成:由一个数组和哈希函数组成。数组的每个位置可以存储一个键值对,通过哈希函数计算键的哈希值,确定其在数组中的存储位置。
二、优点
1. 快速查找:平均情况下,可以在接近常数时间内完成查找、插入和删除操作。
2. 高效存储:可以有效地利用内存空间,避免存储不必要的信息。
三、哈希冲突(哈希碰撞)
当不同的键通过哈希函数计算得到相同的哈希值时,就发生了哈希冲突。
1. 产生原因:
- 哈希函数的设计:如果哈希函数不能将所有的键均匀地分布到哈希表的各个位置,就容易导致冲突。
- 哈希表的大小:如果哈希表的大小过小,而要存储的键的数量过多,冲突的概率就会增加。
2. 解决方法:
- 开放寻址法:
- 线性探测:当发生冲突时,依次检查下一个位置,直到找到一个空位置。例如,如果计算出的位置已被占用,就检查下一个位置,再下一个位置,以此类推。
- 二次探测:在发生冲突时,不是依次检查下一个位置,而是以二次方的形式增加检查的位置间隔。比如第一次冲突后检查位置 +1²,第二次冲突后检查位置 +2²等。
- 链地址法:将哈希表的每个位置设计为一个链表(或其他数据结构),当发生冲突时,将具有相同哈希值的键值对存储在同一个链表中。在查找时,先根据哈希值确定链表位置,然后在链表中进行线性查找。
哈希冲突是使用哈希表时需要重点考虑的问题,通过合理选择哈希函数和解决冲突的方法,可以提高哈希表的性能和效率。
力扣349 数组交集
力扣242题 字母异位词
反转链表