演算法導論 第十一章 雜湊表

2021-07-03 20:26:25 字數 1799 閱讀 7748

當將乙個域u中的元素對映到乙個雜湊表t中時,我們如何對映?若對映到同一位置怎麼辦?前乙個問題我們通過hash函式來解決,後乙個問題我們通過「衝突處理」解決。

(1)除法

h(k) = k mod m        

m的選取:素數,且不要太靠近 2的冪次方

(2)乘法

其中,0

eg:當m=8=2^3,w=7時:

(3)全域雜湊

上面兩種方法通常仍會讓不同元素對映到同一槽(slot)中,可以通過構造全域雜湊集,隨機選擇hash函式進行對映。構造全域hash集的方法很多,下面僅介紹其中一種:

其中,a=,b=,p>m,p 足夠大

這一類雜湊函式組成全域雜湊集:

如果h隨機從h中選取,那麼元素x和y衝突的概率為1/m.

(1)鍊錶法

平均搜尋時間為θ(1+α)。當n=o(m),α=o(1)

(2)開放位址法

線性探測,平方探測

當給定n個key值,構建乙個大小為m=o(n)的靜態hash表,使得最壞情況下的搜尋時間為o(1)。為解決這個問題,需要使用2級結構,每級使用全域雜湊。

eg: k=<10,22,37,40,52,60,70,72,75>,第一級hash函式為:h(k)=((ak+b) mod p) mod m, 其中a=3,b=42,p=101,m=9.第二級雜湊表s(j) 儲存所有對映到槽j的key.其中s(j)的大小滿足:m(j)=n(j)²,同樣利用h(k)=((ak+b) mod p) mod m求解,但需要注意a,b,p,m與第一級的不同,並且第二級中的每個s(j)的a,b,p,m也不同。

衝突分析:

如果利用從乙個全域hash集中隨機選擇的hash函式h,將n個key儲存在乙個大小為m=n²的hash表中,那麼出現碰撞的概率小於1/2

儲存分析:

對於第一級選擇m=n,第二級的大小滿足:m(i)=n(i)²,其中n(i)表示對映到槽i中的所有key,那麼:

三種hash對映處理完整**如下(煉表處理元素衝突):

【注:若有錯誤,請指正~~~】

演算法導論 第十一章 雜湊表

演算法導論 第十章 雜湊表 雜湊表大概就是把給每個要儲存的資料都用雜湊函式給定乙個關鍵字,對應到乙個槽。由於不同的資訊可能對應同樣的關鍵字,也就是說對應同乙個槽,這時要解決其衝突,解決衝突可以用鏈結法,和開放定址法。對於鏈結法,其對於衝突採取鍊錶進行解決,這樣就保證了資料不會發生衝突。其查詢的平均時...

演算法導論 第十一章 雜湊表

雜湊表是實現字典操作的一種有效資料結構。雜湊表是普通陣列概念的推廣,由於對普通陣列可以直接定址,使得能在o 1 時間內訪問陣列中的任意位置。如果儲存空間允許,我們可以提供乙個陣列,為每個可能的關鍵字保留乙個位置,以利用直接定址技術的優勢。當實際儲存的關鍵字數目比全部的可能關鍵字總數要小時,採用雜湊表...

演算法導論學習筆記 第十一章 雜湊表

第十一章 雜湊表總結 這一章講了直接定址表和雜湊表,並介紹了一些雜湊函式等。1.直接定址表 直接將關鍵字作為陣列下標。複雜度 o 1 2.雜湊表 k h k 降低了空間開銷,會產生碰撞,解決碰撞的簡單方法是鏈結法。對鏈結法雜湊,平均情況下,複雜度也是 o 1 3.雜湊函式 1 除法雜湊法 h k k...