雜湊表的構造方法以及解決衝突的方法

2021-08-17 11:24:09 字數 976 閱讀 4967

一、雜湊表是什麼?

雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key-value)而直接進行訪問的資料結構。

也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。

給定表m,存在函式f(key),對任意給定的關鍵字值key,代入函式後若能得到包含該關鍵字的記錄在表中的位址,則稱表m為雜湊(hash)表,函式f(key)為雜湊(hash) 函式所以我們可以知道:

雜湊表的優點在於,查詢效率高o(1),但是耗費空間。

思想我個人認為是空間換取時間……

二、雜湊函式的構造方法:

1、直接定址法:取關鍵字或關鍵字的某個線性函式值為雜湊位址。

2、數字分析法:假設關鍵字是以r為基的數(如:以10為基的十進位制數),並且雜湊表中可能出現的關鍵字都是事先知道的,則可取關鍵字的若干數字組成雜湊位址。

3、平方取中法:取關鍵字平方後的中間幾位為雜湊位址。

4、斐波那契(fibonacci)雜湊法

5、摺疊法:將關鍵字分割成位數相同的幾部分(最後一部分的位數可以不同),然後取這幾部分的疊加和(捨去進製)作為雜湊位址,這方法稱為摺疊法。

6、除留餘數法:取關鍵字被某個不大於雜湊表表長m的數p除后所得餘數為雜湊位址。即h(key)=key mod p,(p<=m),這是一種最簡單,也是最常用的構造雜湊函式的方法。它不僅可以對關鍵字直接取模(mod),也可在摺疊、平方取中等運算之後取模。

7、隨機數法:選擇乙個隨機函式,取關鍵字的隨機函式值為它的雜湊位址,即h(key)=random(key),其中random為隨機函式。通常,當關鍵字長度不等時採用此法構造雜湊函式較切當。

三、雜湊表的缺陷:

雜湊表總會不可避免的產生衝突(尤其是在資料量大的時候),這個時候就需要乙個方法來解決衝突,以下是幾種常用的解決衝突的方法:

1、開放定址法

2、再雜湊法

3、鏈位址法

4、建立乙個公共溢位區

雜湊函式的構造方法以及衝突解決辦法

常用的構造雜湊函式的方法有 h key key 或 h key a key b 其中a和b為常數 這種雜湊函式叫做自身函式 例如 有乙個從1歲到100歲的人口數字統計表,其中,年齡作為關鍵字,雜湊函式取關鍵字自身。這樣,若要詢問25歲的人有多少,則只要查表的第25項即可。又如 有乙個解放後出生的人口...

雜湊(hash)表以及解決衝突的方式

把查詢表中的關鍵字對映成該關鍵字對應位址的函式,雜湊函式可能會把兩個或兩個以上的不同關鍵字對映到同一位址,稱這種情況為衝突,這些發生碰撞的不同關鍵字成為同義詞。1 直接定址法 直接取關鍵字的摸個現行函式值為雜湊位址,雜湊函式為h key a key b,其中a和b是常數,這種方法最簡單,並且不會產生...

解決雜湊衝突的方法

在實際的應用中,選取合適的雜湊函式可減少衝突,但衝突是不可避免的。所以我就想給大家說幾種解決雜湊衝突的方法啦 首先就是開放定址法,用這個方法處理衝突的核心思想就是在衝突發生的時候,形成乙個位址序列,順著這個序列挨個去檢查探測,一直等到找到乙個 空 的開放位址。把我們發生衝突的關鍵字值存放到這個 空 ...