構造雜湊函式

2021-06-20 17:42:31 字數 1322 閱讀 6921

一、雜湊函式的選擇有兩條標準:簡單和均勻。

簡單指雜湊函式的計算簡單快速;

均勻指對於關鍵字集合中的任一關鍵字,雜湊函式能以等概率將其對映到表空間的任何乙個位置上。也就是說,雜湊函式能將子集k隨機均勻地分布在表的位址集上,以使衝突最小化。

二、常用雜湊函式

為簡單起見,假定關鍵字是定義在自然數集合上。

(1)平方取中法

具體方法:先通過求關鍵字的平方值擴大相近數的差別,然後根據表長度取中間的幾位數作為雜湊函式值。又因為乙個乘積的中間幾位數和乘數的每一位都相關,所以由此產生的雜湊位址較為均勻。

【例】將一組關鍵字(0100,0110,1010,1001,0111)平方後得(0010000,0012100,1020100,1002001,0012321) 若取表長為1000,則可取中間的三位數作為雜湊位址集: (100,121,201,020,123)。

相應的雜湊函式用c#實現很簡單:

public

inthash(

intkey)

(2)除餘法

該方法是最為簡單常用的一種方法。它是以表長m來除關鍵字,取其餘數作為雜湊位址,即 h(key)=key%m

該方法的關鍵是選取m。選取的m應使得雜湊函式值盡可能與關鍵字的各位相關。m最好為素數。

【例】若選m是關鍵字的基數的冪次,則就等於是選擇關鍵字的最後若干位數字作為位址,而與高位無關。於是高位不同而低位相同的關鍵字均互為同義詞。

【例】若關鍵字是十進位制整數,其基為10,則當m=100時,159,259,359,…,等均互為同義詞。

(3)相乘取整法

該方法包括兩個步驟:首先用關鍵字key乘上某個常數a(0

該方法最大的優點是選取m不再像除餘法那樣關鍵。比如,完全可選擇它是2的整數次冪。雖然該方法對任何a的值都適用,但對某些值效果會更好。knuth建議選取

該函式的c#**為:

doublea =

0.6180339887

;intm =

2;public

inthash(

intkey) (

4)摺疊移位法

根據雜湊表長將關鍵字盡可能分成若干段,然後將這幾段的值相加,並將最高位的進製捨去,所得結果即為其雜湊位址。相加時有兩種方法,一種是順折,即把每一段中的各位值對其相加,稱之為移位法;另一種是對折,像折紙條一樣,把原來關鍵字中的數字按照劃分的中界向中間段摺疊,然後求和,稱之位摺疊法。

(5)隨機數法

選擇乙個隨機函式,取關鍵字的隨機函式值為它的雜湊位址,即h(key)=random(key) 其中random為偽隨機函式,但要保證函式值是在0到m-1之間。

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

除留餘數法 數字分析法 平方取中法 摺疊法 疊加法 隨機數法 構造雜湊函式的方法很多,實際工作中要根據不同的情況選擇合適的方法,總的原則是盡可能少的產生衝突。通常考慮的因素有關鍵字的長度和分布情況 雜湊值的範圍等。如 當關鍵字是整數型別時就可以用除留餘數法 如果關鍵字是小數型別,選擇隨機數法會比較好...

雜湊函式的構造方法

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

簡單的構造雜湊函式

除法雜湊法 最直觀的一種。公式 index value 16 求模其實是通過乙個除法運算得到的,所以叫除法雜湊法。平方雜湊法 求index是非常頻繁,而乘法的運算要比除法來得省時,可以考慮百除法換成乘法和位移操作。公式 index value value 28 value如果很大,value val...