雜湊表 基本概念

2021-07-22 08:18:01 字數 1728 閱讀 5997

雜湊表,又稱為雜湊表,是一種根據鍵來直接訪問記憶體位置的一種資料結構。它通過乙個計算鍵值的函式(雜湊函式)來將所查詢的資料對映到雜湊表中的乙個位置來查詢該位置的內容,從而達到快速查詢的目的。(存放記錄的陣列就稱為雜湊表)。

若關鍵字為k,則其值就存放在f(k)對應的位置上,這樣可以實現不用比較就可以直接找到要求的記錄,其中f(k)就是雜湊函式直接定址法:取關鍵字或者關鍵字的乙個線性函式值為雜湊位址即:hash(k) = k 或者 hash(k) = ak + b(a、b為常數),這種雜湊函式又稱為自身函式.由於直接定址法所得的位址集合和關鍵字集合的大小相同,因此對於不同的關鍵字不會發生衝突,但是實際中能使用這種雜湊函式的情況比較少;

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

例如:假設80個關鍵字的一部分如下圖所示:

可以發現:

第1和第2位都是8和1,

第3位只能取3或4,

第8位只能取2.5或者7;

因此在取位址的時候不能取這四位(1.2.3和8)。由於中間的四位(4.5.6.7)近似於隨機,因此可以選擇其中兩位或者其中兩位和另外的兩位疊加求和然後捨去進製作為雜湊位址。

平方取中法:取關鍵字的平方後的中間幾位為雜湊位址,位數由表長決定。這是一種比較常用的方法,通常在選定雜湊函式時不一定能知道關鍵字的全部情況,因此去其中的哪幾位不一定合適,而乙個數的平方後的中間幾位是和乙個數的每一位都相關,由此使隨即分布的關鍵字得到的雜湊位址也是隨機的;

例如:在計算機內可用兩位八進位制數表示字母和數字(如下圖),取識別符號在計算機中的八進位制數為它的關鍵字,假設表長為512(2^9)則可取關鍵字平方後中間9位二進位制數【八進位制為三位如圖所示】為雜湊位址。

除留餘數法:取關鍵字被某個不大於雜湊表表長m的數p除后取得的餘數為雜湊位址即:hash(k) = k mod p (p < m)。這是一種最常用的方法獲取雜湊位址,可以直接對關鍵字取模,也可以先對關鍵字平方等運算之後再取模。

注意:在使用該方法時一定要注意p的選擇,p選擇不好很容易產生衝突如下幾例

假設取識別符號在計算機中的二進位制表示為它的關鍵字(每個字母都用兩位八進位制數表示),然後對p = 2^6取模,相當於將關鍵字左移直至只留下最低的6位二進位制數。這樣的演算法問題所在:最後乙個字元相同的所有識別符號都會產生衝突;

隨機數法:通常用於關鍵字長度不等時採用。

處理衝突的方法有以下幾種:

開放定址法

- 線性探測:

- 平方探測:

- 偽隨機探測:

單獨鍊錶法:將雜湊到同乙個儲存位置的所有元素儲存在乙個鍊錶中。

再雜湊法

資料結構(c語言版):嚴蔚敏

雜湊(Hashing) 的基本概念

查詢的次數降低到常數級別。即事先知道要查詢的資料項應該出現在什麼位置。雜湊表 hash table,雜湊表 表中的每乙個儲存位置,成為槽 slot 可以用來儲存資料項,每個槽有乙個唯一的名稱。有利於快速的查詢定位。雜湊函式 實現從資料項到儲存槽名稱的轉換的函式。常用的雜湊方法是求餘數,將資料項除以雜...

雜湊函式和雜湊衝突的基本概念

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

雜湊表基本概念介紹及雜湊衝突的處理方法 附原始碼

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