散列表(Hash Table)是实现字典操作(查找、插入、删除)的有效数据结构,具有很高的查找效率。
一定情况下查找元素的期望时间是O(1),优于链表(O(n)),和直接寻址的数组(查找也是O(1))相当。但当实际存储的关键字数比可能的关键字总数小的时候,散列表比数组有效。
直接寻址 vs 散列技术
一些记号:
- 关键字的全域U
- 实际存储的关键字集合K(个数n)
- 散列映射的槽数m
- 关键字k
- 散列函数h
直接寻址,关键字k存放在第k个槽;而散列技术下,关键字k存放在第h(k)位置下。关键字会经过一次散列函数求出映射的位置,将关键字全域U映射到0到m-1的m个槽。
直接寻址技术存在明显问题,当关键字全域U很大的时候,存储大小为|U|的表T不现实。而实际存储的关键字集合K可能远小于U,分配给T的大部分空间浪费。
因此|K