雜湊表的簡單介紹

2021-08-20 15:24:45 字數 1220 閱讀 9894

雜湊表的概念

雜湊表(hash table)也叫雜湊表,是根據鍵碼值(key value)而直接進行訪問的資料結構。它通過把關鍵碼值對映到雜湊表中的乙個位置來訪問記錄,以加快查詢速度。這個對映函式就叫做雜湊函式,存放記錄的陣列的雜湊表。

雜湊表查詢的時間複雜度
雜湊表儲存的是鍵值對,其查詢的時間複雜度與元素數量的多少無關,雜湊表在查詢元素的時候通過計算雜湊碼值來定位元素的位置從而直接訪問元素的,因此雜湊表查詢的時間複雜度為o(1)。

當向雜湊表
插入元素時:根據待插入元素的關鍵碼,計算出該元素的儲存位置,並進行存放。

查詢元素時:對元素的關鍵碼進行同樣的計算,把求得的函式值當做元素的儲存位置,

在結構中,按此位置取元素比較,若關鍵碼相等,則搜尋成功。

常見的雜湊函式

雜湊衝突

即不同關鍵字通過相同雜湊哈數計算出相同的雜湊位址,該種現象稱為雜湊衝突或雜湊碰撞。把具有不同關鍵碼而具有相同雜湊位址的資料元素稱為「同義詞」。

那麼我們如何解決雜湊衝突呢?

常用的解決雜湊衝突的方法有兩種:開雜湊法閉雜湊法

閉雜湊常用的探測方法有 :線性探測、二測談探測等。

負載因子:

雜湊表的負載因子定義為:a = 填入表中的元素個數 / 雜湊表長度對於開放定址法,

雜湊荷載因子是重要的影響因素,應該嚴格限制在0.7~0.8,超過0.8,cpu緩衝不命

中按指數曲線上公升。

開雜湊

開雜湊法又叫鏈位址法(開鏈法)。

開雜湊法:首先對關鍵碼集合用雜湊函式計算雜湊位址,具有相同位址的關鍵碼歸於同一子集合,每乙個子集合稱為乙個桶,各個桶中的元素通過乙個單鏈表鏈結起來,各鍊錶的頭結點儲存在雜湊表中。

通常,每個桶對應的鍊錶結點都很少,將n個關鍵碼通過某乙個雜湊函式,存放到雜湊表中的m個桶中,那麼每乙個桶中煉表的平均長度為 n / m 。以搜尋平均長度為 n / m 的鍊錶代替了搜尋長度為 n 的順序表,搜尋效率快的多。

接下來我們將實現一下開雜湊以及閉雜湊,具體**請參考我的另一篇部落格:

雜湊表具體實現

雜湊表介紹

在順序結構及樹中,元素關鍵碼與其儲存位置之間沒有對應關係,所以查詢的時候要進行多次的比較,有沒有一種搜尋方法,可以不經過任何比較,一次直接獲得想要搜尋的元素。構造一種儲存結構,通過某種函式 hashfunc 使元素的儲存位置與它的關鍵碼之間能夠建立一一對映的關係,根據這種想法構造了hash表。當向該...

雜湊表的簡單實現

下面這個雜湊表的實現來自k r,很經典。在其他場景中遇到的實現更複雜,基本原理不變,只是在hash演算法,或者在快速查詢上做了優化。include include 具有相同hash值構成的鍊錶 struct nlist define hashsize 101 桶的大小 static struct n...

雜湊表的簡單理解

雜湊表具有查詢速度快,效率高的優點,是基於陣列,特定情況下結合鍊錶 紅黑樹 的資料結構。設計思路 設想用陣列儲存英文本母a zzzzzzzz的字串,這樣的話總共有26 8種結果,而如果想要查詢字母absdaw就只能通過遍歷陣列,非常影響速度。靈感一閃而過,如果能把每個字母與陣列下標繫結不就能快速查詢...