雜湊表(雜湊表) 二 雜湊函式的構造方法

2022-07-16 10:03:07 字數 1113 閱讀 6392

雜湊函式的構造方法

1、雜湊函式的選擇有兩條標準:簡單和均勻。

簡單指雜湊函式的計算簡單快速;

均勻指對於關鍵字集合中的任一關鍵字,雜湊函式能以等概率將其對映到表空間的任何乙個位置上。也就是說,雜湊函式能將子集k隨機均勻地分布在表的位址集上,以使衝突最小化。

2、常用雜湊函式

為簡單起見,假定關鍵字是定義在自然數集合上。

(1)平方取中法

具體方法:先通過求關鍵字的平方值擴大相近數的差別,然後根據表長度取中間的幾位數作為雜湊函式值。又因為乙個乘積的中間幾位數和乘數的每一位都相關,所以由此產生的雜湊位址較為均勻。

【例】將一組關鍵字(0100,0110,1010,1001,0111)平方後得

(0010000,0012100,1020100,1002001,0012321)

若取表長為1000,則可取中間的三位數作為雜湊位址集:

(100,121,201,020,123)。

相應的雜湊函式用c實現很簡單:

int hash(int key)

(2)除餘法

該方法是最為簡單常用的一種方法。它是以表長m來除關鍵字,取其餘數作為雜湊位址,即 h(key)=key%m

該方法的關鍵是選取m。選取的m應使得雜湊函式值盡可能與關鍵字的各位相關。m最好為素數。

【例】若選m是關鍵字的基數的冪次,則就等於是選擇關鍵字的最後若干位數字作為位址,而與高位無關。於是高位不同而低位相同的關鍵字均互為同義詞。

【例】若關鍵字是十進位制整數,其基為10,則當m=100時,159,259,359,…,等均互為同義詞。

(3)相乘取整法

該方法包括兩個步驟:首先用關鍵字key乘上某個常數a(0

該方法最大的優點是選取m不再像除餘法那樣關鍵。比如,完全可選擇它是2的整數次冪。雖然該方法對任何a的值都適用,但對某些值效果會更好。knuth建議選取

該函式的c**為:

int hash(int key)

(4)隨機數法

選擇乙個隨機函式,取關鍵字的隨機函式值為它的雜湊位址,即

h(key)=random(key)

其中random為偽隨機函式,但要保證函式值是在0到m-1之間。

雜湊表之二雜湊函式的構造

了解了hash的思想之後,會發現雜湊函式只是將關鍵字對下標的對映,沒有什麼特別的標準,衝突的多少就是衡量其好壞。若對於關鍵字集合中的任一乙個關鍵字,經雜湊函式映像到位址集合中任何乙個位址的概率是相等的,則稱此類雜湊函式為均勻的 uniform 雜湊函式。如果關鍵字能夠進過雜湊函式計算得出的位址能夠均...

雜湊表 雜湊表

一 定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。雜湊表的做法其實很簡單,就是把key通過乙個固定的演算法函式...

雜湊表(雜湊表)

雜湊表是最基礎的資料結構之一,利用鍵值對儲存並檢索資料的一種非線性結構。在其它各種結構線性表 樹等資料結構中,記錄在結構中的位置是隨機的,和記錄關鍵字之間不存在確定的關係,因此,在結構中查詢記錄時需進行一系列和關鍵字的 比較 的基礎上。在順序查詢時,比較的結果為 與 兩種可能 在折半查詢 二叉排序樹...