哈希表處理沖突的幾種方式


1、鏈地址法

指把所有的沖突關鍵字存儲在一個線性鏈表中,這個鏈表由其散列地址唯一標識。

2、開放定址法 

開放地址法通常需要有三種方法:線性探測、二次探測、再哈希法。

線性探測 

線性探測方法就是線性探測空白單元。當數據通過哈希函數計算應該放在700這個位置,但是700這個位置已經有數據了,那么接下來就應該查看701位置是否空閑,再查看702位置,依次類推。 

當哈希表越來越滿時聚集越來越嚴重,這導致產生非常長的探測長度,后續的數據插入將會非常費時。 

線性探測就是使用算術取余的方法計算余數,當產生沖突時就通過線性遞增的方法進行探測,一直到數組的位置為空,插入數據項即可。

二次探測 

 二次探測是過程是x+1,x+4,x+9,以此類推。二次探測的步數是原始位置相隔的步數的平方。

二次探測可以消除在線性探測中產生的聚集問題,但是二次探測還是會產生一種更明確更細的聚集。二次聚集的產生是在二次探測的基礎上產生的現象。例如N個數據經hash函數計算后都映射到到數組下標10,探測第二個數字需要以一步長,第三個數字需要以4步長為單位,第四個數字則需要以九為步長。好在二次探測並不常用,解決聚集問題還是有一種更好的辦法:再哈希法。

再哈希法

再哈希是把關鍵字用不同的哈希函數再做一遍哈希化,用這個結果作為步長,對指定的關鍵字,探測的步長是不變的,可以說不同的關鍵字可以使用不同的步長,並且步長可以控制。一般來說,再哈希函數可以采用以下這種:stepSize=constant-(key%constant);

3、再散列法

當發生沖突時,利用另一個哈希函數再次計算一個地址。直到沖突不再發生。

4、建立一個公共溢出區

一旦由哈希函數得到的地址沖突,就都填入溢出表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM