雜湊表處理衝突的方法

2021-10-02 23:22:50 字數 1485 閱讀 6778

fi ( key ) = ( f ( key ) + di ) mod m (di=1,2,3,4,…,m-1)

會出現不是同義詞卻需要爭奪乙個位址的情況,我們稱這種情況為堆積。

關鍵字集合『12,67,56,16,25,37,22,29,15,47,48,34』下標0

1234

5678

91011關鍵字

1225

3715

1629

4867

5622

47當最後乙個key=34,f(key)=10,與22的位置衝突。可是22後面沒有空位了,雖然可以不斷求餘數後得到結果,但是效率太低了。

使用12,-12,22,-22,…,q2,-q2,q<=m/2就可以雙向尋找可能的空位子,增加平方運算時為了不讓關鍵字都聚集在某一塊區域。稱之為二次探測法。

fi ( key ) = ( f ( key ) + di ) mod m (di=12,-12,22,-22,…,q2,-q2,q<=m/2)

在衝突時,對於位移量di採用隨機函式計算得到,我們稱之為隨機函式。

這裡的隨機其實是偽隨機數。偽隨機是說如果我們設定的隨機種子相同,則不斷呼叫隨機函式可以生成乙個不會重複的數列。我們在查詢時候,用相同的隨機種子,它每次得到的數列都是相同的,相同的di當然可以得到相同的雜湊位址。

fi ( key ) = ( f ( key ) + di ) mod m (di是乙個隨機數列)

對於我們的雜湊函式來說,我們可以事先準備多個雜湊函式。

fi ( key ) = rhi ( key ) (i=1,2,…,k)

rhi 就是不同的雜湊函式,可以將前面說雜湊表查詢及其函式的除留餘數、摺疊、平方取中全部用上。每當出現雜湊位址衝突,就換乙個雜湊函式計算。這種方法能夠使得關鍵字不產生聚集,但是相應地會增加計算的時間。

思路換一下,為什麼有衝突就要換地方呢?我們直接在原地不行嗎?於是有了鏈位址法。

將所有關鍵字為同義詞的記錄儲存在乙個單鏈表中,我們稱之為同義詞子表,在雜湊表中只儲存所有同義詞子表的頭指標。

對於關鍵字集合,我們用前面的12作為除數,進行除留餘數法,可以得下如下結構:

鏈位址法對於可能造成很多衝突的雜湊函式來說,提供了絕不會出現找不到位址的保證。當然,這也就帶來了查詢時需要遍歷單鏈表的效能損耗。

這個方法更好理解,當發生衝突的時候,凡是衝突的跟我走,給這些衝突找個地兒呆著。我們為所有衝突的關鍵字建立乙個公共的溢位區來存放。

就前面的例子而言,我們共有三個關鍵字與之前的關鍵字有衝突,那麼將它們儲存在溢位表中。

雜湊表and處理衝突的方法

雜湊法又稱雜湊法 雜湊法以及關鍵字位址計算法等,相應的表稱為雜湊表。這種方法的基本思想是 首先在元素的關鍵字k和元素的儲存位置p之間建立乙個對應關係f,使得p f k f稱為雜湊函式。建立雜湊表時,把關鍵字為k的元素直接存入位址為f k 的單元 以後當查詢關鍵字為k的元素時,再利用雜湊函式計算出該元...

雜湊表(雜湊表)及雜湊表處理衝突的方法

前面介紹了靜態查詢表以及動態查詢表中的一些查詢方法,其查詢的過程都無法避免同查詢表中的資料進行比較,查詢演算法的效率很大程度取決於同表中資料的查詢次數。而本節所介紹的雜湊表可以通過關鍵字直接找到資料的儲存位置,不需要進行任何的比較,其查詢的效率相較於前面所介紹的查詢演算法是更高的。在初中的數學課本中...

雜湊表及處理衝突的方法

雜湊法又稱 雜湊法 雜湊法以及關鍵字位址計算法 等,相應的表稱為 雜湊表。這種方法的基本思想是 首先在元素的關鍵字 k 和元素的儲存位置 p 之間建立乙個對應關係 f 使得 p f k f 稱為雜湊函式 建立雜湊表時,把關鍵字為 k 的元素 直接存入位址為 f k 的單元 以後當查詢關鍵字為 k 的...