1、開發定址發
h(i) = (h(key) + di) mod m
其中i =1,2,3 ... m-1
m:hash表的長度
h(key)為hash函式
di為增量序列,序列的意思是如果得到的h(i)上已經有元素,取di+1。
根據di的取值方式不同可以分為3中情況
(1)、線性探測再雜湊
這是di取值為1,2,3…m-1,缺點二次聚集,對查詢不利,優點是,只要hash表沒填滿,總能找到乙個不發生衝突的位址。
(2)、二次探測再雜湊
di取值為1,-1,22,-22,33,-33…kl,-kk ,其中k取值範圍為1-m/2。缺點只有當hash表長度為4j+3的素數時候才可能填滿。
(3)、偽隨機探測再雜湊
di取值為偽隨機數序列,hash表的效能取決於偽隨機序列。
2、再hash
當出現hash衝突時候使用其他hash函式計算位址,直到不衝突位置。
3、鏈位址法
hash表的每個元素成指向鍊錶的指標,每個插入元素總能找到乙個位置,便插入到鍊錶中。
4、建立乙個公共溢位區
當發生hash衝突將發生衝突的鍵值對放入溢位表中。
Hash表處理衝突的方法
1.開放定址 線性探測 hi hash key di mod m 1 i m 其中 hash key 為雜湊函式 m 為雜湊表長度 di 為增量序列1,2,m 1,且di i 二次探測 hi hash key di mod m 其中 hash key 為雜湊函式 m 為雜湊表長度,m 要求是某個4k...
hash衝突處理
1 衝突是如何產生的?上文中談到,雜湊函式是指如何對關鍵字進行編址的規則,這裡的關鍵字的範圍很廣,可視為無限集,如何保證無限集的原資料在編址的時候不會出現重複呢?規則本身無法實現這個目的。舉乙個例子,仍然用班級同學做比喻,現有如下同學資料 張三,李四,王五,趙剛,吳露.假如我們編址規則為取姓氏中姓的...
hash,解決hash衝突的方法
數字分析法 平方取中法 除留餘數法 偽隨機數法 線性探測 二次探測 偽隨機數探測 拉鍊探測。如果負載因子是預設的0.75,hashmap 16 的時候,佔16個記憶體空間,實際上只用到了12個,超過12個就擴容。如果負載因子是1的話,hashmap 16 的時候,佔16個記憶體空間,實際上會填滿16...