雜湊表(碰撞,複雜度)——筆試面試常考問題
阿新 • • 發佈:2019-02-08
本文轉自:http://www.blogbus.com/shijuanfeng-logs/172381700.html
散列表(Hash table,也叫雜湊表),是根據關鍵碼值(Key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中一個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做散列表。
建表複雜度O(n)
查詢複雜度O(1)
解決碰撞的方法:
1. 連結
2. 開放定址
3. 再雜湊
這是今年騰訊10.15的一道筆試題,理解之,就理解了連結和開放定址法:
已知一個線性表(38,25,74,63,52,48),採用的雜湊函式為H(Key)=Key%7,將元素雜湊到表長為7的雜湊表中儲存。若採用線性探測的開放定址法解決衝突,則在該散列表上進行等概率成功查詢的平均查詢長度為 ____ ;
若利用拉鍊法解決衝突,則在該散列表上進行等概率成功查詢的平均查詢長度為 ____
38 25 74 63 52 48 mod 7分別是 3 4 4 0 3 6
所以採用線性探測的開放定址法解決衝突,表為:
63,48, ,38,25,74,52
找38,1次
找25,1次
找74,2次
找63,1次
找52,4次
找48,3次
所以成功查詢的平均長度為(1+1+2+1+4+3)/6=2
拉鍊法
建立的為:
63,,,38 –>52,25->74, ,48
找38,1次
找25,1次
找74,2次
找63,1次
找52,2次
找48,1次
所以成功查詢的平均長度為(1+1+2+1+2+1)/6=1.333
相關連結:http://shijuanfeng.blogbus.com/c3903086/