hello-algo/docs/chapter_hashing/summary.md
Yudong Jin 9563965a20
Add the codes of hashmap (#553)
of chaining and open addressing
2023-06-14 02:01:06 +08:00

1.4 KiB
Raw Blame History

小结

  • 哈希表能够在 O(1) 时间内将键 key 映射到值 value效率非常高。
  • 常见的哈希表操作包括查询、添加与删除键值对、遍历键值对等。
  • 哈希函数将 key 映射为数组索引(桶索引),从而访问对应的值 value 。
  • 两个不同的 key 可能在经过哈希函数后得到相同的索引,导致查询结果出错,这种现象被称为哈希冲突。
  • 缓解哈希冲突的方法主要有扩容哈希表和优化哈希表的表示方法。
  • 负载因子定义为哈希表中元素数量除以桶数量,反映了哈希冲突的严重程度,常用作触发哈希表扩容的条件。与数组扩容类似,哈希表扩容操作也会产生较大的开销。
  • 链式地址通过将单个元素转化为链表,将所有冲突元素存储在同一个链表中,从而解决哈希冲突。然而,过长的链表会降低查询效率,可以通过将链表转换为 AVL 树或红黑树来改善。
  • 开放寻址通过多次探测来解决哈希冲突。线性探测使用固定步长,缺点是不能删除元素且容易产生聚集。多次哈希使用多个哈希函数进行探测,相对线性探测不易产生聚集,但多个哈希函数增加了计算量。
  • 不同编程语言采取了不同的哈希表实现策略。例如Java 的 HashMap 使用链式地址,而 Python 的 Dict 采用开放寻址。