4 雜湊函式設計 除留餘數法

2021-07-09 19:15:07 字數 836 閱讀 5803



除留餘數法介紹

除留餘數法此方法為最常用的構造雜湊函式方法。對於雜湊表長為m的雜湊函式公式為:

f( key ) = key mod p ( p ≤ m )

mod是取模(求餘數)的意思。事實上,這方法不僅可以對關鍵字直接取模,也可在摺疊、平方取中後再取模。

乙個例子

有乙個關鍵字,它有12個記錄,現在我們要針對它設計乙個雜湊表。如果採用除留餘數法,那麼可以先嘗試將雜湊函式設計為f(key) = key mod 12的方法。比如29 mod 12 = 5,所以它儲存在下標為5的位置。

不過這也是存在衝突的可能的,因為12 = 2×6 = 3×4。如果關鍵字中有像18(3×6)、30(5×6)、42(7×6)等數字,它們的餘數都為6,這就和78所對應的下標位置衝突了。

但是我們如果不選用p=12來做除留餘數法,而選用p=ll,則結果如下:

這個時候就只有12和144有衝突,相對來說,就要好很多了。

如何合理選取p值

使用除留餘數法的乙個經驗是,若雜湊表表長為m,通常p為小於或等於表長(最好接近m)的最小質數或不包含小於20質因子的合數。

雜湊函式(雜湊函式,Hash Function)

說明 雜湊的概念屬於查詢,它不以關鍵字的比較為基本操作,採用直接定址技術。在理想情況下,查詢的期望時間為o 1 簡單的說,hash函式就是把任意長的輸入字串變化成固定長的輸出字串的一種函式。輸出字串的長度稱為hash函式的位數。下圖 於維基百科 雜湊函式把訊息或資料壓縮成摘要,使得資料量變小,將資料...

雜湊函式 雜湊函式 演算法

常用字串雜湊函式有bkdrhash,aphash,djbhash,jshash,rshash,sdbmhash,pjwhash,elfhash等等。c 實現 include define m 249997 define m1 1000003 define m2 10000019 大素數 using ...

什麼是雜湊演算法 雜湊函式 雜湊函式?

舉個例子,比如這裡有一萬首歌,給你一首新的歌x,要求你確認這首歌是否在那一萬首歌之內。無疑,將一萬首歌乙個乙個比對非常慢。但如果存在一種方式,能將一萬首歌的每首資料濃縮到乙個數字 稱為雜湊碼 中,於是得到一萬個數字,那麼用同樣的演算法計算新的歌x的編碼,看看歌x的編碼是否在之前那一萬個數字中,就能知...