原創:Data Structure 學習筆記 之一 hash

來源:互聯網
上載者:User

原創:Data Structure 學習筆記 之一 hash

-------------------

hash是通過某種編碼(hash函數或hashCode)將資料轉化為其儲存的地址的一種技術。

 

一般來說資料的編碼範圍太大,我們採用%等方法來壓縮資料的編碼到預期的範圍。同時由於範圍的縮小,不可避免的可能產生地址衝突。

 

通常有兩種方法來處理這種衝突:開放地址法和鏈地址法。當發生衝突時,前者在資料表中繼續尋找可用的地址;鏈地址法則是在資料表中的每一個地址中儲存一個鏈表,衝突的資料依次填入鏈表。java中常用的HashMap使用的hash方式就是鏈地址法。

 

開放地址法在資料衝突時需要在資料表中尋找一個新的可用地址,有幾個方式可以實現:線性探測、二次探測和再hash法。線性探測是在衝突的地址後依次的尋找可用地址。當資料的聚集度比較大的時候定址的效率會嚴重下降。二次探測是使用自然數的平方做步長來探測新的地址,相比線性探測效率會更高一些。針對這兩種方式都是使用確定的步長,再hash法使用一個新的hash函數對不同的資料產生不同的步長,從而避免資料的聚集。開放地址法對於各種操作的時間複雜度都是一致的,都需要同樣的定址過程。

 

鏈地址法值需要在hash對應的地址上將資料加入鏈表即可。鏈地址法對於聚集度大的資料的插入只需要0(1)的時間,這得益於鏈表。

 

 

對於聚集度大的資料,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.