幾種常見的雜湊函式(雜湊函式)構造方法

2021-10-14 11:08:45 字數 2484 閱讀 5941

除留餘數法 

數字分析法 

平方取中法 

摺疊法(疊加法) 

隨機數法 

構造雜湊函式的方法很多,實際工作中要根據不同的情況選擇合適的方法,總的原則是盡可能少的產生衝突。

通常考慮的因素有關鍵字的長度和分布情況、雜湊值的範圍等。

如:當關鍵字是整數型別時就可以用除留餘數法;如果關鍵字是小數型別,選擇隨機數法會比較好。

選用雜湊函式計算雜湊值時,可能不同的 key 會得到相同的結果,乙個位址怎麼存放多個資料呢?這就是衝突。

常用的主要有兩種方法解決衝突:

1.鏈結法(拉鍊法)

若選定的雜湊表長度為 m,則可將雜湊表定義為乙個由 m 個頭指標組成的指標陣列 t[0..m-1] 。

凡是雜湊位址為 i 的結點,均插入到以 t[i] 為頭指標的單鏈表中。 

t 中各分量的初值均應為空指標。

在拉鍊法中,裝填因子 α 可以大於 1,但一般均取 α ≤ 1。

2.開放定址法

用開放定址法解決衝突的做法是:

用開放定址法解決衝突的做法是:當衝突發生時,使用某種探測技術在雜湊表中形成乙個探測序列。沿此序列逐個單元地查詢,直到找到給定的關鍵字,或者碰到乙個開放的位址(即該位址單元為空)為止(若要插入,在探查到開放的位址,則可將待插入的新結點存人該位址單元)。查詢時探測到開放的位址則表明表中無待查的關鍵字,即查詢失敗。

按照形成探查序列的方法不同,可將開放定址法區分為線性探查法、二次探查法、雙重雜湊法等。

a.線性探查法

hi=(h(key)+i) % m ,0 ≤ i ≤ m-1 

基本思想是: 

探查時從位址 d 開始,首先探查 t[d],然後依次探查 t[d+1],…,直到 t[m-1],此後又迴圈到 t[0],t[1],…,直到探查到 有空餘位址 或者到 t[d-1]為止。

b.二次探查法

hi=(h(key)+i*i) % m,0 ≤ i ≤ m-1 

基本思想是: 

探查時從位址 d 開始,首先探查 t[d],然後依次探查 t[d+1^2],t[d+2^2],t[d+3^2],…,等,直到探查到 有空餘位址 或者到 t[d-1]為止。

缺點是無法探查到整個雜湊空間。

c.雙重雜湊法

hi=(h(key)+i*h1(key)) % m,0 ≤ i ≤ m-1 

該方法使用了兩個雜湊函式 h(key) 和 h1(key),故也稱為雙雜湊函式探查法。

定義 h1(key) 的方法較多,但無論採用什麼方法定義,都必須使 h1(key) 的值和 m 互素,才能使發生衝突的同義詞位址均勻地分布在整個表中,否則可能造成同義詞位址的迴圈計算。

該方法是開放定址法中最好的方法之一。

雜湊表(hash table)是雜湊函式最主要的應用。

雜湊表是實現關聯陣列(associative array)的一種資料結構,廣泛應用於實現資料的快速查詢。

用雜湊函式計算關鍵字的雜湊值(hash value),通過雜湊值這個索引就可以找到關鍵字的儲存位置,即桶(bucket)。雜湊表不同於二叉樹、棧、序列的資料結構一般情況下,在雜湊表上的插入、查詢、刪除等操作的時間複雜度是 o(1)。

查詢過程中,關鍵字的比較次數,取決於產生衝突的多少,產生的衝突少,查詢效率就高,產生的衝突多,查詢效率就低。因此,影響產生衝突多少的因素,也就是影響查詢效率的因素。 

影響產生衝突多少有以下三個因素:

雜湊函式是否均勻;處理衝突的方法;雜湊表的載入因子。

雜湊表的載入因子和容量決定了在什麼時候桶數(儲存位置)不夠,需要重新雜湊。

載入因子太大的話桶太多,遍歷時效率變低;太大的話頻繁 rehash,導致效能降低。所以載入因子的大小需要結合時間和空間效率考慮。

在 hashmap 中的載入因子為 0.75,即四分之三。

網路環境下的分布式快取系統一般基於一致性雜湊(consistent hashing)。簡單的說,一致性雜湊將雜湊值取值空間組織成乙個虛擬的環,各個伺服器與資料關鍵字k使用相同的雜湊函式對映到這個環上,資料會儲存在它順時針「遊走」遇到的第乙個伺服器。可以使每個伺服器節點的負載相對均衡,很大程度上避免資源的浪費。

動態分布式快取系統中,雜湊演算法的設計是關鍵點。使用分布更合理的演算法可以使得多個服務節點間的負載相對均衡,可以很大程度上避免資源的浪費以及部分伺服器過載。使用帶虛擬節點的一致性雜湊演算法,可以有效地降低服務硬體環境變化帶來的資料遷移代價和風險,從而使分布式快取系統更加高效穩定

構造雜湊函式

一 雜湊函式的選擇有兩條標準 簡單和均勻。簡單指雜湊函式的計算簡單快速 均勻指對於關鍵字集合中的任一關鍵字,雜湊函式能以等概率將其對映到表空間的任何乙個位置上。也就是說,雜湊函式能將子集k隨機均勻地分布在表的位址集上,以使衝突最小化。二 常用雜湊函式 為簡單起見,假定關鍵字是定義在自然數集合上。1 ...

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

雜湊函式的構造方法 1 雜湊函式的選擇有兩條標準 簡單和均勻。簡單指雜湊函式的計算簡單快速 均勻指對於關鍵字集合中的任一關鍵字,雜湊函式能以等概率將其對映到表空間的任何乙個位置上。也就是說,雜湊函式能將子集k隨機均勻地分布在表的位址集上,以使衝突最小化。2 常用雜湊函式 為簡單起見,假定關鍵字是定義...

雜湊函式的構造方法

好的雜湊函式要求 1 計算簡單,至少雜湊函式的計算時間不應該超過其他查詢技術與關鍵字比較的時間 2 計算出的雜湊位址分布均勻,這樣可以保證儲存空間的有效利用,並減少為處理衝突而耗費的時間。1.直接定址法 取關鍵字或關鍵字的某個線性函式值為雜湊位址。即h key key或h key a key b,其...