詳解雜湊演算法 雜湊表

2021-07-06 06:43:08 字數 1652 閱讀 2322

何為雜湊演算法

雜湊演算法又稱為雜湊技術(hash技術),雜湊演算法將任意長度的二進位制值對映為較短的固定長度的二進位制值,這個小的二進位制值稱為雜湊值。雜湊值是一段資料唯一且極其緊湊的數值表示形式。如果雜湊一段明文而且哪怕只更改該段落的乙個字母,隨後的雜湊都將產生不同的值。要找到雜湊為同乙個值的兩個不同的輸入,在計算上是不可能的,所以資料的雜湊值可以檢驗資料的完整性。一般用於快速查詢和加密演算法。

換種說法:

針對不同的關鍵字值對映到位置的函式h稱為雜湊函式(hash function),而這樣建立的表稱為雜湊表(hash list)

常見雜湊函式

2.1除留餘數法

函式形式如下:h(key) = key % m; 

key是關鍵字,m是雜湊表的大小。m的選擇十分重要,如果m選擇不當,在某些選擇關鍵字的方式下會造成嚴重的衝突。例如:

若 m = 2^k,則h(key) = key % m的值僅依賴於最後k個位元。如果key是十進位制數,則m應避免取10的冪次。多數情況下,選擇乙個不超過m的素數p(素數的定義),令雜湊函式為h(key)=key%p,才會取得良好的效果。

2.2平方取中法(mid-square)

在雜湊表應用中廣泛採用平方取中雜湊函式。該方法首先把key平方,然後取(key)^2的中間部分作為h(key)的值。中間部分的長度取決於m的大小。

例如:設關鍵字的內部碼由八進位制數表示,雜湊表長度為3位8進製數。

2.3摺疊法(folding)

摺疊法是把關鍵字值自左向右分成位數相等的幾部分,每一部分的位數應與雜湊表位址的位數相同,只有最後一部分的位數可以短一些。把這些部分的資料疊加起來,就可以得到關鍵字值得雜湊位址。

有兩種疊加方法:

(1)移位法(shift floding):把各部分的最後一位對齊相加。

(2)分界法(floding at the boudaries):沿各部分的分界來回摺疊,然後對其相加。

例如:設關鍵字值為 key = 12320324111220

2.4數字分析法

數字分析法被用於乙個事先已知關鍵字值分布的靜態檔案中,設關鍵字值是n位數,每位的基數是r。使用此方法,首先應列舉出關鍵字值集合中的每個關鍵字值,分析每位數字的分布情況。一般來說,這r個數字在各位出現的頻率不一定相同,可能在某些位上分布不均勻。

雜湊衝突詳解

雜湊表(雜湊表)原理詳解

雜湊表 hash table,也叫雜湊表 是 根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做 雜湊函式 存放記錄的陣列叫做 雜湊表。或者 把任意長度的輸入 又叫做預對映,pre image 通過雜...

雜湊表(雜湊表)原理詳解

t什麼是雜湊表?雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。記錄的儲存位置 f 關鍵字 這裡的對應關係f稱為雜湊函...

詳解雜湊表(雜湊表)原理

場景 在我們編寫基本的c語言 的時候,比如我們需要輸入乙個變數,然後對變數進行操作,最後返回乙個結果,那麼在我們對變數進行操作的時候,我們的編譯器就會對你的變數進行檢查,他會看你的變數是否定義 定義格式是否正確等。這裡就會存在查詢問題,如果我們採用二叉查詢樹等查詢樹來進行查詢的話會發現由於需要使樹保...