1. 程式人生 > >動態查詢之雜湊(hash)表

動態查詢之雜湊(hash)表

一、介紹

  與其他建立在“比較”基礎上的查詢演算法不同,雜湊表是通過雜湊函式將儲存位置與值得關鍵字建立一一對應關係,從而一般一次就能夠得到值。但是有時對於不同關鍵字雜湊後得到的地址會是相同的,稱這種現象為衝突。具有相同雜湊值的關鍵字稱為同義詞。

二、雜湊函式

雜湊函式一般都是儘可能是的關鍵字隨機性較大,出現相同概率小。
直接定址法:根據關鍵詞由雜湊函式直接計算得地址
這裡寫圖片描述
數字分析法:分析關鍵字規律,儘可能找關鍵字中不相同數字作為雜湊地址
平方取中法:關鍵字平方後取中間幾位作為雜湊地址
摺疊法:將關鍵字分割成相同幾部分,然後取這幾部分的疊加和作為雜湊地址
除留餘數法:取關鍵字不大於雜湊表長度的m的數p除後所得餘數作為雜湊地址
這裡寫圖片描述


隨機數法:取關鍵字的隨機函式值作為雜湊地址

三、處理衝突

雜湊函式的衝突問題是不能避免的,因此當有衝突時需要一種解決辦法。
開放地址法:
顧名思義,將其他地址開放給雜湊函式儲存
這裡寫圖片描述
這裡寫圖片描述

再雜湊法:
這裡寫圖片描述

連結地址法:
將所有關鍵詞為同義詞的記錄儲存在同一個線性列表中
這裡寫圖片描述

建立公共溢位區:
同義詞的記錄,一旦發生衝突,填入溢位表

四、查詢長度

裝填因子:
這裡寫圖片描述
查詢長度:
這裡寫圖片描述