面试虐我千百遍,我待面试如初恋!不去面试一下真不知道自己有多水。
哈希表
哈希表是一种数据结构,python中的dict类就是通过哈希表来实现的。在哈希表中映射关系支持使用键作为索引的抽象:假设在一个映射中含有 n n n个元组,对于一些 N ≥ n N\geq n N≥n情况,使用范围在 ( 0 , N − 1 ) (0,N-1) (0,N−1)的整数作为键,因此可以使用长度为 N N N的查找表来表示这个映射。在哈希表中__getitem__
、__setitem__
和__delitem__
等基本映射操作都可以在最坏情况下以 O ( 1 ) O(1) O(1)的时间复杂度完成。
哈希函数
在哈希表中是使用哈希函数来将每个一般的键映射到一个表中的相应索引上。在理想情况下,键将由哈希函数分布到从0到N-1的范围内,但是在实践中可能有两个或者更多的不同键被映射到同一索引上,这也就是我们一会儿要讨论的哈希表冲突。因此,我们将表概念化为桶数组,其中每一个桶都管理一个元组集合,而这些元组则通过哈希函数发送到具体的索引。
哈希函数 h h h的目标就是把每个键 k k k映射到 [ 0 , N − 1 ] [0,N-1] [0,N−1]区间内的整数,其中 N N