第十一章
雜湊表總結:這一章講了直接定址表和雜湊表,並介紹了一些雜湊函式等。
1.
直接定址表
直接將關鍵字作為陣列下標。複雜度
o(1)
2.
雜湊表
k->h(k)
降低了空間開銷,會產生碰撞,解決碰撞的簡單方法是鏈結法。
對鏈結法雜湊,平均情況下,複雜度也是
o(1)
3.
雜湊函式
1)除法雜湊法
h(k)=k mod m,m
最好選取與2的整數冪不太接近的質數 2)
乘法雜湊法
h(k)=[m(ka mod 1)], a
為乙個常數
(0。乘法方法的優點是對
m的選擇沒有什麼特別的要求,一般選擇它為
2的某個冪次。
3)全域雜湊
隨機的選擇雜湊函式
從一組雜湊函式中隨機地選擇乙個雜湊函式,當
(k!=l)
時,兩者發生碰撞的概率不大於
1/m,這樣的函式組稱為全域的。
4.
開放定址法
開放定址法指所有的元素都存放在雜湊表裡。
在開放定址法里,當要插入乙個元素時,可以連續地檢查雜湊表的各項,直到遇到乙個空槽存放待插入的關鍵字。對每乙個關鍵字
k,探查序列
必須是<0,1,..,m-1>
的乙個排列。
偽**hash-insert(t,k)
i <- 0
repeat j <- h(k,i)
if t[j] = nil
then t[j] <- k
return j
else i <- i+1
until i=m
error 「hash table overflow」
偽**hash-search(t,k)
i <- 0
repeat j <- h(k,i)
if t[j] = k
then return j
i <- i+1
until i =m or t[j]=nil
return nil
1)線性探查
h(k,i)=(h』(k)+i) mod m, i=0,1,…,m-1
初始探查位置確定了整個序列,只有
m種不同的探查序列。
存在問題,一次群集,即隨著時間的推移,連續被占用的槽不斷增加,平均查詢時間也隨著不斷增加。
2)二次探查
h(k,i)=(h』(k)+a*i+b*i^2) mod m
初始探查位置確定了整個序列,只有
m種不同的探查序列。
存在問題,程度較輕的群集現象,二次群集
3)雙重雜湊
h(k,i)=(h1(k)+i*h2(k)) mod m
為能查詢整個雜湊表,
h2(k)
要與表的大小
m互質。
用了o(m^2)
種探查序列
5.
完全雜湊
一種兩級的雜湊方案
每一級上都採用全域雜湊。
第一級將
n個關鍵字雜湊到
m個槽中,每個槽
j中有乙個較小的二次雜湊表
sj。通過仔細的選擇第二級雜湊函式,可以確保在第二級上不出現碰撞。
期望使用的總體儲存空間為
o(n)
演算法導論 第十一章 雜湊表 學習筆記
雜湊表 hash table 是實現字典操作的一種有效資料結構。儘管在最壞的情況下,在雜湊表中的查詢乙個元素的時間與鍊錶中查詢的時間相同,為o n o n 在一下合理的假設下,在雜湊表中查詢乙個元素的時間複雜度為o 1 o 1 在雜湊表中不是直接把關鍵字作為陣列的下標,而是根據關鍵字計算出相應的下標...
演算法導論 第十一章 雜湊表
當將乙個域u中的元素對映到乙個雜湊表t中時,我們如何對映?若對映到同一位置怎麼辦?前乙個問題我們通過hash函式來解決,後乙個問題我們通過 衝突處理 解決。1 除法 h k k mod m m的選取 素數,且不要太靠近 2的冪次方 2 乘法 其中,0 eg 當m 8 2 3,w 7時 3 全域雜湊 ...
演算法導論 第十一章 雜湊表
演算法導論 第十章 雜湊表 雜湊表大概就是把給每個要儲存的資料都用雜湊函式給定乙個關鍵字,對應到乙個槽。由於不同的資訊可能對應同樣的關鍵字,也就是說對應同乙個槽,這時要解決其衝突,解決衝突可以用鏈結法,和開放定址法。對於鏈結法,其對於衝突採取鍊錶進行解決,這樣就保證了資料不會發生衝突。其查詢的平均時...