資料結構 雜湊表

2021-10-04 11:24:01 字數 1828 閱讀 4729

此篇文章只是記錄一下學習hash表的知識點,並不涉及**。
概念:雜湊儲存是一種由關鍵字本身決定其儲存位置的儲存結構

h(k)稱為雜湊函式,這種儲存結構成為雜湊表。

在查詢時,理想情況下時間複雜度為 o(1)

雜湊函式的特點:

輸入:可為不固定長度的值。

輸出:固定長度的值。

單向不可逆: 無法從輸出值反推到輸入值。

輸出值能反映輸入值大部分特稱,即使輸入值只有微笑的變化,輸出值也會完全不同。

例題:衝突

衝突是無法避免,構造好的雜湊函式的方法,可減少衝突,應有較好的隨機性。

1.直接定址法

2.除留餘數法

3.平方取中法

4.摺疊法

5數值分析法

1.直接定址法

直接定址法是一關鍵字k本身或者關鍵字加上某個數值常量c作為雜湊位址的方法。

這種雜湊函式計算簡單,並且不可能有衝突發生,當關鍵字分布基本連續時,可直接用直接定址法的雜湊函式。若關鍵字不連續將造成記憶體單元大量浪費。

2.除留餘數法

這是一種簡單常見的構造方法。這種方法的關鍵是選擇好雜湊表的長度m。使得資料集合中的每乙個關鍵字通過該函式轉化後對映到雜湊表的任意位址上的概率相等。研究表明,在m取值為素數(質數)時,衝突的可能性較少。

3.平方取中法。

取關鍵字平方後的中間幾位作為雜湊函式的位址(若超出範圍時,可再取模)。

摺疊法

這種方法適合在關鍵字的位數比較多,而位址區間較少的情況下。

將關鍵字分割成位數相同的幾部分。然後將這幾部分的疊加和作為雜湊位址。(若超出範圍時,可再取模)。

5.數值分析法

若事先知道所有可能的關鍵字取值的時候,可通過對這些關鍵字進行分析,發現其變化規律,構造出相應的函式。

常用的處理衝突的方法有開放定址法鏈位址法兩大類。

用開放定址法處理衝突就是當衝突發生時,形成乙個位址序列。沿著這個序列逐個探測,直到找出乙個"空"的開放位址。將發生衝突的關鍵字值存放到該位址去。

其中h(k)為雜湊函式,m為雜湊表長,d為增量函式,d(i) = d1,d2…dn。

1).線性探測法

線性探測法是從發生衝突的位址(設為d)開始,依次探查d+1,d+2,…m-1(當打包表尾m-1時,又從0開始探查),直至到找到乙個空閒的位置來存放衝突處的關鍵字。

d0 = h(k)

di = (di-1+1) % m (1 ≤ i ≤ m-1)

利用線性探查法處理衝突容易造成關鍵字的 「

問題。這是因為當連續n個單元被占用後,在雜湊到這些單元上的關鍵字和直接雜湊到後面乙個空閒的單元上的關鍵字都要占用這個空閒單元,致使該空閒單元很容易被占用,從而發生非同以衝突。造成平均查詢長度變長。

(2).平方探查法

1.裝填因子a(load factory)

a = 儲存的個數 / 雜湊表的大小。

a的值在0.6~0.9時產生的衝突最小

2.雜湊函式

好的雜湊函式計算出來的雜湊值會均勻分布在雜湊表的整個位址區間。從而減少衝突。

3.處理衝突的方法(與解決衝突的雜湊衝突函式)

資料結構 雜湊表

1.雜湊表的定義 元素的儲存位置和它的關鍵碼之間建立乙個確定的對應關係h,使得每個關鍵碼key和唯一的儲存位置h key 相對應。在查詢時,根據這個確定的對應關係找到給定值k的對映h k 若查詢集合中存在這個記錄,則必定在h k 的位置上,這種查詢技術稱為雜湊技術。採用雜湊技術將記錄儲存在一塊連續的...

資料結構 雜湊表

雜湊表的定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把 關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的 速度。這個對映函式叫做雜湊函式,存放 記錄的陣列叫做雜湊表。雜湊函式的析構方法 餘數法 取關鍵字被某個不大於雜...

資料結構 雜湊表

3 雜湊函式 數字分析法 根據關鍵碼在各個位上的分布情況,選取分布比較均勻的若干位組成雜湊位址。適用情況 能預先估計出全部關鍵碼的每一位上各種數字出現的頻度,不同的關鍵碼集合需要重新分析。4 雜湊函式 平方取中法 對關鍵碼平方後,按照雜湊表大小,取中間的若干位作為雜湊位址 平方後擷取 適用情況 實現...