Hash演算法與雜湊表基礎演算法

2021-07-04 06:48:57 字數 1450 閱讀 8195

把乙個較大集合p對映到乙個較小集合q中,其中對映演算法位h,即q=h(p),每乙個p對應乙個q,乙個q可能對應多個p,這就是hash編碼的初步理解。其中雜湊表,可以認為是一種特殊的資料結構,有|q|個所謂的槽,儲存相應的q值,其中p中的元素出現,就在q中相對應的結果中進行記錄,對於不同p1,p2對應到同乙個槽時,即h(p1)=h(p2)=q1則,q1的槽對應乙個list,儲存p1、p2的值。乙個好的雜湊函式應該盡可能的將|p|個元素盡可能評價的分為|q|個槽中。幾個較為經典雜湊演算法如下:

除法雜湊法

其實就是取餘,h(p)=p mod m,其中m小於|q|的值,但不一定是|q|的值。使用該方法時,m盡量取乙個質數,因為如果m取2或者10的冪,相當於p中的最後幾位起作用,之前的幾位都荒廢了,而m取質數時,所有的元素,都起作用,得到結果可能更為分散。

乘法雜湊法h(

p)=⌊

m(pa

mod1

)⌋,其中a的取值是約等於(5

√−1)

/2=0.618……,而mod 1 就是取小數部分,距離說明p=123456,而|p|是0-232

之間的數,而|q|是0-214

之間的數,m即為214

,將a取成與(5

√−1)

/2最為接近的如s/

232的數,p*s=

76300∗2

32+17612864

,其中小數部分為

17612864/2

32 ,該數乘以m,即為

17612864/2

32−14 ,然後取整編碼為67。

全域雜湊

如果雜湊演算法確定,對於某乙個hash值q可能對應多個p,即集合pq

,如果總

是使用集

合 p_中的p來測試系統,則hash表起作用的只有q對應的那乙個鍊錶,從而起不到作用。而如果設計乙個雜湊函式簇,在執行時,隨機選擇乙個雜湊函式,這樣對應乙個p,不同的演算法,得到不同的q,因此就對於該系統就無法確定乙個集合pq

,來攻擊系統。但是當系統實際執行時,一單隨機選擇了雜湊演算法,則就不會改變,一直使用該演算法去初始化hash表,去檢索系統。

說白了,就是如果演算法固定,就可以得到集合pq

;而全域雜湊的演算法中存在隨機數,這樣會導致,無法得到pq

,但是系統執行時,一旦隨機選擇了雜湊函式,就一直使用該演算法執行。而我們無法知道該系統選擇的函式。使用《演算法導論》中的例子說明,即為: ha

,b(p

)=((

a∗p+

b)modt

)modm

其中,t是乙個預先設定的數,其中對於p中的所有元素,都落在[0,t-1]之間,m是編碼集合q的個數,zp

表示集合,z∗

p 表示集合。a和b是分別屬於zp

和z∗p

的隨機數,這樣不同的a,b選擇就構成乙個函式簇。

Hash雜湊演算法

hash演算法 雜湊演算法將任意長度的二進位制值對映為較短的固定長度的二進位制值,短的二進位制值稱為雜湊值。雜湊值是一段資料唯一且極其緊湊的數值表示形式。如果雜湊一段明文而且哪怕只更改該段落的乙個字母,隨後的雜湊都將產生不同的值。要找到雜湊為同乙個值的兩個不同的輸入,在計算上是不可能的,所以資料的雜...

hash演算法(雜湊)

hash 演算法 什麼hash 演算法 簡單地來講就是將字串轉化為乙個整數。它一般應用於字串的場景中。現在我們來講hash演算法。hash 公式 hash i hash i 1 base str i a 1 mod base的值是隨機的,意思就是你自己可以去選擇任意的數,但是按照經驗值表明,一般ba...

資料結構與演算法 雜湊表(hash)

雜湊表是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。給定表m,存在函式f key 對任意給定的關鍵字值key,代入函式後若能得到包含該關鍵字的記錄在表中的位址...