具体系统的给您解释一下: 哈希表主要是构造一个映射函数,该函数以数据元素为自变量,函数值即为数据元素在内存中的存储位置。通常把这样的映射函数称为哈希函数h(x)。因此可以说,哈希表是通过哈希函数h(x)来确定数据元素x存放位置h(x)的一种特殊存储结构。 1、哈希表的基本构造方法 构造哈希表的方法是:设要存储的数据元素个数为 n,设置一个长度为m(m≥n)的连续内存单元(即数组),分别以每个数据元素的关键字Ki(0≤i≤n-1)为自变量,以哈希函数h(Ki)值为该数据元素在数组中的下标值存储该数据元素。
把构造哈希表时Ki≠Kj(i≠j),但h(Ki)=h(Kj)的现象称作哈希冲突。
2、 建立哈希表的关键问题
设计一个好的哈希函数,使得尽量避免哈希冲突,以及哈希冲突发生后,如何解决哈希冲突,就成了建立哈希表的两个关键问题。
哈希冲突主要与三个因素有关:
(1)与装填因子a有关。
(2)与所采用的哈希函数有关。
(3)与解决哈希冲突的哈希冲突函数有关。
3、哈希函数构造方法
设要存放的数据元素有n个,存放数据元素的数组个数为m,哈希函数的设计目标,就是要使通过哈希函数得到的n个数据元素的哈希地址 。
1) 除留余数法
除留余数法是用数据元素的关键字K除以哈希表长度m所得的余数作为哈希地址的方法。除留余数法的哈希函数h(K)为:
h(K) = K mod m
2 )直接定址法
直接定址法是以数据元素的关键字K本身或关键字加上某个数值常量C作为哈希函数的方法。直接定址法的哈希函数h(K)为:
h(K) = K + C
3 数字分析法
数字分析法是取数据元素关键字中某些取值较均匀的数字位构造哈希函数的方法。它只适合于所有关键字值已知的情况。
4、 哈希冲突解决方法
解决哈希冲突的方法主要有开放定址法和链表法两大类。
|