HASH演算法詳解

來源:互聯網
上載者:User

標籤:資料結構   結構   hash   鏈表   hashcode   

        做了幾年開發,一直不理解HASH演算法的原理,今天偶從百度知道上看到一個牛人神一樣的理解:

這個問題有點難度,不是很好說清楚。 我來做一個比喻吧。 我們有很多的小豬,每個的體重都不一樣,假設體重分布比較平均(我們考慮到公斤層級),我們按照體重來分,劃分成100個小豬圈。 然後把每個小豬,按照體重趕進各自的豬圈裡,記錄檔案。 好了,如果我們要找某個小豬怎麼辦呢?我們需要每個豬圈,每個小豬的比對嗎? 當然不需要了。 我們先看看要找的這個小豬的體重,然後就找到了對應的豬圈了。 在這個豬圈裡的小豬的數量就相對很少了。 我們在這個豬圈裡就可以相對快的找到我們要找到的那個小豬了。 對應於hash演算法。 就是按照hashcode分配不同的豬圈,將hashcode相同的豬放到一個豬圈裡。 尋找的時候,先找到hashcode對應的豬圈,然後在逐個比較裡面的小豬。 所以問題的關鍵就是建造多少個豬圈比較合適。 如果每個小豬的體重全部不同(考慮到毫克層級),每個都建一個豬圈,那麼我們可以最快速度的找到這頭豬。缺點就是,建造那麼多豬圈的費用有點太高了。 如果我們按照10公斤層級進行劃分,那麼建造的豬圈只有幾個吧,那麼每個圈裡的小豬就很多了。我們雖然可以很快的找到豬圈,但從這個豬圈裡逐個確定那頭小豬也是很累的。 所以,好的hashcode,可以根據實際情況,根據具體的需求,在時間成本(更多的豬圈,更快的速度)和空間本(更少的豬圈,更低的空間需求)之間平衡。

例子很貼切、也很淺顯易懂,但不夠全面。

          Hash,一般翻譯做“散列”,也有直接音譯為“雜湊”的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列演算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函數。

HASH主要用於資訊安全領域中密碼編譯演算法,它把一些不同長度的資訊轉化成雜亂的128位的編碼,這些編碼值叫做HASH值.也可以說,hash就是找到一種資料內容和資料存放地址之間的映射關係

例如字串 hello的雜湊演算法

char* value = "hello"; int key = (((((((27*(int)‘h‘+27)* (int)‘e‘) + 27) * (int)‘l‘) + 27) *(int)‘l‘ +27) * 27 ) + (int)‘o‘ ;。

        下邊再來說一下HASH表(雜湊表),雜湊表作為一種資料結構,有著查詢快、操作容易等特性,這點可以區別於數組和鏈表,數組的特點是:定址容易,插入和刪除困難;而鏈表的特點是:定址困難,插入和刪除容易。雜湊表彌補了二者的不足,雜湊表有多種不同的實現方法,為了讓大家更容易理解,這裡詳細介紹下一種比較常用的方法:拉鏈法,我們可以理解為用一個線性數組來做定址,數組中的元素為一個鏈表結構,用作元素集合(插入、刪除等),這樣便可以做到了定址、插入、刪除的快速控制項目,下面用一張圖表示下:

文章只是做一個簡單的介紹,讓大家更容易理解什麼是雜湊演算法,算是拋磚引玉吧,如果有不對的地方,歡迎大家指正。

HASH演算法詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.