雜湊衝突及四種解決方法

2021-10-10 06:20:24 字數 879 閱讀 7620

雜湊是通過對資料進行再壓縮,提高效率的一種解決方法。但由於通過雜湊函式產生的雜湊值是有限的,而資料可能比較多,導致經過雜湊函式處理後仍然有不同的資料對應相同的值。這時候就產生了雜湊衝突。

裝填因子(裝填因子=資料總數 / 雜湊表長)、雜湊函式、處理衝突的方法

1.開放位址方法

(1)線性探測

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

(2)再平方探測

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

(3)偽隨機探測

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

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

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

優點:(1)拉鍊法處理衝突簡單,且無堆積現象,即非同義詞決不會發生衝突,因此平均查詢長度較短;

(2)由於拉鍊法中各煉表上的結點空間是動態申請的,故它更適合於造表前無法確定表長的情況;

(3)開放定址法為減少衝突,要求裝填因子α較小,故當結點規模較大時會浪費很多空間。而拉鍊法中可取α≥1,且結點較大時,拉鍊法中增加的指標域可忽略不計,因此節省空間;

(4)在用拉鍊法構造的雜湊表中,刪除結點的操作易於實現。只要簡單地刪去鍊錶上相應的結點即可。

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

3.建立公共溢位區

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

4.再雜湊法

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

雜湊衝突及四種解決方法

通過雜湊函式產生的雜湊值是有限的,而資料可能比較多,導致經過雜湊函式處理後仍然有不同的資料對應相同的值。這時候就產生了雜湊衝突。就是根據key即經過乙個函式f key 得到的結果的作為位址去存放當前的key value鍵值對 這個是hashmap的存值方式 但是卻發現算出來的位址上已經有人先來了。就...

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

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

解決雜湊衝突的四種辦法

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