Hash表的平均查詢長度ASL計算方法

2021-09-25 04:18:12 字數 1887 閱讀 5432

hash表的「查詢成功的asl」和「查詢不成功的asl」

asl指的是 平均查詢時間

關鍵字序列:(7、8、30、11、18、9、14)

雜湊函式:

h(key) = (key x 3) mod 7

裝載因子(用來計算表長的):

0.7處理衝突:

線性探測再雜湊法

查詢成功的asl計算方法:

因為現在的資料是7個,填充因子是0.7。所以陣列大小=7/0.7=10,即寫出來的雜湊表大小為10,下標從0~9。

第乙個元素7,帶入雜湊函式,計算得0。

第二個元素8,帶入雜湊函式,計算得3。

第三個元素30,帶入雜湊函式,計算得6。

第四個元素11,帶入雜湊函式,計算得5。

第五個元素18,帶入雜湊函式,計算得5;此時和11衝突,使用線性探測法,得7。

第六個元素9,帶入雜湊函式,計算得6;此時和30衝突,使用線性探測法,得8。

第七個元素14,帶入雜湊函式,計算得0;此時和7衝突,使用線性探測法,得1。

所以雜湊表:位址0

key7

所以查詢成功的計算:

如果查詢7,則需要查詢1次。

如果查詢8,則需要查詢1次。

如果查詢30,則需要查詢1次。

如果查詢11,則需要查詢1次。

如果查詢18,則需要查詢3次:第一次查詢位址5,第二次查詢位址6,第三次查詢位址7,查詢成功。

如果查詢9,則需要查詢3次:第一次查詢位址6,第二次查詢位址7,第三次查詢位址8,查詢成功。

如果查詢位址14,則需要查詢2次:第一次查詢位址0,第二次查詢位址1,查詢成功。

所以,asl=(1+2+1+1+1+3+3)/ 7=12/ 7

查詢不成功的asl計算方法:

鑑於網路上有各種版本,本人認為此種計算方法比較合理。驗證例項可以參考2023年的計算機408考研真題的第一道計算大題和答案。

1. 定義什麼叫查詢不成功

舉個例子來說吧。在已知上面雜湊表的基礎上,如果要查詢key為4的關鍵字。根據雜湊函式可以計算hash(key)=hash(4)=5。此時在位址為5的地方取出那個數字,發現key=11,不等於4。這就說明在裝填的時候會發生衝突。根據衝突處理方法,會繼續檢測位址為6的值,發現key=30,依然不等。這個時候到了位址為6,但是依然沒有找到。那麼就說明根本就沒有key=4這個關鍵字,說明本次查詢不成功。注意:為什麼到位址6?因為雜湊函式中有 mod7 ,對應的位址為06,即06查詢失敗的查詢次數。

再舉乙個例子。查詢key為0的關鍵字,根據雜湊函式可以計算hash(key)=hash(0)=0。此時在位址為0的地方取出那個數字,發現key=7,不等於0。這就說明在裝填的時候會發生衝突。根據衝突處理方法,會繼續檢測位址為1的值,發現key=14,依然不等。這個時候到了位址為3,發現為空,依然沒有找到。所以停止查詢,本次查詢不成功。因為如果key=0這個關鍵字存在的話,依照衝突處理函式,就一定能找到它。總不能丟了吧。

2. 根據第一點定義的不成功,依次推下去:

查詢位址為0的值所需要的次數為3,

查詢位址為1的值所需要的次數為2,

查詢位址為2的值所需要的次數為1,

查詢位址為3的值所需要的次數為2,

查詢位址為4的值所需要的次數為1,

查詢位址為5的值所需要的次數為5,

查詢位址為6的值所需要的次數為4。

3.計算

查詢不成功asl=(3+2+1+2+1+5+4)/ 7=18/ 7

Hash表的平均查詢長度ASL計算方法

asl指的是 平均查詢時間 關鍵字序列 7 8 30 11 18 9 14 雜湊函式 h key key x 3 mod 7 裝載因子 0.7處理衝突 線性探測再雜湊法 查詢成功的asl計算方法 因為現在的資料是7個,填充因子是0.7。所以陣列大小 7 0.7 10,即寫出來的雜湊表大小為10,下標...

雜湊表查詢 的 平均長度

將關鍵字序列 7 8 30 11 18 9 14 雜湊儲存到雜湊表中。雜湊表的儲存空間是乙個下標從0開始的一維陣列。雜湊函式為 h key key 3 mod 7,處理衝突採用線性探測再雜湊法,要求裝填 載 因子為0.7。1 請畫出所構造的雜湊表 2 分別計算等概率情況下查詢成功和查詢不成功的平均查...

平均查詢長度詳解

分塊查詢是折半查詢和順序查詢的一種改進方法,折半查詢雖然具有很好的效能,但其前提條件時線性表順序儲存而且按照關鍵碼排序,這一前提條件在結點樹很大且表元素動態變化時是難以滿足的。而順序查詢可以解決表元素動態變化的要求,但查詢效率很低。如果既要保持對線性表的查詢具有較快的速度,又要能夠滿足表元素動態變化...