解決雜湊衝突的方法

2022-08-20 02:18:12 字數 1476 閱讀 4882

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

hi=(h(key)+di)% m   i=1,2,…,n

其中h(key)為雜湊函式,m 為表長,di稱為增量序列。增量序列的取值方式不同,相應的再雜湊方式也不同。

主要有以下三種:

1.線性探測再雜湊

2.二次探測再雜湊

di=12,-12,22,-22,…,k2,-k2    ( k<=m/2)

這種方法的特點是:衝突發生時,在表的左右進行跳躍式探測,比較靈活。

3.偽隨機探測再雜湊

di=偽隨機數序列。

具體實現時,應建立乙個偽隨機數發生器,(如i=(i+p) % m),並給定乙個隨機數做起點。

從上述例子可以看出,線性探測再雜湊容易產生「二次聚集」,即在處理同義詞的衝突時又導致非同義詞的衝突。例如,當表中i, i+1 ,i+2三個單元已滿時,下乙個雜湊位址為i, 或i+1 ,或i+2,或i+3的元素,都將填入i+3這同乙個單元,而這四個元素並非同義詞。線性探測再雜湊的優點是:只要雜湊表不滿,就一定能找到乙個不衝突的雜湊位址,而二次探測再雜湊和偽隨機探測再雜湊則不一定。

拉鍊法解決衝突的做法是:將所有關鍵字為同義詞的結點鏈結在同乙個單鏈表中。若選定的雜湊表長度為m,則可將雜湊表定義為乙個由m個頭指標組成的指標數 組t[0..m-1]。凡是雜湊位址為i的結點,均插入到以t[i]為頭指標的單鏈表中。t中各分量的初值均應為空指標。

特點

這種方法是同時構造多個不同的雜湊函式:

hi=rh1(key)  i=1,2,…,k
當雜湊位址hi=rh1(key)發生衝突時,再計算hi=rh2(key)……,直到衝突不再產生。這種方法不易產生聚集,但增加了計算時間。

這種方法的基本思想是:將雜湊表分為基本表溢位表兩部分,凡是和基本表發生衝突的元素,一律填入溢位表

答案為c  ;在threadlocalmap中的雜湊值分散得十分均勻,很少會出現衝突。並且threadlocalmap經常需要清除無用的物件,使用純陣列更加方便;threadlocal 使用開放位址法 - 線性探測法:當前雜湊槽有其他物件佔了,順著陣列索引尋找下乙個,直到找到為止;hashset 中呼叫 hashmap 來儲存資料的,hashmap 採用的鏈位址法:當雜湊槽中有其他物件了,使用鍊錶的方式連線到那個物件上。

解決雜湊衝突的方法

在實際的應用中,選取合適的雜湊函式可減少衝突,但衝突是不可避免的。所以我就想給大家說幾種解決雜湊衝突的方法啦 首先就是開放定址法,用這個方法處理衝突的核心思想就是在衝突發生的時候,形成乙個位址序列,順著這個序列挨個去檢查探測,一直等到找到乙個 空 的開放位址。把我們發生衝突的關鍵字值存放到這個 空 ...

解決雜湊衝突的方法

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

解決雜湊衝突的方法

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