折半查找、二叉排序树等查找时的查找效率依赖于查找过程中所进行的比较次数。而理性情况下是希望不经过比较的,一次存取便能得到,那就必须在记录的存储位置和他的关键字之间建立一种确定的对应关系f,是每个关键字和结构中的一个唯一的存储位置相对应。根据对应关系f找到给定值k的像分f(k),若结构中存在和k值相等的关键字,这必定在f(k)的存储位置上,因此不需比较便可直接获取记录。我们称这个关系为哈希函数,建立哈希表。
哈希表时间复杂度为O(1)
哈希函数是一个映像,只要使得任何关键字由此所得的哈希函数值都落在表长润徐范围内即可。
对不同关键字可能得到同一个哈希地址,这种现象称为冲突,冲突只能减少不能避免。
哈希表:根据设定的哈希函数和处理冲突的方法将一组关键字映像到一个有限的连续的地址集上,并以关键字在地址集中的像作为记录在表中的存储位置,这种表便称为哈希表,这一映像的过程称为哈希造表或散列,所得的存储位置称为哈希地址或散列地址。
哈希造表方法:
1、直接定址法
2、数字分析法
3、平均取中法
4、折叠发
5、除留余数法
6、随机数法
处理冲突的方法
1、开放定址法
2、再哈希法
3、链地址法
4、建立一个公共溢出区
虽然哈希表关键字与记录的存储位置之间建立了直接映像,但是由于冲突的产生,使得哈希表的查找过程仍为一个给定值和关键字进行比较的过程,因此需要用平均查找长度作为衡量哈希表查找效率的量度。
给定值和关键字进行比较的个数取决于:哈希函数、处理冲突方法、哈希表的装填因子(a=表中填入的记录数 / 哈希表长度)