從哈希函數、哈希衝突、開散列出發,一文告訴你哈希思想與哈希表構造到底是什麼!

2021-02-25 區塊鏈大本營

作者 | 代號[K]

責編 | Carol

來源 | CSDN 博客

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

今天我們就一起來探索一下,哈希最底層的奧秘。

哈希概念構造一種儲存結構,通過某種函數,使得其元素的儲存位置與他的關鍵碼之間能夠建立一一映射關係,那麼在查找時通過該函數很快找到相應元素。簡言之,就是設定某一固定函數(hashFunc),通過此函數來使插入元素的值與元素位置相對應,往後我們需要查找此元素時就可以通過此函數(hashFunc)找到該值。

哈希函數

散列函數(英語:Hash function)又稱散列算法、哈希函數,是一種從任何一種數據中創建小的數字「指紋」的方法。散列函數把消息或數據壓縮成摘要,使得數據量變小,將數據的格式固定下來。

該函數將數據打亂混合,重新創建一個叫做散列值(hash values,hash codes,hash sums,或hashes)的指紋。散列值通常用一個短的隨機字母和數字組成的字符串來代表。

哈希函數使得計算出來的地址均勻分布在整個空間。

插入及搜索元素根據待插入元素的關鍵碼,根據哈希函數計算出其存儲位置。例: 現有 1 ,3,4,5,6,9幾個數進行儲存,將n%10求模運算的結果作為哈希地址進行元素插入。

若想查找某一元素時,則只需要對查找元素進行哈希函數運算,得到其存放地址,就能找到該元素。

哈希衝突

當出現插入一個元素,其根據哈希函數計算出的地址,已經被其他元素佔用的情況稱為哈希衝突。

為了能更好的識別當前位置是否被佔用,我們需要對每個位置進行標記

enum state{EMPTY,FULL,DELETE};

注意:如果我們要刪除某一元素時,不能將其直接刪除,如果直接刪除,會對當前結構產生影響,導致其他元素的搜索出錯,所以當我們要刪除一個元素時,需要將其標記為刪除,而非空。

開散列

開散列又稱鏈地址法,首先對關鍵碼集合用哈希函數計算哈希地址,當具有相同地址的關鍵碼時,將所有同一地址的元素,通過單鍊表的形式連結起來,而各鍊表的頭結點存儲在哈希表中。

這下,你該了解哈希的思想和哈希表構造了吧?歡迎在評論區和我們分享你的想法!

《原力計劃【第二季】- 學習力挑戰》正式開始!
即日起至 3月21日,千萬流量支持原創作者,更有專屬【勳章】等你來挑戰

相關焦點

  • 人們常說的哈希(Hash)到底是什麼?
    了解過區塊鏈的朋友,一定聽過「哈希」這一詞彙,然而對哈希的概念又極其的模糊,那麼哈希是什麼呢?Hash一般被翻譯成「散列」,也可直接音譯為「哈希」,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。
  • SHA-256、MD-5……哈希散列函數這些原理你懂了嗎?
    為什麼要使用哈希函數哈希函數被廣泛應用於網際網路的各個方面,主要用於安全存儲密碼、查找備份記錄、快速存儲和檢索數據等等。例如,Qvault使用哈希散列將主密碼擴展為私人加密密鑰。(Qvault:https://qvault.io/)用途列表清單詳見: https://en.wikipedia.or/wiki/Hash_function#Uses本文將重點介紹哈希函數的幾個重要特性,也可以說是其最重要的特性:哈希函數確定性地加擾數據;無論輸入是什麼,哈希函數的輸出大小始終相同;無法從加擾的數據中檢索原始數據(單向函數);
  • 10分鐘了解一致性哈希算法,全網(小區區域網)(建議收藏)
    很多同學應該都知道什麼是哈希函數,在後端面試和開發中會遇到「一致性哈希」,那麼什麼是一致性哈希呢?名字聽起來很厲害的樣子,其實原理並不複雜,這篇文章帶你徹底搞懂一致性哈希!進入主題前,先來一場緊張刺激的模擬面試吧。模擬面試面試官:看你簡歷上寫參與了一個大型項目,用到了分布式緩存集群,那你說說你們是怎麼做緩存負載均衡?
  • 什麼是一致性哈希算法
    參考這裡:blog.csdn.net/cywosp/article/details/233971793,一致性哈希的原理由於一般的哈希函數返回一個int(32bit)型的hashCode。因此,可以將該哈希函數能夠返回的hashCode表示成一個範圍為0---(2^32)-1 環。
  • 機器學習時代的哈希算法,將如何更高效地索引數據
    人類為索引創造了許多策略,我們在本文討論了歷史上最多產的數據結構之一,並且恰好是一種索引結構的哈希表。什麼是哈希表初看起來,哈希表是基於哈希函數的簡單數據結構,我們有許多種行為不同並且被用於不同目的的哈希函數。在接下來的部分中,我們將只描述哈希表中使用的哈希函數,而不對加密哈希函數、校驗和或任何其他類型的哈希函數展開討論。
  • 一口氣講透一致性哈希(Hash),助力「碼農變身」
    簡而言之,一致性哈希(Consistent Hash)是為了解決由於分布式系統中節點的增加或減少而帶來的大量失效問題,它可以有效地降低這種失效影響,從而提高分布式系統的性能和可用性。什麼是Hash在深入探討之前,我們先了解下什麼是hash:哈希(hash)簡單理解就是將任意長度的輸入通過散列算法轉換成固定長度的輸出,這個輸出一般稱之為散列碼或哈希值。
  • Comunion 區塊鏈深度學習系列|什麼是哈希
    提到 SHA-256,大家可能會想一下我們前文提到的問題:中本聰為什麼選擇用SHA-266,而不是其他的哈希算法呢?剛才我們也說過 SHA 家族的成長是按照時間順序來的,當中本聰使用這個算法是在2008年,那個時候 SHA-2 家族裡面的算法在當時是比較盛行的,雖然當時 SHA-3 也出來了,但是還不太成熟。
  • 哈達瑪矩陣指導下的在線哈希學習新方法
    而視覺哈希編碼技術逐漸成為實現相似性檢索的有效途徑。近日,廈門大學紀榮嶸關於在線哈希學習新方法的論文被發表在 IJCV 上,在論文中紀教授引入哈達瑪矩陣指導哈希函數的學習,即吸取了傳統在線哈希方法的優點,也最大程度上降低了精度損失。另外,對比當前最先進的七種技術,引入哈達瑪矩陣的在線哈希學習都有一定程度的性能提高。
  • 她任教山東大學,後被清華聘請,破解國際通用哈希函數而出名
    潘承洞曾和潘承彪合著了《哥德巴赫猜想》是關於這一數學理論猜想的又一力作,受到廣泛關注。由此可見,王小雲的求學生涯一定收穫累累。1987年,王小雲成功考到山大的研究生,跟隨潘承洞學習。一年多以後,潘承洞發現王小雲更擅長密碼學方向的研究,建議她轉攻密碼學。
  • 哈希表:其實需要哈希的地方都能找到map的身影
    四數之和,第15題.三數之和 並不合適使用哈希法」,因為三數之和和四數之和這兩道題目使用哈希法在不超時的情況下做到對結果去重是很困難的,很有多細節需要處理。如果感覺這裡的文章對你有幫助,趕緊給「代碼隨想錄」加一個星標吧,方便第一時間閱讀文章。每天8:35準時推送一道經典算法題目,助你輕鬆學習算法!
  • 受果蠅啟發的哈希算法!用「生物學上合理的」突觸可塑性規則生成...
    這個算法的靈感來自於果蠅的嗅覺迴路,它可以產生哈希碼——物體的數字表示——其性能優於經典算法。不幸的是,由於FlyHash使用隨機投影,它無法從數據中學習。 為了克服這一限制,普林斯頓大學、聖地牙哥大學、IBM Research和MIT-IBM Watson AI實驗室的研究人員開發了BioHash,它應用「局部」和「生物學上合理的」突觸可塑性規則來生成hash碼。他們說,它比之前發布的各種哈希方法的基準測試都要好,而且它可以生成對相似度搜索有用的二進位表示。
  • 哈希算法、愛因斯坦求和約定,這是2020年的注意力機制
    本文從原 Multi-head Attention 出發,探索 Reformer 如何用哈希算法大量降低顯存需求,探索 Talking-Head 如何強化全注意力機制的表徵能力。多頭注意力:開始的地方Transformer 因在大型預訓練語言模型中的優秀性能而被世人所熟知。這一類模型已廣泛應用於多種預訓練語言模型中,如 BERT、GPT-2 等。
  • 哈希表:解決了兩數之和,那麼能解決三數之和麼?
    ❝用哈希表解決了兩數之和,那麼三數之和呢?❞第15題. 三數之和給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。
  • 哈希公司新品發布——Eclox TM可攜式水質毒性分析儀
    為滿足環保、衛生疾控以及自來水行業近年來,尤其是自5.12地震以來,日益增強的對可攜式毒性測試儀的需求,美國哈希公司在EcloTM x化學發光法可攜式水質毒性分析儀基礎上
  • AAAI 2018 | 從哈希到CNN:中科院自動化所提出高精度&低功耗訓練方法
    [1],揭示了哈希與二值權重的神經網絡之間的緊密關係,表明了網絡模型的參數二值化問題可以轉化為哈希學習問題,從而大幅提高了二值化深度神經網絡模型的性能,使其能在資源受限場景下能兼顧性能和功耗。自動化所程健研究員團隊的胡慶浩等人最近提出了一種基於哈希的二值網絡訓練方法,揭示了保持內積哈希(Innerproduct Preserving Hashing)和二值權重網絡之間的緊密關係,表明了網絡參數二值化本質上可以轉化為哈希問題。
  • 「新」動時刻, 讓你心中的哈希最強新品C位出道
    「新」動時刻, 讓你心中的哈希最強新品C位出道Original 哈希公司 過去一年裡,哈希研發團隊也不斷推陳出新,為用戶們帶來多款新品儀器、試劑及解決方案。一同觀看哈希新產品們如何在舞臺上綻放光彩,最為重要的是作為評委的您,會為哪位學員轉身?為TA投出您關鍵一票,讓你pick的新品C位出道,更有機會贏得精彩好禮!
  • 那是你還不懂這些密碼儲存的操作
    更好的方法是使用單向加密哈希函數。散列函數在輸入和輸出之間提供多對一映射,實際上不可能反轉輸出。好的加密哈希函數具有較少的衝突(即,對於函數的不同輸入值,很難獲得相同的輸出)。由於鴿洞原理,無法完全避免碰撞。對於哈希密碼,我們可以假設哈希函數將生成唯一的輸出,即對於沒有兩個不同的密碼,我們將獲得相同的哈希值。一些流行的加密哈希函數是MD5和SHA1。
  • 哈希可攜式水質分析儀器為重慶三峽庫區首艘水質監測船保駕護航
    重慶環保局選用哈希可攜式水質分析儀器系列用於庫區江面採樣和應急水質分析。哈希可攜式水質分析儀器系列不僅適用於野外各種環境的水質測試要求,也適用於突發事件的快速水質檢測及實驗室內常規水參數的測量,使用戶以較小的投入就可滿足水質測試的需求。
  • 哈希水質分析,為上海10萬人口率先喝上高品質直飲水嚴把質量關
    《上海城市總體規劃(2017-2035)》提出,「至2035年,全市供水水質達到國際先進標準,滿足直飲需求」,為早日實現這一目標,由17家單位聯合開展科技攻關的國家「十三五」水專項《太浦河金澤水源地水質安全保障綜合示範項目》。5個子課題中的關鍵課題之一「上海首個高品質飲用水示範項目」現已成效初顯,試驗項目的納濾水廠已併網通水。