選取哈希函數H(k)=(3k)%11,用線性探測散列法和二次探測再散列法分別處理衝突。試在0~10的散列地址空間中,對關鍵字序列(22,41,53,46,30,13,01,67)構建哈希表,並求等概率情況下查找成功的平均查找長度。
線性探測散列法
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
22 | 41 | 30 | 1 | 53 | 46 | 13 | 67 | |||
1 | 1 | 2 | 2 | 1 | 1 | 2 | 6 |
22*3%11=0
41*3%11=2
53*3%11=5
46*3%11=6
30*3%11=2
13*3%11=6
1*3%11=3
67*3%11=3
然後使用線性探測散列法將數據填入表中(第二行),
查找長度填入第三行。
然後計算ASL=(1+1+2+2+1+1+2+6)/8=2
二次探測再散列法
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
22 | 67 | 41 | 30 | 1 | 53 | 46 | 13 | |||
1 | 5 | 1 | 2 | 2 | 1 | 1 | 2 |
22*3%11=0
41*3%11=2
53*3%11=5
46*3%11=6
30*3%11=2
13*3%11=6
1*3%11=3
67*3%11=3
然後使用二次探測再散列法將數據填入表中(第二行),
查找長度填入第三行。
計算ASL=(1+5+1+2+2+1+1+2)/8=1.875
補充:
下面說一下這兩個處理衝突的方法
(1)線性探測散列法
①根據哈希函數計算函數值(%表示取餘計算)
②線性探測散列法就是在取餘計算後的第一次計算出的值直接填入對應序列即可(如計算結果爲3,就直接填入3號位),如果第二次出現甚至多次出現相同計算取餘後的函數值,就依次往後移動,移動到沒有函數值的位置上。(如第二次出現3,就看4號位有沒有函數值,沒有就直接填入,有就繼續往後移動,更多次也是同理)
③根據移動次數填入查找長度,直接填入的爲1,然後後面的爲1+移動次數爲查找長度。
(2)二次探測再散列法
①根據哈希函數計算函數值(%表示取餘計算)
②二次探測再散列法與線性探測散列法的不同就是在移動方式的不同,二次探測再散列法是先右後左的順序,如第二次3的位置,填入4號位置,第三次3的位置,填入2號位置,第四次3的位置,填入5號位置,第五次3的位置,填入1號位置……
③根據移動次數填入查找長度,直接填入的爲1,然後後面的爲1+移動次數爲查找長度。也是一樣,右移一次+1,左移一次也+1。