散列表查找概述

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。

对不同的关键字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),这种现象称碰撞(collision)。具有相同函数值的关键字对该散列函数来说称做同义词(synonym)。

根据散列函数和处理碰撞的方法将一组关键字映射到一个有限的连续的地址集(区间)上。这一映射过程称为散列造表或散列,所得的存储位置称为散列地址。

若对于关键字集合中的任一个关键字,经散列函数映射到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就是使关键字经过散列函数得到一个“随机的地址”,从而减少碰撞。

整个散列过程其实就是两步。(1)在存储时,通过散列函数计算记录的散列地址,并按此散列地址存储该记录;(2)在查找时,通过同样的散列函数计算记录的散列地址,按此散列地址访问该记录。所以说,散列技术既是一种存储方法,也是一种查找方法。

散列技术最适合的求解问题就是查找与给定关健值对应的记录。不过散列表不适合范围查找,比如查找一个班级18-22岁的同学,在散列表中没法进行。想获得表中记录的排序也不可能,像最大值、最小值等结果也都无法从散列表中计算出来。

posted on 2012-12-16 14:48  zhuyf87  阅读(469)  评论(0编辑  收藏

导航