1. 程式人生 > 其它 >散列表解決衝突的線性探測與平方探測查詢成功、失敗平均查詢長度

散列表解決衝突的線性探測與平方探測查詢成功、失敗平均查詢長度

預設已經學習過前面內容
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失敗 = 查詢不成功的比較次數 / 查詢不成功時的地址個數
線性探測與平方探測的失敗比較次數求法不同