1. 程式人生 > >雜湊表查詢 平均查詢長度 解析

雜湊表查詢 平均查詢長度 解析

       雜湊表的裝填因子 α 的定義如下:

                α = 雜湊表中元素個數 / 雜湊表的長度

       α 可描述雜湊表的裝滿程度。顯然,α 越小,發生衝突的可能性越小,而 α 越大,發生衝突的可能性也越大

手工計算等概率情況下查詢 成功 的平均查詢長度公式

       規則如下:

ASLsucc

       其中 C為置入每個元素時所需的比較次數
       
例如:已知一組關鍵字序列(191423016820842755111079)按雜湊函式H(key)=key % 13 和線性探測處理衝突構造所得雜湊表ht[0..15],

如圖1所示

比較次數1     2      1      4      3      1      1     3     9      1      1     3

       查詢19時,通過計算H(19)= 6,ht[6].key非空且值為19查詢成功,則查詢關鍵字19 ,僅需要計算1次地址就可以找到;

       查詢14時,通過計算H(14)= 1,ht[1].key非空且值為14查詢成功,則查詢關鍵字19 ,僅需要計算1次地址就可以找到;

       查詢23時,通過計算H(23)=10,ht[10].key非空且值為23查詢成功,則查詢關鍵字23 ,僅需要計算1次地址就可以找到;

       同樣,查詢關鍵字68,20,11,均需要計算一次地址就可以找到;

       查詢關鍵字01時,通過計算H(01)=1,ht[1].key非空且值為14≠01,則找第一次衝突處理後的地址H1=(1+1)% 13=2,此時,ht[2].key非空且值為01,查詢成功因此查詢關鍵字01時,需要計算2次地址才可以找到;

       查詢關鍵字55時,通過計算H(55)=3,ht[3].key非空且值為68≠55,則找第一次衝突處理後的地址H1=(3+1)% 13=4,此時,ht[4].key非空且值為27≠55,則找第二次衝突後處理地址H2=(3+2)% 13=5, ht[5].key非空且值為55查詢成功,因此查詢關鍵字27時,需要計算3次地址才能找到,同理,查詢關鍵字10,84均需要計算3次地址才能找到;

       查詢關鍵字27時,通過計算H(27)=1,ht[1].key非空且值為14≠27,則找第一次衝突處理後的地址H1=(1+1)% 13=2,此時,ht[2].key非空且值為01≠27,則找第二次衝突後處理地址H2=(1+2)% 13=3, ht[3].key非空且值為68≠27,則找第三次衝突後處理地址H3=(1+3)% 13=4,ht[4].key非空且值為27,查詢成功,因此查詢關鍵字27時,需要計算4次地址才可以找到;

       根據上面的方法,查詢關鍵字79時,通過計算H(79)=1,ht[1].key非空且值為14≠79,則找第一次衝突處理後的地址H1=(1+1)% 13=2,此時,ht[2].key非空且值為01≠79,則找第二次衝突後處理地址H2=(1+2)% 13=3, ht[3].key非空且值為68≠79,則找第三次衝突後處理地址H3=(1+3)% 13=4,ht[4].key非空且值為27≠79,則找第四次衝突後處理地址H4=(1+4)% 13=5,ht[5].key非空且值為55≠79,則找第五次衝突後處理地址H5=(1+5)% 13=6,ht[6].key非空且值為19≠79則找第六次衝突後處理地址H6=(1+6)% 13=7,ht[7].key非空且值為20≠79,則找第七次衝突後處理地址H7=(1+7)% 13=8,ht[8].key非空且值為84≠79,則找第八次衝突後處理地址H8=(1+8)% 13=9,ht[9].key非空且值為79,查詢成功,因此查詢關鍵字79時,需要計算9次地址才可以找到。

       據此計算公式,對如圖8.27的雜湊表,採用線性探測再雜湊法處理衝突, 計算出在等概率查詢的情況下其查詢成功的平均查詢長度為:

ASL(12)==2.5

       為便於計算, 在圖8.27雜湊表下方加註圓圈, 圓圈內表示的是有衝突時的計算次數, 如代表需要一次地址計算就可找到的關鍵字有6個,依此類推,即可得到計算結果。

同理據此公式, 對採用鏈地址法處理衝突的雜湊表例圖8.26, 計算出在等概率情況下其查詢成功的平均查詢長度為:

ASL(12)succ=

手工計算在等概率情況下查詢 不成功 的平均查詢長度公式

查詢不成功的情況:(1)  遇到空單元

                               (2)  按解決衝突的方法完全探測一遍後仍未找到。0 -> r-1 個不成功查詢的入口,從每個入口進入後,直到確定查詢不成功為止,其關鍵字的比較次數就是與該入口對應的不成功查詢長度。

規則如下:

ASLunsucc 

       其中Ci為函式取值為 i 時確定查詢不成功時比較次數

       據此計算公式,對如圖8.27的雜湊表,採用線性探測再雜湊法處理衝突, 計算出在等概率查詢的情況下其查詢不成功的平均查詢長度為:

ASL(13)==6

       同理據此公式,對採用鏈地址法處理衝突的雜湊表例圖8.26, 計算出在等概率情況下其查詢不成功的平均查詢長度為:

ASL(13)unsucc=

鏈地址法: