雜湊衝突及四種解決方法

2021-10-09 21:08:49 字數 851 閱讀 6428

通過雜湊函式產生的雜湊值是有限的,而資料可能比較多,導致經過雜湊函式處理後仍然有不同的資料對應相同的值。這時候就產生了雜湊衝突。

就是根據key即經過乙個函式f(key)得到的結果的作為位址去存放當前的key value鍵值對(這個是hashmap的存值方式),但是卻發現算出來的位址上已經有人先來了。就是說這個地方要擠一擠啦。這就是所謂的hash衝突啦

對應不同的關鍵字可能獲得相同的hash位址,即 key1≠key2,但是f(key1)=f(key2)。這種現象就是衝突,而且這種衝突只能盡可能的減少,不能完全避免。因為雜湊函式是從關鍵字集合和位址集合的映像,通常關鍵字集合比較大,而位址集合的元素僅為雜湊表中的位址值。

1.開放位址方法

按順序決定值時,如果某資料的值已經存在,則在原來值的基礎上往後加乙個單位,直至不發生雜湊衝突。 

按順序決定值時,如果某資料的值已經存在,則在原來值的基礎上先加1的平方個單位,若仍然存在則減1的平方個單位。隨之是2的平方,3的平方等等。直至不發生雜湊衝突。

按順序決定值時,如果某資料已經存在,通過隨機函式隨機生成乙個數,在原來值的基礎上加上隨機數,直至不發生雜湊衝突。

2.鏈式位址法(hashmap的雜湊衝突解決方法)

對於相同的值,使用鍊錶進行連線。使用陣列儲存每乙個鍊錶。

優點:缺點:

指標占用較大空間時,會造成空間浪費,若空間用於增大雜湊表規模進而提高開放位址法的效率。

3.建立公共溢位區

建立公共溢位區儲存所有雜湊衝突的資料。

4.再雜湊法

對於衝突的雜湊值再次進行雜湊處理,直至沒有雜湊衝突。

雜湊衝突及四種解決方法

雜湊是通過對資料進行再壓縮,提高效率的一種解決方法。但由於通過雜湊函式產生的雜湊值是有限的,而資料可能比較多,導致經過雜湊函式處理後仍然有不同的資料對應相同的值。這時候就產生了雜湊衝突。裝填因子 裝填因子 資料總數 雜湊表長 雜湊函式 處理衝突的方法 1.開放位址方法 1 線性探測 按順序決定值時,...

面試題延伸 之 雜湊衝突及四種解決方法

最近看了布隆去重原理,發現乙個詞雜湊衝突特意去查了下 參考雜湊衝突的產生原因雜湊是通過對資料進行再壓縮,提高效率的一種解決方法。但由於通過雜湊函式產生的雜湊值 是有限的,而資料可能比較多,導致經過雜湊函式處理後仍然有不同的資料對應相同的雜湊值。這時候就產生了雜湊衝突。產生雜湊衝突的影響因素裝填因子 ...

解決雜湊衝突的四種辦法

雜湊是通過對資料進行再壓縮,提高效率的一種解決方法。但由於通過雜湊函式產生的雜湊值是有限的,而資料可能比較多,導致經過雜湊函式處理後仍然有不同的資料對應相同的雜湊值。這時候就產生了雜湊衝突。裝填因子 裝填因子 資料總數 雜湊表長 雜湊函式 處理衝突的方法 解決雜湊衝突的四種方法 1 線性探測 按順序...