基本概念
? ? ? ?根據設定的哈希函數Hash(key)和所選中的處理沖突的方法,將一組關鍵字映像到一個有限的、地址連續的地址集(區間)上,并以關鍵字在地址集中的像作為相應記錄在表中的存儲位置,這種表被稱為哈希表,這一映像的過程亦被稱為哈希。
哈希法查找必須研究兩個主要問題:
(1)構造一個計算簡單而且沖突盡量少的哈希函數;
(2)確定一個解決沖突的辦法。
構造哈希表的方法
1.直接定址法
? ? ? ?取關鍵字本身或關鍵字的某個線性函數值作為哈希表地址,即
Hash(key)=key 或 Hash(key)=a*key + b (a,b為常數)
2.數字分析法
? ? ? ?從關鍵字中選出分布較均勻的幾位作為哈希函數的結果,即關鍵字的存儲地址。
3.平均取中法
? ? ? ?將關鍵字先平方,然后取其中幾位為哈希地址。
4.折疊法
? ? ? ?將關鍵字分割成位數相等的幾部分(最后一部分位數可以不等),然后取這幾部分的疊加和(舍去進位)作為哈希地址。折疊法又分移位疊加和間界疊加,移位疊加是將各部分的最低位對齊,然后相加;間界疊加是從一端向另一端沿分割線來回折疊,然后對齊相加。
5.除留余數法
找出一個盡可能大且不大于哈希表表長的合適的正整數p,為避免沖突,一般取p為素數,取關鍵字除以p作為哈希函數的值,即
? ? ? ?Hash(key)= key % p (p<=m,m為表的長度)
一般選p為小于或等于哈希表長度m的某個最大素數較好。
6.隨機數法
取關鍵字的某個隨機函數值作為它的哈希地址,即 Hash(key) = Random(key),式中,Random為隨機函數。