解決哈希沖突的方法

https://blog.csdn.net/xtzmm1215/article/details/47177701
https://blog.csdn.net/afterlife_qiye/article/details/47976917

首先在元素的關(guān)鍵字k和元素的存儲(chǔ)位置p之間建立一個(gè)對(duì)應(yīng)關(guān)系f厨喂,使得p=f(k),f稱為哈希函數(shù)嗜诀。創(chuàng)建哈希表時(shí),把關(guān)鍵字為k的元素直接存入地址為f(k)的單元;以后當(dāng)查找關(guān)鍵字為k的元素時(shí)筛婉,再利用哈希函數(shù)計(jì)算出該元素的存儲(chǔ)位置p=f(k)判沟,從而達(dá)到按關(guān)鍵字直接存取元素的目的在孝。
沖突:當(dāng)關(guān)鍵字集合很大時(shí)唾糯,關(guān)鍵字值不同的元素可能會(huì)映象到哈希表的同一地址上怠硼,即 k1≠k2 ,但 H(k1)=H(k2)趾断,這種現(xiàn)象稱為沖突拒名,此時(shí)稱k1和k2為同義詞。
哈希法主要包括以下兩方面的內(nèi)容:
1)如何構(gòu)造哈希函數(shù)
2)如何處理沖突芋酌。
本文介紹解決沖突的辦法

開放定址法

這種方法也稱再散列法,其基本思想是:當(dāng)關(guān)鍵字key的哈希地址p=H(key)出現(xiàn)沖突時(shí)雁佳,以p為基礎(chǔ)脐帝,產(chǎn)生另一個(gè)哈希地址p1,如果p1仍然沖突糖权,再以p為基礎(chǔ)堵腹,產(chǎn)生另一個(gè)哈希地址p2,…星澳,直到找出一個(gè)不沖突的哈希地址pi 疚顷,將相應(yīng)元素存入其中。這種方法有一個(gè)通用的再散列函數(shù)形式:

    Hi=(H(key)+di)% m   i=1,2腿堤,…阀坏,n
    其中H(key)為哈希函數(shù),m 為表長笆檀,di稱為增量序列忌堂。增量序列的取值方式不同,相應(yīng)的再散列方式也不同酗洒。

主要有以下三種:
線性探測(cè)再散列

dii=1士修,2,3樱衷,…棋嘲,m-1

這種方法的特點(diǎn)是:沖突發(fā)生時(shí),順序查看表中下一單元矩桂,直到找出一個(gè)空單元或查遍全表封字。

二次探測(cè)再散列

di=12,-12耍鬓,22阔籽,-22,…牲蜀,k2笆制,-k2    ( k<=m/2 )

這種方法的特點(diǎn)是:沖突發(fā)生時(shí),在表的左右進(jìn)行跳躍式探測(cè)涣达,比較靈活在辆。

偽隨機(jī)探測(cè)再散列

di=偽隨機(jī)數(shù)序列。

具體實(shí)現(xiàn)時(shí)度苔,應(yīng)建立一個(gè)偽隨機(jī)數(shù)發(fā)生器匆篓,(如i=(i+p) % m),并給定一個(gè)隨機(jī)數(shù)做起點(diǎn)寇窑。

從上述例子可以看出鸦概,線性探測(cè)再散列容易產(chǎn)生“二次聚集”,即在處理同義詞的沖突時(shí)又導(dǎo)致非同義詞的沖突甩骏。例如窗市,當(dāng)表中i, i+1 ,i+2三個(gè)單元已滿時(shí),下一個(gè)哈希地址為i, 或i+1 ,或i+2饮笛,或i+3的元素咨察,都將填入i+3這同一個(gè)單元,而這四個(gè)元素并非同義詞福青。線性探測(cè)再散列的優(yōu)點(diǎn)是:只要哈希表不滿摄狱,就一定能找到一個(gè)不沖突的哈希地址脓诡,而二次探測(cè)再散列和偽隨機(jī)探測(cè)再散列則不一定。

鏈地址法

拉鏈法解決沖突的做法是:將所有關(guān)鍵字為同義詞的結(jié)點(diǎn)鏈接在同一個(gè)單鏈表中媒役。若選定的散列表長度為m祝谚,則可將散列表定義為一個(gè)由m個(gè)頭指針組成的指針數(shù) 組T[0..m-1]。凡是散列地址為i的結(jié)點(diǎn)刊愚,均插入到以T[i]為頭指針的單鏈表中踊跟。T中各分量的初值均應(yīng)為空指針。
特點(diǎn)

  • 拉鏈法處理沖突簡(jiǎn)單鸥诽,且無堆積現(xiàn)象商玫,即非同義詞決不會(huì)發(fā)生沖突,因此平均查找長度較短牡借;
  • 由于拉鏈法中各鏈表上的結(jié)點(diǎn)空間是動(dòng)態(tài)申請(qǐng)的拳昌,故它更適合于造表前無法確定表長的情況;

再哈希法

這種方法是同時(shí)構(gòu)造多個(gè)不同的哈希函數(shù):

Hi=RH1(key)  i=1钠龙,2炬藤,…,k

當(dāng)哈希地址Hi=RH1(key)發(fā)生沖突時(shí)碴里,再計(jì)算Hi=RH2(key)……沈矿,直到?jīng)_突不再產(chǎn)生。這種方法不易產(chǎn)生聚集咬腋,但增加了計(jì)算時(shí)間羹膳。

建立一個(gè)公共溢出區(qū)

這種方法的基本思想是:將哈希表分為基本表溢出表兩部分,凡是和基本表發(fā)生沖突的元素根竿,一律填入溢出表

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陵像,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寇壳,更是在濱河造成了極大的恐慌醒颖,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壳炎,死亡現(xiàn)場(chǎng)離奇詭異泞歉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)冕广,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門疏日,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撒汉,你說我怎么就攤上這事√樽蹋” “怎么了睬辐?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我溯饵,道長侵俗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任丰刊,我火速辦了婚禮隘谣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啄巧。我一直安慰自己寻歧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布秩仆。 她就那樣靜靜地躺著码泛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澄耍。 梳的紋絲不亂的頭發(fā)上噪珊,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音齐莲,去河邊找鬼痢站。 笑死,一個(gè)胖子當(dāng)著我的面吹牛选酗,可吹牛的內(nèi)容都是我干的阵难。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼星掰,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼多望!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起氢烘,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤怀偷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后播玖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椎工,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年蜀踏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了维蒙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡果覆,死狀恐怖颅痊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情局待,我是刑警寧澤斑响,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布菱属,位于F島的核電站,受9級(jí)特大地震影響舰罚,放射性物質(zhì)發(fā)生泄漏纽门。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一营罢、第九天 我趴在偏房一處隱蔽的房頂上張望赏陵。 院中可真熱鬧,春花似錦饲漾、人聲如沸蝙搔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杂瘸。三九已至,卻和暖如春伙菊,著一層夾襖步出監(jiān)牢的瞬間败玉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工镜硕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留运翼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓兴枯,卻偏偏與公主長得像血淌,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子财剖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一.概念 哈希表就是一種以 鍵-值(key-indexed) 存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)悠夯,我們只要輸入待查找的值即key,即可...
    lfp901020閱讀 2,990評(píng)論 0 2
  • 哈希表定義 散列表(Hash table夕膀,也叫哈希表),是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪問的數(shù)據(jù)結(jié)...
    n油炸小朋友閱讀 4,867評(píng)論 0 22
  • 哈希表:即散列存儲(chǔ)結(jié)構(gòu)美侦。散列法存儲(chǔ)的基本思想:建立記錄關(guān)鍵碼字與其存儲(chǔ)位置的對(duì)應(yīng)關(guān)系产舞,或者說,由關(guān)鍵碼的值決定數(shù)據(jù)...
    linbj閱讀 6,351評(píng)論 1 5
  • 關(guān)于哈希表里面的這些個(gè)定址和解決沖突的方法名詞我一直記不住菠剩,今天閑下來就花點(diǎn)時(shí)間來學(xué)習(xí)之易猫、記錄之、分享之具壮。 哈希函...
    風(fēng)信子丶閱讀 8,957評(píng)論 0 11