1. 程式人生 > >雜湊表(碰撞,複雜度)——筆試面試常考問題

雜湊表(碰撞,複雜度)——筆試面試常考問題

本文轉自: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/