雜湊技術:
在記錄的儲存位置和它的關鍵碼key之間建立乙個確定的對應關係h,使得每個關鍵字key和唯一的儲存位置h(key)相對應。儲存記錄時,根據這個對應關係找到關鍵碼的對映位址,並按此位址儲存該記錄;查詢記錄時,根據這個對應關係找到待查關鍵碼的對映位址,並按此位址訪問該記錄,這種查詢技術就稱為雜湊技術。採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間稱為雜湊表;將關鍵碼對映為雜湊表中適當位置的函式稱為雜湊函式,所得的儲存位置稱為雜湊位址。
雜湊技術需要考慮的兩個問題:
1.雜湊函式的設計。力求簡單、均勻、儲存利用率高的雜湊函式。
2.衝突的處理。
雜湊函式遵循的基本原則:
1.計算簡單。雜湊函式應該不是很大的計算量,否則會降低查詢效率。
2.函式值(即雜湊位址)分布均勻,希望雜湊函式能夠把記錄以相同的概率雜湊到雜湊表的所有位址空間中,這樣才能保證儲存空間的有效利用,並減少衝突。
三種常見的雜湊函式:
直接定址法:
直接定址法的雜湊函式是關鍵碼的線性函式,即h(key) = a x key + b , 其中a, b為常數。
例如:關鍵碼集合為,選取的雜湊函式為h(key) = key / 10,則雜湊表如下圖所示:
評價:直接定址法的特點是不會產生衝突,但實際應用中能使用這種雜湊函式的情況很少,它適用於事先知道關鍵碼的分布,關鍵碼結合不是很大且連續性較好的情況。
除留餘數法:
除留餘數法的基本思想是選擇某個適當的正整數p,以關鍵碼除以p的餘數作為雜湊位址。
h(key) = key mod p.
一般情況下,如果雜湊表的長度為m, 通常選p為小於或等於表長(最好接近m)的最小素數或不包含小於20質因子的合數。
評價:除留餘數法是一種最簡單、也是最常用的構造雜湊函式的方法,並且這種方法不要求事先知道關鍵碼的分布。
平方取中法:
平方取中法是對關鍵碼平方後,按雜湊表大小,取中間的若干位作為雜湊位址(簡稱平方後擷取)。
之所以這樣,是因為乙個數平方後,中間的幾位分布較均勻,從而衝突發生的概率較小。
1.開放定址法:
用開發定址法處理衝突得到的雜湊表叫做閉雜湊表。
開放位址法處理衝突的方法是,如果關鍵碼得到的雜湊位址產生了衝突,就去尋找下乙個空的雜湊位址,只要雜湊表足夠大,他的雜湊位址總能找到,並將記錄存入。找下乙個空雜湊位址的方法通常有線性探測法和二次探測法。
1.1線性探測法:
(h(key) + di) % m (di = 1,2,3 ,4,...m-1)
1.2二次探測法
2.拉鍊法(鏈位址法)
用拉鍊法處理衝突構造的雜湊表叫做開雜湊表。
四、雜湊查詢的效能分析
影響衝突概率的主要三個因素:
1.雜湊函式是否均勻。
2.處理衝突的方法。
3.雜湊表的裝填因子。
開雜湊表和閉雜湊表的比較:
未完待續...
雜湊(hash 雜湊表)
可以認為雜湊有著陣列的思想,它將所有的資料段拼成乙個陣列 順序表 進行儲存,通過雜湊函式,可以基本上以o 1 的時間複雜度來查詢和儲存資料。通過資料段中的唯一關鍵字 key 經過某種演算法,得出此資料段在整個雜湊陣列 順序表 中的的下標,然後直接取元素即可。有資料結構如下 資料段 key,value...
查詢演算法(II)雜湊查詢 雜湊表 Hash
雜湊 hash 同順序 鏈結和索引一樣,是儲存集合的又一種方法。不同的是,雜湊表 雜湊表 在元素的儲存位置和它的關鍵字之間建立了乙個對應關係。雜湊儲存的基本思想是 以每個元素的關鍵字k為自變數,通過乙個函式 稱為雜湊函式或雜湊函式 計算出函式值,把這個值 雜湊位址或雜湊位址 解釋為一塊連續儲存空間 ...
Hash表(雜湊表 雜湊表)
雜湊函式 乙個把查詢表中的關鍵字對映成該關鍵字對應的位址的函式,記為hash key addr。位址可以是陣列下標,索引,或記憶體位址等 衝突 雜湊函式可能會把兩個和兩個以上的不同關鍵字對映到同一位址。衝突不可避免,所以要設計好的處理衝突的方法。同義詞 發生碰撞的不同關鍵字為同義詞。雜湊表 根據關鍵...