1. 程式人生 > 其它 >雜湊衝突筆記

雜湊衝突筆記

雜湊衝突

雜湊衝突的產生原因

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

解決雜湊衝突的四種方法

1.開放地址方法

(1)線性探測

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

(2)再平方探測

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

(3)偽隨機探測

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

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

對於相同的值,使用連結串列進行連線。使用陣列儲存每一個連結串列。

優點:

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

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

(3)而拉鍊法中可取α≥1,且結點較大時,拉鍊法中增加的指標域可忽略不計,因此節省空間

開放定址法為減少衝突,要求裝填因子α較小,故當結點規模較大時會浪費很多空間

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

缺點:

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

3.建立公共溢位區

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

4.再雜湊法

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

儲存redis相關筆記