Hash表和Hash衝突

2021-07-13 23:24:51 字數 770 閱讀 7575

hash表中的元素儲存位址是通過hash函式計算出來的,當要取出指定元素的時候,直接通過hash函式計算出元素的儲存位址。有時候會出現key不同,但是通過hash函式計算出來的值相同,這個值相同意味著這兩個key要存在同一位置,這顯然不對,這就是hash衝突。

hash函式有多種構造方法,常見的有直接定址法、數字分析法、平方取中法、摺疊法、除留餘數法、隨機數法等,這裡選擇除留餘數法。

解決hahs衝突也有多種方法,比如:開放定址法、再雜湊法、鏈位址法、建立乙個公共溢位區等。這裡重點介紹兩種,線性探測法和鏈位址法。

hash表的裝載因子 = 關鍵字總數/雜湊表的長度。比如關鍵字總數為7,hash表長度為10,那麼裝載因子為0.7。

當碰到hash衝突的時候,多次雜湊,線性探測儲存位置。對於關鍵字ki

,求得hash函式的值hi

,但是在位址hi

處已經存放了元素,那麼在hi

繼續雜湊,求hi

+1,hi+

1 = (hi

+ 1)%l,直到遇到空白儲存區。

成功時的平均查詢長度為每個元素的雜湊次數的總和/元素總數;

失敗時的平均查詢長度為0~l-1的查詢次數的總和/hash表長度。失敗的查詢意思就是這個元素注定在該表中找不到,所以在遇到空白儲存區之前會一直往下查詢,遇到空白儲存區停止,因為如果這個數真的存在那麼一定會存在空白儲存區,遇到空白儲存區還沒有找到說明不存在,這個時候就可以停止查詢了。

鏈位址法

開位址法

線性探測法

雜湊衝突

鏈位址法

Hash函式和Hash衝突

2.rehash 3.鍊錶法 4.建立公共溢位區 一 簡介 將任意長度的數值以某個對映規則對映為固定長度的數值,這個過程稱為hash,而這個對映規則被稱為hash函式,而對這個key value進行儲存的資料結構被稱為hash表。由於通過key的hash對映直接得到了記憶體位址,所以hash查詢的時...

hash,解決hash衝突的方法

數字分析法 平方取中法 除留餘數法 偽隨機數法 線性探測 二次探測 偽隨機數探測 拉鍊探測。如果負載因子是預設的0.75,hashmap 16 的時候,佔16個記憶體空間,實際上只用到了12個,超過12個就擴容。如果負載因子是1的話,hashmap 16 的時候,佔16個記憶體空間,實際上會填滿16...

hash衝突處理

1 衝突是如何產生的?上文中談到,雜湊函式是指如何對關鍵字進行編址的規則,這裡的關鍵字的範圍很廣,可視為無限集,如何保證無限集的原資料在編址的時候不會出現重複呢?規則本身無法實現這個目的。舉乙個例子,仍然用班級同學做比喻,現有如下同學資料 張三,李四,王五,趙剛,吳露.假如我們編址規則為取姓氏中姓的...