雜湊表處理位址衝突的方法及成功查詢的平均長度

2021-08-13 17:39:19 字數 1525 閱讀 4919

首先通過一道例題來引出這篇部落格的主旨:

h(key)=key%7

求得雜湊位址(存在位址衝突)

線性探測再雜湊

當位址衝突時,每次位址+1 [2,3…] 直到找到空位

查詢長度

38%7=3

a[3]=38

125%7=4

a[4]=25

174%7=4

a[4]=74 –> a[5]=74

263%7=0

a[0]=63

152%7=3

a[3]=52 –> a[4]=52 –> a[5]=52 –> a[6]=52

448%7=6

a[6]=48 –> a[0]=48 –> a[1]=483

總的平均查詢長度=每個元素的查詢長度之和/總的元素個數,即:(1+1+2+1+4+3)/6=2

處理衝突的方法

1. 開放定址法

h[i]=(h(key)+d[i]) mod m

其中h(key)為雜湊函式;m為雜湊表表長;d[i]為增量序列,下面的三種取法對應著三種探測型別:

(1)線性探測再雜湊:d[i]=1,2,3,…,m-1

(2)二次探測再雜湊:d[i]=1²,-1²,2²,-2²,3²,…,±k²

(3)隨機探測再雜湊:d[i]=偽隨機數序列

總結:用線性探測再雜湊可以保證做到:只要雜湊表未填滿,總能找到乙個不發生衝突的位址h[k],而二次探測再雜湊只有在雜湊表長m為形如4j+3(j為整數)的素數時才可能,隨機探測再雜湊,則取決於偽隨機數列。

2. 再雜湊法

在同義詞(計算的hash值相同的記錄)產生位址衝突時計算另乙個雜湊函式位址,直到衝突不再發生。這種方法不易產生」聚集」,但增加了計算的時間。

3. 鏈位址法

將所有關鍵字為同義詞的記錄儲存在同一線性表中。在鍊錶中的插入位置可以在表頭或表尾;也可以在中間,以保持同義詞在同一線性表中按關鍵字有序

例:已知一組關鍵字為(19,14,23,01,68,20,84,27,55,11,10,79) 則按雜湊函式h(key)=key mod 13和鏈位址法處理衝突構造所得的雜湊表如下: 鍊錶

鏈位址法01

–> [01] –> [14] –> [27] –> [79]23

–> [55] –> [68]45

6–> [19] –> [84]

7–> [20]89

10–> [10] –> [23]

11–> [11]12

查詢成功時,01,55,19,20,10,11需要一次;14,68,84,23需要兩次;27需要三次;79需要四次。

平均成功查詢長度為:(6*1+4*2+1*3+1*4)/12=21/12

4. 建立乙個公共溢位區

所有關鍵字和基本表中關鍵字為同義詞的記錄,不管它們右雜湊函式得到的雜湊位址是什麼,一旦發生衝突,都填入溢位表。

雜湊表(雜湊表)及雜湊表處理衝突的方法

前面介紹了靜態查詢表以及動態查詢表中的一些查詢方法,其查詢的過程都無法避免同查詢表中的資料進行比較,查詢演算法的效率很大程度取決於同表中資料的查詢次數。而本節所介紹的雜湊表可以通過關鍵字直接找到資料的儲存位置,不需要進行任何的比較,其查詢的效率相較於前面所介紹的查詢演算法是更高的。在初中的數學課本中...

雜湊表及處理衝突的方法

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

雜湊表and處理衝突的方法

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