常見hash演算法的原理

2021-06-10 05:28:37 字數 910 閱讀 3426

分類: 演算法和資料結構

2011-11-22 13:12

1579人閱讀收藏 

舉報雜湊表,它是基於快速訪問的角度設計的,也是一種典型的「空間換時間」的做法。顧名思義,該資料結構可以理解為乙個線性表,但是其中的元素不是緊密排列的,而是可能存在空隙。

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

比如我們儲存70個元素,但我們可能為這70個元素申請了100個元素的空間。70/100=0.7,這個數字稱為負載因子。我們之所以這樣做,也是為了「快速訪問」的目的。我們基於一種結果盡可能隨機平均分布的固定函式h為每個元素安排儲存位置,這樣就可以避免遍歷性質的線性搜尋,以達到快速訪問。但是由於此隨機性,也必然導致乙個問題就是衝突。所謂衝突,即兩個元素通過雜湊函式h得到的位址相同,那麼這兩個元素稱為「同義詞」。這類似於70個人去乙個有100個椅子的飯店吃飯。雜湊函式的計算結果是乙個儲存單位位址,每個儲存單位稱為「桶」。設乙個雜湊表有m個桶,則雜湊函式的值域應為[0,m-1]。

解決衝突是乙個複雜問題。衝突主要取決於:

(1)雜湊函式,乙個好的雜湊函式的值應盡可能平均分布。

(2)處理衝突方法。

(3)負載因子的大小。太大不一定就好,而且浪費空間嚴重,負載因子和雜湊函式是聯動的。

解決衝突的辦法:

(1)線性探查法:衝突後,線性向前試探,找到最近的乙個空位置。缺點是會出現堆積現象。訪問時,可能不是同義詞的詞也位於探查序列,影響效率。

(2)雙雜湊函式法:在位置d衝突後,再次使用另乙個雜湊函式產生乙個與雜湊表桶容量m互質的數c,依次試探(d+n*c)%m,使探查序列跳躍式分布。

常見的hash演算法及其原理

雜湊表和完美雜湊 這個部落格我更喜歡 簡單解釋 雜湊 hash 演算法,即雜湊函式。它是一種單向密碼體制,即它是乙個從明文到密文的不可逆的對映,只有加密過程,沒有解密過程。同時,雜湊函式可以將任意長度的輸入經過變化以後得到固定長度的輸出。雜湊函式的這種單向特徵和輸出資料長度固定的特徵使得它可以生成訊...

hash演算法原理及常見函式

hash,一般翻譯做 雜湊 也有直接音譯為 雜湊 的,就是把任意長度的輸入,通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。雜湊表,它是基於快速訪問的角度設計的,也是一種典型的 空間換時間 的做法。顧名思義,該資料結構可以理解為乙個線性表,但是其中的元素不是緊密排列的,而是可能存在空隙。雜湊...

經典的hash演算法 常見hash 雜湊演算法

計算理論中,沒有hash函式的說法,只有單向函式的說法。所謂的單向函式,是乙個複雜的定義,大家可以去看計算理論或者密碼學方面的資料。用 人 類 的語言描述單向函式就是 如果某個函式在給定輸入的時候,很容易計算出其結果來 而當給定結果的時候,很難計算出輸入來,這就是單項函式。各種加密函 數都可以被認為...