雜湊表詳解 構建 hash衝突 查詢

2021-09-25 15:37:59 字數 2882 閱讀 1713

一、基本概念:

根據設定的雜湊函式以及處理衝突的方法將查詢表中各資料元素儲存在一段有限的連續空間中,即得雜湊表,也稱雜湊表。

二、構造雜湊函式的基本方法

1) 直接定址法

取關鍵字或關鍵字的某個線性函式值為雜湊位址。

即 f(key) = key 或 f(key) = a*key + b,其中a和b為常數。

eg:以人口統計表中的年齡直接作為儲存位址

2) 除留餘數法

取關鍵字被某個不大於雜湊表長度 m 的數 p 求餘,得到的作為雜湊位址。

即 f(key) = key % p, p < m。這是最為常見的一種雜湊演算法。

eg:

若關鍵字是r進製數,且預知全部可能出現的關鍵字值,則可取關鍵字中若干位構成雜湊位址 盡可能取分布均勻的,不發生衝突的位置

eg:

關鍵字集合:

則可以取4567中任意兩位作為雜湊位址,假設取45兩位

4) 平方取中法

先計算出關鍵字值的平方,然後取平方值中間幾位作為雜湊位址。

隨機分布的關鍵字,得到的雜湊位址也是隨機分布的。

5)摺疊法

圖書編號:0-442-20586-4 每四位一折,可得三段,再將各部分按最低位對齊後相加並捨去進製,即得對應的雜湊位址,5864+4220+04=10088,捨去進製1,則書放在0088(88)的位址上

eg2:間接疊加:

處理衝突指對於乙個待插入雜湊表的資料元素,若按給定的雜湊函式求得的雜湊位址已被占用,則按規則求下乙個雜湊位址,如此重複,直至找到乙個可用的位址以儲存該元素。

常見的雜湊衝突解決辦法有兩種,開放位址法和鏈位址法。

1、開放位址法

開發位址法的做法是,當衝突發生時,使用某種探測演算法在雜湊表中尋找下乙個空的雜湊位址,只要雜湊表足夠大,空的雜湊位址總能找到。按照探測序列的方法,一般將開放位址法區分為線性探查法、二次探查法、雙重雜湊法等。

方法

令fi=(f(key)+di) % m ,i=1,2,…m-1,其中f(key)為雜湊函式,m為雜湊表長,di為增量系列

若取di=1,2,3,…,m-1,則稱線性探測再雜湊;

若取di=12,-12,22,-22,…,±k^2,則稱二次探測再雜湊;

若取di=偽隨機數系列,則稱偽隨機探測再雜湊;

eg1:設有一組關鍵字:67,84,18,26,34,28,雜湊函式為f(key)=key%7,則雜湊函式的儲存如下:

有衝突時:fi=(f(key)+di)%7;

eg2:關鍵字集合:19,01,23,14,55,68,11,82,36,

雜湊函式:f(key)=key%11

有衝突時:fi=(f(key)+di)%7;

若採用線性探測再雜湊處理衝突 di=1,2,3,…,m-1

若採用二次線性探測再雜湊處理衝突 di=12,-12,22,-22,…,±k^2

2、鏈位址法

將所有按給定的雜湊函式求得的雜湊位址相同的關鍵字儲存在同一線性表中,且使鍊錶按關鍵字有序

eg:關鍵字集合:67,84,18,26,34,28

雜湊函式:f(key)=key%7

有衝突時:在對應鍊錶中插入新結點

3.公共溢位區

若關鍵字所對應的雜湊位址已被占用,則儲存到公共溢位區中

eg:關鍵字集合:67,84,18,26,34,28

雜湊函式:f(key)=key%7

有衝突時:儲存到公共溢位區

四、在雜湊表中查詢元素

方法:

在雜湊表中查詢資料元素的過程與資料元素插入雜湊表的過程基本一致,即:

1.根據待查關鍵字,按給定的雜湊函式,求雜湊位址;

2.若該位址上五資料元素,則查詢失敗;

3.若該位址上有資料元素,則進行關鍵字值間的比較;

若相等,則查詢成功;

若不相等,則按衝突處理方法求下一可能的儲存位置。

eg:雜湊函式

雜湊函式:f(key)=key%7

有衝突時:fi=(f(key)+di)%7; 其中di=1,2,3,4,5,6

雖然雜湊表在關鍵之和儲存位置之間建立了映像,但由於衝突的存在,查詢時仍需進行關鍵字之間的比較,因此仍以查詢成功時的平均查詢長度和查詢不成功時的比較次數作為衡量查詢效率的依據。

hash表(雜湊表)詳解

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

Hash 表詳解(雜湊表)

雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。給定表m,存在函式f key 對任意給定的關鍵字值key,代入函式後若...

雜湊表 雜湊函式構建和衝突處理

雜湊法又稱雜湊法 雜湊法以及關鍵字位址計算法等,相應的表稱為雜湊表。基本思想是 首先在元素的關鍵字k和元素的儲存位置p之間建立乙個對應關係f,使得p f k f稱為雜湊函式。建立雜湊表時,把關鍵字為k的元素直接存入位址為f k 的單元 以後當查詢關鍵字為k的元素時,再利用雜湊函式計算出該元素的儲存位...