好的雜湊函式要求:(1)計算簡單,至少雜湊函式的計算時間不應該超過其他查詢技術與關鍵字比較的時間;(2)計算出的雜湊位址分布均勻,這樣可以保證儲存空間的有效利用,並減少為處理衝突而耗費的時間。
1. 直接定址法
取關鍵字或關鍵字的某個線性函式值為雜湊位址。即h(key)=key或h(key) = a·key + b,其中a和b為常數(這種雜湊函式叫做自身函式)。
2. 數字分析法
假設某公司的員工登記表以員工的手機號作為關鍵字。手機號一共11位。前3位是接入號,對應不同運營商的子品牌;中間4位表示歸屬地;最後4位是使用者號。不同手機號前7位相同的可能性很大,所以可以選擇後4位作為雜湊位址,或者對後4位反轉(1234 -> 4321)、迴圈右移(1234 -> 4123)、迴圈左移等等之後作為雜湊位址。
數字分析法通常適合處理關鍵字位數比較大的情況,如果事先知道關鍵字的分布且關鍵字的若干位分布比較均勻,就可以考慮這個方法。
3. 平方取中法
假設關鍵字是1234、平方之後是1522756、再抽取中間3位227,用作雜湊位址。平方取中法比較適合於不知道關鍵字的分布,而位數又不是很大的情況。
4. 摺疊法
將關鍵字從左到右分割成位數相等的幾部分,最後一部分位數不夠時可以短些,然後將這幾部分疊加求和,並按雜湊表表長,取後幾位作為雜湊位址。
比如關鍵字是9876543210,雜湊表表長是3位,將其分為四組,然後疊加求和:987 + 654 + 321 + 0 = 1962,取後3位962作為雜湊位址。
摺疊法事先不需要知道關鍵字的分布,適合關鍵字位數較多的情況。
5. 除留餘數法
f(key) = key mod p (p≤m),m為雜湊表長。這種方法不僅可以對關鍵字直接取模,也可在摺疊、平方取中後再取模。根據經驗,若雜湊表表長為m,通常p為小於或等於表長(最好接近m)的最小質數,可以更好的減小衝突。
此方法為最常用的構造雜湊函式方法。
6. 隨機數法
f(key) = random(key),這裡random是隨機函式。當關鍵字的長度不等時,採用這個方法構造雜湊函式是比較合適的。
實際應用中,應該視不同的情況採用不同的雜湊函式。如果關鍵字是英文本元、中文字元、各種各樣的符號,都可以轉換為某種數字來處理,比如其unicode編碼。下面這些因素可以作為選取雜湊函式的參考:(1)計算雜湊位址所需的時間;(2)關鍵字長度;(3)雜湊表大小;(4)關鍵字的分布情況;(5)查詢記錄的頻率。
幾種常見的雜湊函式(雜湊函式)構造方法
除留餘數法 數字分析法 平方取中法 摺疊法 疊加法 隨機數法 構造雜湊函式的方法很多,實際工作中要根據不同的情況選擇合適的方法,總的原則是盡可能少的產生衝突。通常考慮的因素有關鍵字的長度和分布情況 雜湊值的範圍等。如 當關鍵字是整數型別時就可以用除留餘數法 如果關鍵字是小數型別,選擇隨機數法會比較好...
雜湊表(雜湊表) 二 雜湊函式的構造方法
雜湊函式的構造方法 1 雜湊函式的選擇有兩條標準 簡單和均勻。簡單指雜湊函式的計算簡單快速 均勻指對於關鍵字集合中的任一關鍵字,雜湊函式能以等概率將其對映到表空間的任何乙個位置上。也就是說,雜湊函式能將子集k隨機均勻地分布在表的位址集上,以使衝突最小化。2 常用雜湊函式 為簡單起見,假定關鍵字是定義...
常用的構造雜湊函式的方法
常用的構造雜湊函式的方法 雜湊函式能使對乙個資料序列的訪問過程更加迅速有效,通過雜湊函式,資料元素將被更快地定位 2.數字分析法 分析一組資料,比如一組員工的出生年月日,這時我們發現出生年月日的前幾位數字大體相 同,這樣的話,出現衝突的機率就會很大,但是我們發現年月日的後幾位表示月份和具體日期的數字...