解決hash衝突的方法

與開放定址法相比,拉鍊法有如下幾個有點:

(1)拉鍊法處理衝突簡單,且無堆積現象,即非同義詞絕不會發生衝突,因此平均查找長度較短;

(2)由於拉鍊法中各鏈表上的節點空間是動態申請的,故它更適合於造表前無法確定表長的情況;

(3)開放定址法爲減少衝突,要求裝填因子a較小,故當節點規模較大時會浪費很多空間。而拉鍊法中可取a>=1,且節點較大時,拉鍊法中增加的指針域可忽略不計,因此節省空間;

(4)在用拉鍊法構造的散列表中,刪除節點的操作易於實現。只要簡單地刪除鏈表上相應的節點即可。而對於開放地址法構造的散列表,刪除節點不能簡單地將被刪除節點的空間置爲空,否則將截斷在他之後填入算列表的同義詞節點的查找路徑。這是因爲各種開放地址法中,空地址單元(即開放地址)都是查找失敗的條件。因此在用開放地址法處理衝突的散列表上執行刪除操作,只能在被刪除節點上做刪除標記,而不能真正刪除節點。

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