資結筆記|雜湊表(Hash Table)

更新 發佈閱讀 3 分鐘

基本概念


  Hash其實是一個人名,他發明了hash algorithm(雜湊演算法)其主要的目的是提高搜尋的效率,透過將物件相關訊息映射成一個唯一的數值,這個值就是雜湊值。在電腦中會透過雜湊函數來處理這件事,將輸入的訊息轉換成數值,一個好的雜湊函數須包含以下特性

  1. 每個字串可以產生唯一的雜湊值
  2. 相同字串在不同時間輸入,也要得到相同的雜湊值
  3. 不論字串大小都可以產稱相同長度的雜湊值
raw-image

我們會用表單來表示"鍵(key)值(value)"的配對關係,在python又稱為字典(dict)的資料格式,用以下的表格舉例,用動物對應到體重

raw-image

上述資料結構只要當我們有key就可以得到value,我們又稱為雜湊表,透過key搜尋value的時間複雜度是O(1)。


雜湊表轉換成陣列


  本質上雜湊表也是一種陣列,所以我們可以將雜湊表轉成陣列索引

首先我們計算鍵(key)的雜湊值,以上面的表格為例輸入狗會得到雜湊值0023,以程式表達的方式如下

hashcode = hashfunction(key)

接著假設陣列的長度是n可以使用求餘數(mod)的方式計算鍵的索引值。

index = hashcode % n


雜湊表寫入


  假設有一個空的雜湊表,此陣列包含三個空間元素,如下圖


raw-image

因為狗對應的值為0023,除以3的餘數為2,因此要存入index為2的的位置

raw-image

雜湊碰撞與鏈結法


  你會發現有時候求索引值是會出現相同的餘數,像是上面的雞 -> 0026 % 3 = 2,就跟狗的索引值相同,遇到這種情況我們就稱為雜湊碰撞,這時候我們可以使用鏈結串列將資料接在前面的資料後,當所有的資料儲存至陣列,雜湊表就算完成了,見下圖


raw-image

除了用鏈結串列的方式解決雜湊碰撞,還可以用開放定址的方式,我們有機會再來補充。


搜尋雜湊表


  假設我們要搜尋狗的體重,先計算雜湊值得到0023,除以3取餘數得2,因此我們知道狗的資料放在陣列中索引2的位置,接著可以找到12000,得知狗的體重是12000公克。而假設我們要搜尋雞的體重,因為雞的索引值一樣是2,但索引2的第一個資料不是雞,我們就在索引2進行線性搜尋,就可以找到雞了。


雜湊表的規模與擴充


  假設要存放的資料太多,雜湊表的空間太少,就會導致碰撞的機率過高,使搜尋效率下降;反之若資料的數量太少,但建立了超大的雜湊表就會浪費非常多空間,造成記憶體浪費。因此跟大家介紹一個新的名詞叫做負載系數(loadfactor),其計算方式如下

負載系數 = 雜湊表的項目數 / 雜湊表的陣列容量

一般來說當負載系數 > 0.75雜湊表就需要擴充了。


雜湊表的效能分析


raw-image

和其他資料結構做分析

raw-image

在做搜尋的時候,如果跟二元樹相比,二元樹的時間複雜度為O(log n),但雜湊表的時間複雜度為O(1),所以效能差異非常大。


以上大家對雜湊表有沒有基本的概念拉,後續會再補充用python實作雜湊表,請各位讀者敬請期待。


竹林裡的呢喃:

哇凌晨3點11分快累鼠拉,跟大家分享達文西的一句話

如果今天我很努力地學習 過得很充實 則我晚上將睡得很安穩

要不是因為睡前發現今天好像沒有讀新東西,晚上感覺會睡不安穩,所以就硬著頭皮坐在電腦桌前坑吃吭哧的啃書加上輸出成文章了,希望這些文章可以幫助到以後學資結的人~




留言
avatar-img
資治通艦的沙龍
3會員
45內容數
人生中有的時候你會感知到,現在就是那個命運的分歧點,如果我不挽起袖子努力的話,我這一輩子大概就這樣了,所以我決定開始這個部落格,記錄我每天的努力,也希望可以分享學習的筆記與心得,大家可以一起交流學習。
資治通艦的沙龍的其他內容
2025/04/08
請使用 C 或 Java 語言寫一副程式,此副程式對一個長度為 10 的整數陣列 A[0:9],最多花費 15 次的數值比較運算,尋找陣列中的最小值及最大值,並分別存入 Min 及 Max。(注意:請加註解說明程式碼寫法) 【103.關務】
Thumbnail
2025/04/08
請使用 C 或 Java 語言寫一副程式,此副程式對一個長度為 10 的整數陣列 A[0:9],最多花費 15 次的數值比較運算,尋找陣列中的最小值及最大值,並分別存入 Min 及 Max。(注意:請加註解說明程式碼寫法) 【103.關務】
Thumbnail
2025/04/07
第 1 題 題目 設有一三維陣列(three dimensional matrix) A[1...u₁, 1...u₂, 1...u₃],請問其中一元素(element)A[i,j,k] 之儲存位置為何?其中 1 ≤ i ≤ u₁,1 ≤ j ≤ u₂,1 ≤ k ≤ u₃,請列出推導過程。
Thumbnail
2025/04/07
第 1 題 題目 設有一三維陣列(three dimensional matrix) A[1...u₁, 1...u₂, 1...u₃],請問其中一元素(element)A[i,j,k] 之儲存位置為何?其中 1 ≤ i ≤ u₁,1 ≤ j ≤ u₂,1 ≤ k ≤ u₃,請列出推導過程。
Thumbnail
2025/04/07
陣列和鏈結串列的比較以及陣列位址的計算方式
Thumbnail
2025/04/07
陣列和鏈結串列的比較以及陣列位址的計算方式
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
市場經驗拉長之後,很多投資人都會遇到同一個問題:不是方向看錯,而是部位太集中個股,常常跟大趨勢脫節。 早年的台股環境,中小股非常吃香,反而權值股不動,但QE量化寬鬆後,特別是疫情之後,後疫情時代,鈔票大量在股市走動,這些大資金只能往權值股走,因此早年小P的策略偏向中小型個股,但近年AI興起,高技術
Thumbnail
市場經驗拉長之後,很多投資人都會遇到同一個問題:不是方向看錯,而是部位太集中個股,常常跟大趨勢脫節。 早年的台股環境,中小股非常吃香,反而權值股不動,但QE量化寬鬆後,特別是疫情之後,後疫情時代,鈔票大量在股市走動,這些大資金只能往權值股走,因此早年小P的策略偏向中小型個股,但近年AI興起,高技術
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高效生活,幫助你找回更多自己的時間 歡迎來到 AL 的 Googlesheet 學習筆記系列文章。在這個系列中,我們將一步步介紹各種函數,並將它們應用於日常生活中,加速工作、提高效率。 今天要介紹的是使用 Index 、 Counta 函數尋找最後一列的資料!
Thumbnail
高效生活,幫助你找回更多自己的時間 歡迎來到 AL 的 Googlesheet 學習筆記系列文章。在這個系列中,我們將一步步介紹各種函數,並將它們應用於日常生活中,加速工作、提高效率。 今天要介紹的是使用 Index 、 Counta 函數尋找最後一列的資料!
Thumbnail
我捨棄了編號系統,解放三倍大腦思考能量
Thumbnail
我捨棄了編號系統,解放三倍大腦思考能量
Thumbnail
演算法映射化簡的核心觀念 在面對新題目的時候,除了重頭想一個新的演算法之外; 還有另一個方法,想看看有沒有核心觀念彼此相同的問題與演算法, 如果有,就可以把新的題目映射化簡到已知解法的問題,用已知的演算法去解開。 接著,我們會介紹幾個範例,並且使用映射化簡的技巧來解題,透過化
Thumbnail
演算法映射化簡的核心觀念 在面對新題目的時候,除了重頭想一個新的演算法之外; 還有另一個方法,想看看有沒有核心觀念彼此相同的問題與演算法, 如果有,就可以把新的題目映射化簡到已知解法的問題,用已知的演算法去解開。 接著,我們會介紹幾個範例,並且使用映射化簡的技巧來解題,透過化
Thumbnail
這一集我將說明,利用「工具羅盤」的概念,搭配先前提過的「原子筆記法」,而衍生的「白板筆記法」。
Thumbnail
這一集我將說明,利用「工具羅盤」的概念,搭配先前提過的「原子筆記法」,而衍生的「白板筆記法」。
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。
Thumbnail
我利用 Heptabase這套工具,參考了防彈筆記法、卡片筆記法的做法,同時結合 PARA、CODE、PDCA、GTD 的執行方式,發展出一套自己的「原子筆記」。
Thumbnail
我利用 Heptabase這套工具,參考了防彈筆記法、卡片筆記法的做法,同時結合 PARA、CODE、PDCA、GTD 的執行方式,發展出一套自己的「原子筆記」。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News