iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0

雜湊法Hahing)是一種資料存取技術,通過將資料映射到一個特定的地址,實現快速的查找、插入和刪除操作。其核心原理是使用一個雜湊函數(Hash Function)來計算資料的雜湊值(Hash Value),一般常見的雜湊函數有除法、平方後取中間值法、摺疊法及數位分析法,得到雜湊值後會根據這個值將資料存放到雜湊表(Hash Table)中的某個位置。

過程中難免會有碰撞(Collision)的情況發生,即多個資料被映射到同一個位置。系統可以通過各種碰撞解決方法來處理,如線性探測法、平方探測法、再雜湊法鏈結串列法等。如此一來,儘管發生了碰撞,但可以通過有效的碰撞處理來保證搜尋效率。

範例說明

  • 問題:假設雜湊函數為 h ( key ) = key mod 5,請將12, 65, 70, 18共4個值放入長度為 5 的陣列中。若過程中發生碰撞,請使用線性探測法來解決碰撞問題。
  • 補充:線性探測法在兩個或多個資料被映射到同一個位置發生碰撞時,該方法會沿著陣列依次往後查找,直到找到找到一個空位來儲存資料。
  • 解法:
    https://ithelp.ithome.com.tw/upload/images/20240928/201687800vOLbDc7TS.png

優點:

  • 高效查找速度:在理想情況下,雜湊表能在 O(1) 的時間內完成資料查找,相比於線性查找能顯著提升性能。
  • 插入與刪除操作簡單:通過雜湊函數,可以快速確定資料的存放位置,從而有效完成資料的插入與刪除。
  • 適合大規模資料集:對於需要快速查找和頻繁操作的系統,雜湊法能顯著提升性能,適合用於處理大規模資料集。

缺點:

  • 碰撞難以避免:即使有設計良好的雜湊函數,隨著資料量增加,碰撞仍然難以完全避免,這會影響查找效率。
  • 空間浪費:為了減少碰撞的發生,通常需要比實際資料更多的空間,導致部分空間未被使用,造成資源浪費。
  • 依賴雜湊函數的質量:雜湊函數的好壞會直接影響系統的性能。如果雜湊函數產生的值分佈不均勻,會增加碰撞機率,進而降低效率。

參考資料:

  1. 蔡明志 (2017)。《資料結構:使用C語言 (第5版)》。臺北:全華圖書。
  2. 吳燦銘、胡昭民 (2018)。《圖解資料結構:使用Java》。新北:博碩文化。

上一篇
Day13 Graph圖形 - 題目3:994. Rotting Oranges
下一篇
Day15 Hashing雜湊法 - 題目1:49. Group Anagrams
系列文
Java刷題A:Leetcode Top 100 Liked26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言