資料結構(十一)雜湊表結構

2021-08-22 16:09:09 字數 3793 閱讀 6212

雜湊表實踐

h(x)=x mod 10 的結果:

4371 mod 10=1

1323 mod 10=3

6173 mod 10=3

4199 mod 10=9

4344 mod 10=4

9679 mod 10=9

1989 mod 10=9

將雜湊到同乙個值的所有元素保留在乙個鍊錶中

hi(x)=(hash(x)+f(i))mod tablesize,其中f(i)=i,i為發生衝突的次數,f(0)=0。逐個探測雜湊表,若發生衝突,則插入到下乙個空單元中

hi(x)=(hash(x)+f(i))mod tablesize,其中f(i)=i2,i為

發生衝突的次數,f(0)=0。

c. 平方探測:hi(x)=(hash(x)+f(i))mod tablesize,其中f(i)=i2,i為

發生衝突的次數,f(0)=0。

1) 首先插入4371,h0(4371)=(4371(mod 10)+f(0))mod 10=1,故插入1位置。

2) 插入1323,h0(1323)=(1323(mod 10)+f(0))mod 10=3,故插入3位置。

3) 插入6173,h0(6173)=(6173(mod 10)+f(0))mod 10=3,故插入3位置,此時發

生衝突(與1323插入同一位置)。

發生第一次衝突,計算h1(6173)=(6173(mod 10)+f(1))mod 10=4,故插入4位 置。

4) 插入4199,h0(4199)=(4199(mod 10)+f(0))mod 10=9,故插入9位置。

5) 插入4344,h0(4344)=(4344(mod 10)+f(0))mod 10=4,故插入4位置,此時發

生衝突(與6173插入同一位置)。

發生第一次衝突計算h1(4344)=(4344(mod 10)+f(1))mod 10=5,故插入5位置。

6) 插入9679,h0(9679)=(9679(mod 10)+f(0))mod 10=9,故插入9位置,此時發

生衝突(與4199插入同一位置)。

發生第一次衝突計算h1(9679)=(9679(mod 10)+f(1))mod 10=0,故插入0位置。

7) 插入1989,h0(1989)=(1989(mod 10)+f(0))mod 10=9,故插入9位置,此時發

生衝突(與4199插入同一位置)。

發生第一次衝突計算h1(1989)=(1989(mod 10)+f(1))mod 10=0,故插入0位置, 此時發生衝突(與9679插入同一位置)。

發生第二次衝突計算h2(1989)=(1989(mod 10)+f(2))mod 10=3,故插入3位置, 此時發生衝突(與1323插入同一位置)。

發生第三次衝突計算h3(1989)=(1989(mod 10)+f(3))mod 10=8,故插入8位置。

h2(x)=7-(x mod 7)的結果:

hash(4371)=7-3=4

hash(1323)=7-0=7

hash(6173)=7-6=1

hash(4344)=7-4=3

hash(4199)=7-6=1

hash(9679)=7-5=2

hash(1989)=7-1=6

hi(x)=(hash(x)+f(i))mod tablesize,其中f(i)=i*hash2(x),

i為發生衝突的次數,f(0)=0。題中hash2(x)=7-(x mod 7)。

1) 首先插入4371,h0(4371)=(4371(mod 10)+f(0))mod 10=1,故插入1位置。

2) 插入1323,h0(1323)=(1323(mod 10)+f(0))mod 10=3,故插入3位置。

3) 插入6173,h0(6173)=(6173(mod 10)+f(0))mod 10=3,故插入3位置,此時發

生衝突(與1323插入同一位置)。

4) 發生第一次衝突,計算hash2(6173)=7-(6173 mod 7)=1,f(1)=1*hash2(6173)=1,

h1(6173)=(6173(mod 10)+f(1))mod 10=4,故插入4位置。

5) 插入4199,h0(4199)=(4199(mod 10)+f(0))mod 10=9,故插入9位置。

6) 插入4344,h0(4344)=(4344(mod 10)+f(0))mod 10=4,故插入4位置,此時發

生衝突(與6173插入同一位置)。

發生第一次衝突,計算hash2(4344)=7-(4344 mod 7)=3,f(1)=1*hash2(4344)=3, h1(4344)=(4344(mod 10)+f(1))mod 10=7,故插入7位置。

7) 插入9679,h0(9679)=(9679(mod 10)+f(0))mod 10=9,故插入9位置,此時發

生衝突(與4199插入同一位置)。

發生第一次衝突,計算hash2(9679)=7-(9679mod 7)=2,f(1)=1*hash2(9679)=2,

h1(9679)=(9679(mod 10)+f(1))mod 10=1,故插入1位置,此時發生衝突(與4371插入同一位置)。

發生第二次衝突,計算f(2)=2*hash2(9679)=4,h1(9679)=(9679(mod

10)+f(2))mod 10=3,故插入3位置,此時發生衝突(與1323插入同一位置)。

發生第三次衝突,計算f(3)=3*hash2(9679)=6,h1(9679)=(9679(mod

10)+f(3))mod 10=5,故插入5位置。

8) 插入1989,h0(1989)=(1989(mod 10)+f(0))mod 10=9,故插入9位置,此時發

生衝突(與4199插入同一位置)。

發生第一次衝突計算hash2(1989)=7-(1989 mod 7)=6,f(1)=1*hash2(1989)=6,

h1(1989)=(1989(mod 10)+f(1))mod 10=5,故插入5位置,此時發生衝突(與9679插入同一位置)。

發生第二次衝突,計算f(2)=2*hash2(1989)=12,h1(1989)=(1989(mod

10)+f(2))mod 10=1,故插入1位置,此時發生衝突(與4371插入同一位置)。

發生第三次衝突,計算f(3)=3*hash2(1989)=18,h1(1989)=(1989(mod

10)+f(3))mod 10=7,故插入7位置,此時發生衝突(與4344插入同一位置)。

發生第四次衝突,計算f(4)=4*hash2(1989)=24,h1(1989)=(1989(mod

10)+f(4))mod 10=3,故插入3位置,此時發生衝突(與1323插入同一位置)。

發生第五次衝突,計算f(5)=5*hash2(1989)=30,h1(1989)=(1989(mod

10)+f(5))mod 10=9,故插入9位置,此時發生衝突(與4199插入同一位置)。

此時,可以知道,將再次逐個探測位置9->5->7->3->9,最終無法插入1989。

資料結構 雜湊表

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

資料結構 雜湊表

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

資料結構 雜湊表

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