拉鍊法(鏈地址法)

當存儲結構是鏈表時,多采用拉鍊法,用拉鍊法處理衝突的辦法是:把具有相同散列地址的關鍵字(同義詞)值放在同一個單鏈表中,稱爲同義詞鏈表。有m個散列地址就有m個鏈表,同時用指針數組T[0..m-1]存放各個鏈表的頭指針,凡是散列地址爲i的記錄都以結點方式插入到以T[i]爲指針的單鏈表中。T中各分量的初值應爲空指針。
  例如,按上面例9.4所給的關鍵字序列,用拉鍊法構造散列表如圖9.14所示。 


  
  用拉鍊法處理衝突,雖然比開放定址法多佔用一些存儲空間用做鏈接指針,但它可以減少在插入和查找過程中同關鍵字平均比較次數(平均查找長度),這是因爲,在拉鍊法中待比較的結點都是同義詞結點,而在開放定址法中,待比較的結點不僅包含有同義詞結點,而且包含有非同義詞結點,往往非同義詞結點比同義詞結點還要多。
  如前面介紹的例9.4中,用線性探測法構造散列表的過程,我們知道,對前5個關鍵字的查找,每一個僅需要比較一次,對關鍵字49和24的查找,則需要比較2次,對關鍵字38的查找則需要比較4次,而對43的查找則需要比較3次。因此,對用線性探測法構造的散列表的平均查找長度爲:
    ASL=(1×5+2×2+3×1+4×1)/9 ≈1.78
而用拉鍊法構造的散列表上查找成功的平均查找長度爲:
    ASL=(1×5+2×3+3×1)/9≈1.55
顯然,開放定址法處理衝突的的平均查找長度要高於拉鍊法處理衝突的平均查找長度。但它們都比前面介紹的其它查找方法的平均查找長度要短。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章