Logo
Section 1 / 29

哈希与哈希表简介

哈希表是一种用于存储键值对的数据结构。其基本原理是通过哈希函数将键(key)映射到数组中的一个索引位置,从而实现快速的插入、删除和查找操作。理想情况下,哈希函数能将不同的键均匀分布到数组的不同位置,以减少冲突(即不同键映射到同一位置的情况)。当发生冲突时,通常采用链地址法(如使用链表)或开放寻址法来处理。哈希表的平均时间复杂度在理想情况下为 O(1),使其成为高效的数据存储与检索工具。

导入

哈希与哈希表简介

哈希表是一种用于存储键值对的数据结构。其基本原理是通过哈希函数将键(key)映射到数组中的一个索引位置,从而实现快速的插入、删除和查找操作。理想情况下,哈希函数能将不同的键均匀分布到数组的不同位置,以减少冲突(即不同键映射到同一位置的情况)。当发生冲突时,通常采用链地址法(如使用链表)或开放寻址法来处理。哈希表的平均时间复杂度在理想情况下为 O(1),使其成为高效的数据存储与检索工具。

哈希

到目前为止,大多数数据结构在插入、删除和搜索操作中的总体时间复杂度最高为 O(logn),这已经相当不错了。但当数据量非常大时,这种复杂度开始对算法的效率产生不利影响。

理想的数据显示结构应当能够在所有三种操作中都花费恒定的时间。而这就正是哈希技术发挥作用的地方!

哈希是一种根据唯一键来存储对象的过程。这意味着哈希始终会创建一个键值对。多个这样的键值对组合在一起就构成了一个字典,其中每个对象或值都可以通过其键进行查找。因此,搜索操作可以在 O(1) 时间内完成。

哈希的概念催生了许多新的数据结构,其中最突出的是哈希表。

哈希表

如果你的算法特别重视搜索操作,那么哈希表就是最适合你的数据结构。在 C# 中,哈希表通常通过数组实现,因为数组能够以常数时间访问元素。请看下图,了解键和数据对是如何存储在哈希表中的。

...
(键, 数据) 对

在本节中,你将自己实现一个哈希表,因为它在编程面试中是一个非常热门的话题。让我们先从定义高效哈希表的基本构成开始。在进入具体实现之前,请先了解哈希表性能所依赖的关键因素。

哈希表的性能取决于三个基本因素:

  • 哈希函数
  • 哈希表的大小
  • 冲突处理方法

堆简介

哈希函数