解決雜湊衝突的方法

2021-08-19 05:04:11 字數 1826 閱讀 4532

在實際的應用中,選取合適的雜湊函式可減少衝突,但衝突是不可避免的。所以我就想給大家說幾種解決雜湊衝突的方法啦~

首先就是開放定址法,用這個方法處理衝突的核心思想就是在衝突發生的時候,形成乙個位址序列,順著這個序列挨個去檢查探測,一直等到找到乙個「空」的開放位址。把我們發生衝突的關鍵字值存放到這個「空」位址中去。這個位址的演算法一般就是:hi=(h(key)+di)%m    這裡面的i=1,2,。。。k。k要<=m-1;i是探測次數。不難理解,h(key)是關鍵字是key的雜湊函式,加上di(每次再探測時的位址增量)對這個雜湊表的長度做取餘數的運算。根據di的取法不同,就可以得到不同的開放位址處理衝突探測的方法~

形成探測序列的方法很多,比如線性探測法、二次探測法、雙雜湊函式探測法。

二次探測法的位址增量序列為di=1^2,-1^2,2^2,-2^2,....q^2,-q^2,(q小於等於m/2,i為d的下標),這是一種較好的處理衝突的方法,它能夠避免「聚集」現象。它的缺點就是不能探測到雜湊表上的所有儲存單元,但至少能探測到一半的儲存單元。

雙雜湊函式探測法:hi=(h(key)+i*rh(key))%m  (i=1,2,...,m-1).其中,h(key),r

h(key)是兩個雜湊函式,m為雜湊長度。這個方法使用兩個雜湊函式,先用第乙個函式h(key)對關鍵字計算雜湊位址,一旦產生位址衝突,在用第二個函式rh(key)

確定移動的步長因子,最後,通過步長因子序列由探測函式尋找空餘的雜湊位址。

那我就只說線性探測咯,比較基礎易懂。

線性探測法:當雜湊函式產生的資料元素的雜湊位址中已有資料元素存在時,就是發生了衝突,從下一位址序列中尋找可以用的儲存空間來儲存資料元素。

關於線性探測法,我們舉個例子吧!

假設有乙個關鍵字集合,s=,使用雜湊法儲存該集合,選取的雜湊函式為:h(k)=k%m,即用資料元素的關鍵字k去整除雜湊表的長度m,取餘數作為儲存該資料元素的雜湊位址,其中,k和m均為正整數,並m要大於等於集合長度n。此時,n=5,m=11,所以每個元素的雜湊位址以此為5,10,8,2,7.吧這幾個數就放到0~10中相應數字的位置。這個時候,向剛剛構造的雜湊表中插入27,50兩個元素。若發生衝突就用線性探測發處理。27的雜湊位址為5,已經被占用,接著探查下乙個,即下標為6的儲存單元,該單元空,所以把27放在6裡,這個時候再看50的雜湊位址為6,6已經被27占用,就接著探查下乙個,發現7被40占用,就繼續探測,一直到9,發現空閒,就把50放在9裡。

用線性探測法處理衝突,思路清晰,演算法簡單,但存在下列缺點:

① 處理溢位需另程式設計序。一般可另外設立乙個溢位表,專門用來存放上述雜湊表中放不下的記錄。此溢位表最簡單的結構是順序表,查詢方法可用順序查詢。

② 按上述演算法建立起來的雜湊表,刪除工作非常困難。如果將此元素刪除,查詢的時會發現空槽,則會認為要找的元素不存在。只能標上已被刪除的標記,否則,將會影響以後的查詢。

③ 線性探測法很容易產生堆聚現象。所謂堆聚現象,就是存入雜湊表的記錄在表中連成一片。按照線性探測法處理衝突,如果生成雜湊位址的連續序列愈長 ( 即不同關鍵字值的雜湊位址相鄰在一起愈長 ) ,則當新的記錄加入該錶時,與這個序列發生衝突的可能性愈大。因此,雜湊位址的較長連續序列比較短連續序列生長得快,這就意味著,一旦出現堆聚 ( 伴隨著衝突 ) ,就將引起進一步的堆聚。

線性再雜湊法是形式最簡單的處理衝突的方法。插入元素時,如果發生衝突,演算法會簡單的從該槽位置向後迴圈遍歷hash表,直到找到表中的下乙個空槽,並將該元素放入該槽中(會導致相同hash值的元素挨在一起和其他hash值對應的槽被占用)

。查詢元素時,首先雜湊值所指向的槽,如果沒有找到匹配,則繼續從該槽

遍歷hash表,直到:(1)找到相應的元素;(2)找到乙個空槽,指示查詢的元素不存在,(所以不能隨便刪除元素);(3)整個hash表遍歷完畢(指示該元素不存在並且hash表是滿的)

解決雜湊衝突的方法

開放定址法和鏈位址法 開放定址法 當衝突發生時,使用某種探查 亦稱探測 技術在雜湊表中形成乙個探查 測 序列。沿此序列逐個單元地查詢,直到找到給定 的關鍵字,或者碰到乙個開放的位址 即該位址單元為空 為止 若要插入,在探查到開放的位址,則可將待插入的新結點存人該位址單元 查詢時探查到開放的 位址則表...

解決雜湊衝突的方法

解決雜湊衝突的方法 1 開放定址法 當衝突發生時使用某種探查技術在雜湊表中形成乙個探查序列。沿此序列逐個單元的查詢,直到找到給定的關鍵字,或者碰到乙個開放的位址為止。線性探測法 挨個向後找。線性補償探測法 將步長從1改為q,要求q與m互質。j j q m 隨機探測法 步長改為隨機數。雙重雜湊法 又稱...

解決雜湊衝突的方法

這種方法也稱再雜湊法,其基本思想是 當關鍵字key的雜湊位址p h key 出現衝突時,以p為基礎,產生另乙個雜湊位址p1,如果p1仍然衝突,再以p為基礎,產生另乙個雜湊位址p2,直到找出乙個不衝突的雜湊位址pi 將相應元素存入其中。這種方法有乙個通用的再雜湊函式形式 hi h key di m i...