華電北風吹
天津大學認知計算與應用重點實驗室
日期:2015/9/8
雜湊表(hash table)是一種支援高效插入,查詢,刪除操作的動態集合結構。並且在滿足一些合理假設下,這些操作的平均時間複雜度可以達到θ(1) ,這也是雜湊表能夠和二叉搜尋樹(紅黑樹)抗衡的乙個重要方面。
一、直接定址表
當關鍵字集合很小的時候,例如[1,2,...,m],直接定址法的思路是分配乙個長度為m的直接定址表t,每個關鍵字k對應陣列中唯一的乙個元素t(k),陣列中每乙個元素儲存乙個指向這個關鍵字對應的資料結構。進行插入,查詢,刪除操作的時候,時間複雜度嚴格的等於θ(1)
缺點:關鍵字集合比較大的時候,需要的直接定址表的儲存空間太大。
二、雜湊表
關鍵字全域|u| 遠大於雜湊表長度m時,利用雜湊函式(hash function)h(k)將關鍵字k對映到雜湊表t的h(k)槽位上。
三、雜湊函式
1、除法雜湊法
h(k)=k mod m
2、乘法雜湊法
h(k)=ceil(m(kamod 1))
四、鏈結法
由於m,肯定會有不同的key得到的雜湊值h(k) 相同,所以必然會存在衝突。鏈結法解決衝突的思路是建立乙個邊表,插入的時候將具有相同雜湊值的那些資料以鍊錶的形式新增到邊表末尾。查詢,刪除的時候對t[h(k)] 的邊表挨個匹配。
五、開放定址法
開放定址法的思路是如果當前t[h(k)] 已經被別的關鍵字占用了,就按照一定規則在雜湊表中尋找乙個空的位置插入。這個規則包括
1、線性探查
2、二次探察
3、雙重雜湊
六、完全雜湊
對於關鍵字集合是靜態集合的時候,採用完全雜湊。
補充:1、使用雜湊表的那些資料結構:
python: set,dict
c++: hashmap
《演算法導論》雜湊表
雜湊表 hash table 是實現字典操作 查詢 插入 刪除 的有效資料結構,具有很高的查詢效率。一定情況下查詢元素的期望時間是o 1 優於鍊錶 o n 和直接定址的陣列 查詢也是o 1 相當。但當實際儲存的關鍵字數比可能的關鍵字總數小的時候,雜湊錶比陣列有效。一些記號 直接定址,關鍵字k存放在第...
演算法導論 雜湊表
include include includeusing namespace std const int length 6 待插入的數列長度 const int tablesize 11 雜湊表的容量 應該打大於數列長度以保證每個元素都有處可放 typedef struct hash hashtab...
演算法導論11(雜湊表)
11.1 直接定址表 struct node node directaddresssearch node t,int k void directaddressinsert node t,node x void directaddressdelete node t,node x 11.2 雜湊表 通過...