默認已經學習過前面內容
m是散列表表長,p是散列函數的取余數,di是處理沖突的增量,H(key)是散列函數
線性探測法
H'(key)=(H(key)+di)%m di=0,1,2,...,m-1
其中H(key)=key%p
則 ASL成功=(插入記錄的比較次數總和)/插入記錄的次數
ASL失敗=([0,p-1]的查找不成功的次數就是直接找關鍵字到第一個地址上關鍵字為空的距離 總和)/p
例題1
表長m=14,H(key)=key%11,表中現有4個結點,其中H(15)=4,H(38)=5,H(61)=6,H(84)=7,處理沖突使用線性探測法,求插入關鍵字49的地址
Ans:
構造散列表
15 | 38 | 61 | 84 | 49 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
比較次數:
- 15 1
- 38 1
- 61 1
- 84 1
- 49 4
ASL成功 = (1+1+1+1+4)/5 = 8/5
ASL失敗 = (1+1+1+1+6+5+4+3+2=1+1)/11 = 26/11
平方探測法
H'(key)=(H(key)+di)%m di= 0, 1^2, -1^2, 2^2, -2^2, ..., k^2, -k^2
則 ASL成功=(插入記錄的比較次數總和)/插入記錄的次數
ASL失敗=([0,p-1]的查找不成功的次數就是直接找關鍵字到第一個地址上關鍵字為空的距離 總和)/p
例題2
H(key)=key%8 {1,13,12,34,38,33,27,22} 表長11
Ans:
構造散列表
33 | 1 | 34 | 27 | 12 | 13 | 38 | 22 | |||
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
比較次數:
- 33 3
- 1 1
- 34 1
- 27 1
- 12 1
- 13 1
- 38 1
- 22 2
ASL成功 = (3+1+1+1+1+1+1+2)/8=11/8
失敗次數:
- 33 3
- 1 5
- 34 7
- 27 9
- 12 8
- 13 6
- 38 4
- 22 2
ASL失敗 = (3+5+7+9+8+6+4+2)/8 = 11/2
總結
ASL成功= 插入關鍵字時的比較次數 / 關鍵字個數
ASL失敗 = 查找不成功的比較次數 / 查找不成功時的地址個數
線性探測與平方探測的失敗比較次數求法不同