Hash表之ASL和不成功ASL的計算 (平均查找長度)


一、線性探測再散列法

      Hash表: 元素的值(value)和在數組中索引位置(index)有一個確定關系

      Index = Hash(key) ==> y = f(x)

      Index有可能相同,怎么處理沖突?

在“處理沖突”上可能會有不同的方法。 

示例 :

將關鍵字序列(7、8、30、11、18、9、14)散列存儲到散列表中。散列表的存儲空間是一個下標從0開始的一維數組。散列函數為: H(key) = (keyx3) MOD 7,處理沖突采用線性探測再散列法,要求裝填(載)因子為0.7。 
(1) 請畫出所構造的散列表; 
(2) 分別計算等概率情況下查找成功和查找不成功的平均查找長度。 
1.散列表: 
α = 表中填入的記錄數/哈希表長度 ==> 哈希表長度 = 7/0.7 = 10 
H(7) = (7x3) MOD 7 = 0         H(8) = (8x3) MOD 7 = 3            H(30) = (30x3)MOD 7 = 6 
H(11) = (11x3) MOD 7 = 5       H(18) = (18x3) MOD 7 = 5          H(9) = (9x3) MOD 7 = 6         H(14) = (14x3) MOD 7 = 0 
按關鍵字序列順序依次向哈希表中填入,發生沖突后按照“線性探測”探測到第一個空位置填入。

 

2.查找長度: 

2.1 查找成功的平均查找長度 
(待查找的數字肯定在散列表中才會查找成功) 
查找數字A的長度 = 需要和散列表中的數比較的次數; 
步驟: 
比如 查找數字:8 
則 H(8) = (8x3) MOD 7 = 3 
哈希表中地址3處的數字為8,進行了第一次比較:8 = 8,則查找成功,查找長度為1; 
比如查找數字:14 
則 H(14) = (14x3) MOD 7 = 0 
哈希表中地址0處的數字為7,進行第一次比較:7≠14 
哈希表中地址1處的數字為14,進行第二次比較:14=14 ,則查找成功,查找長度為2。  

 

 所以總的查找成功的平均查找長度= (1+1+1+1+3+3+2)/7 = 12/7 

2.2 查找不成功的平均查找長度 
(待查找的數字肯定不在散列表中) 
【解題的關鍵之處】根據哈希函數地址為MOD7,因此任何一個數經散列函數計算以后的初始地址只可能在0~6的位置 
查找0~6位置查找失敗的查找次數為: 
地址0,到第一個關鍵字為空的地址2需要比較3次,因此查找不成功的次數為3. 
地址1,到第一個關鍵字為空的地址2需要比較2次,因此查找不成功的次數為2. 
地址2,到第一個關鍵字為空的地址2需要比較1次,因此查找不成功的次數為1. 
地址3,到第一個關鍵字為空的地址4需要比較2次,因此查找不成功的次數為2. 
地址4,到第一個關鍵字為空的地址4需要比較1次,因此查找不成功的次數為1. 
地址5,到第一個關鍵字為空的地址9,因此查找不成功的次數為5. 
地址6,到第一個關鍵字為空的地址9,因此查找不成功的次數為4. 
於是得到如下數據: 

 

 二、平方探測再散列(二次探測再散列):

 

 線性探測再散列

 

 二次探測再散列

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM