昨天复习了一下哈希表,今天来总结一下。
哈希表概述
哈希表,是根据关键码值(key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录。由于可以根据哈希函数直接得到对应位置,哈希表的查找时间复杂度为O(1)。这是一种以空间换时间的做法。
通常哈希表的做法是采用数组实现,利用哈希函数把key转化成整形数字,然后将该数字对数组长度进行取余,取余结果当作数组的下标,将value存储在以该数字为下标的数组空间里。
哈希表的查询同样采用哈希函数,找到key对应的数组下标,查看对应的value是否在该位置上即可。
构造散列函数
散列函数能使一个对数据序列的访问过程更加有效,通过散列函数,数据元素将被更快定位。
- 直接定址法:取关键字或关键字的某个线性函数值为散列地址。即 hash(k)=k 或 hash(k)=a∗k+b ,其中 ab 为常数(这种散列函数叫做自身函数)。
- 数字分析法:假设关键字是以r为基的数,并且哈希表中可能出现的关键字都是事先知道的,则可取关键字的若干数位组成哈希地址。
- 平方取中法:区关键字平方后的中间几位为哈希地址。比如 112