HASH

哈希

Hash,一般翻譯做散列、雜湊,或音譯為哈希,是把任意長度的輸入通過散列算法變換成固定長度的輸出,該輸出就是散列值。

這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間。

沖突/碰撞:不同的輸入可能會散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值。

特點/優(yōu)勢:

  1. 很難找到逆向規(guī)律
  2. 提高存儲空間的利用
  3. 提高數(shù)據(jù)的查詢效率
  4. 保障數(shù)據(jù)傳遞的安全性

常用哈希函數(shù)

  1. 直接尋址法:取關(guān)鍵字或關(guān)鍵字的某個線性函數(shù)值為散列地址。即H(key)=key或H(key) = a·key + b,其中a和b為常數(shù)
  2. 數(shù)字分析法:找出數(shù)字的規(guī)律,盡可能利用這些數(shù)據(jù)來構(gòu)造沖突幾率較低的散列地址。比如,生日的后幾位。
  3. 平方取中法:取關(guān)鍵字平方后的中間幾位作為散列地址。
  4. 折疊法:將關(guān)鍵字分割成位數(shù)相同的幾部分,最后一部分位數(shù)可以不同,然后取這幾部分的疊加和(去除進位)作為散列地址。
  5. 隨機數(shù)法:選擇一隨機函數(shù),取關(guān)鍵字作為隨機函數(shù)的種子生成隨機值作為散列地址,通常用于關(guān)鍵字長度不同的場合。
  6. 除留余數(shù)法:取關(guān)鍵字被某個不大于散列表表長m的數(shù)p除后所得的余數(shù)為散列地址。即 H(key) = key MOD p,p<=m。不僅可以對關(guān)鍵字直接取模,也可在折疊、平方取中等運算之后取模。對p的選擇很重要,一般取素數(shù)或m,若p選的不好,容易產(chǎn)生碰撞。

處理沖突的方法:

1.開放尋址法;這種方法也稱再散列法,其基本思想是:當(dāng)關(guān)鍵字key的哈希地址p=H(key)出現(xiàn)沖突時,以p為基礎(chǔ),產(chǎn)生另一個哈希地址p1,如果p1仍然沖突,再以p為基礎(chǔ),產(chǎn)生另一個哈希地址p2,…,直到找出一個不沖突的哈希地址pi ,將相應(yīng)元素存入其中。

線性探測再散列/二次探測再散列/偽隨機探測再散列

2. 再哈希法
這種方法是同時構(gòu)造多個不同的哈希函數(shù):
Hi=RH1(key) i=1,2,…,k
當(dāng)哈希地址Hi=RH1(key)發(fā)生沖突時,再計算Hi=RH2(key)……,直到?jīng)_突不再產(chǎn)生。這種方法不易產(chǎn)生聚集,但增加了計算時間

3. 鏈地址法(拉鏈法):這種方法的基本思想是將所有哈希地址為i的元素構(gòu)成一個稱為同義詞鏈的單鏈表,并將單鏈表的頭指針存在哈希表的第i個單元中,因而查找、插入和刪除主要在同義詞鏈中進行。鏈地址法適用于經(jīng)常進行插入和刪除的情況。

4. 建立一個公共溢出區(qū):這種方法的基本思想是:將哈希表分為基本表和溢出表兩部分,凡是和基本表發(fā)生沖突的元素,一律填入溢出表。

hash算法:

MD4、MD5、SHA-1及其他

散列表

(Hash table,也叫哈希表)是根據(jù)關(guān)鍵碼值(Key value)而直接進行訪問的數(shù)據(jù)結(jié)構(gòu)。也就是說,它通過把關(guān)鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數(shù)叫做散列函數(shù),存放記錄的數(shù)組叫做散列表

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、散列的概念 散列方法的主要思想是根據(jù)結(jié)點的關(guān)鍵碼值來確定其存儲地址:以關(guān)鍵碼值K為自變量,通過一定的函數(shù)關(guān)系h...
    SeanMa閱讀 64,795評論 1 30
  • 一、概述 根據(jù)設(shè)定的哈希函數(shù)H(key)和處理沖突的方法將一組關(guān)鍵字影像到一個有限的連續(xù)的地址集(區(qū)間)上,并以關(guān)...
    12313凱皇閱讀 17,158評論 0 3
  • 散列表,它是基于快速存取的角度設(shè)計的,也是一種典型的“空間換時間”的做法。顧名思義,該數(shù)據(jù)結(jié)構(gòu)可以理解為一個線性表...
    yeying12321閱讀 3,769評論 0 6
  • 什么是哈希表 哈希表是以 Key-Value 形式存儲的的數(shù)據(jù)結(jié)構(gòu),當(dāng)我們需要查找某個值,只需要輸入相應(yīng)的Key值...
    tanghomvee閱讀 580評論 2 1
  • 一場場秋雨過后的京城,愈加地冷了。人們常說一場秋雨一場寒,秋與冬便是這樣悄無聲息地在交替。 三月開春時那一窩小...
    無顏鬼閱讀 376評論 0 0

友情鏈接更多精彩內(nèi)容