構(gòu)造哈希表以及二次探測(cè)法

構(gòu)造哈希表的幾種方法

直接定址法

f(key) = a × key + b

除留余數(shù)法

f( key ) = key mod p ( p ≤ m )

mod是取模(求余數(shù))的意思。事實(shí)上,這方法不僅可以對(duì)關(guān)鍵字直接取模,也可在折疊、平方取中后再取模。
1. 平方取中法
2. 折疊法
3. 隨機(jī)數(shù)法
4. 數(shù)學(xué)分析法

哈希沖突(碰撞)以及處理

開(kāi)發(fā)定址法

所謂的開(kāi)放定址法就是一旦發(fā)生了沖突,就去尋找下一個(gè)空的散列地址,只要散列表足夠大,空的散列地址總能找到,并將記錄存入。

  • 線(xiàn)性探測(cè)法
    f(key) = (f(key)+di) MOD m (di=1,2,3,......,m-1)

用開(kāi)放定址法解決沖突的做法是:當(dāng)沖突發(fā)生時(shí),使用某種探測(cè)技術(shù)在散列表中形成一個(gè)探測(cè)序列。沿此序列逐個(gè)單元地查找,直到找到給定的關(guān)鍵字,或者碰到一個(gè)開(kāi)放的地址(即該地址單元為空)為止(若要插入,在探查到開(kāi)放的地址,則可將待插入的新結(jié)點(diǎn)存人該地址單元)。查找時(shí)探測(cè)到開(kāi)放的地址則表明表中無(wú)待查的關(guān)鍵字,即查找失敗。

  • 二次探測(cè)法
    f(key) = (f(key)+di) MOD m (di = 1^2, -1^2, 2^2, -2^2,……, q^2, -q^2, q <= m/2)

注:1^2 表示是 1的平方

設(shè)哈希表長(zhǎng)m=14,哈希函數(shù)H(key)=key%11。表中已有4個(gè)結(jié)點(diǎn):addr(15)=4,addr(38)=5,addr(61)=6,addr(84)=7,其余地址為空。如果用二次探測(cè)再散列處理沖突,關(guān)鍵字為49的結(jié)點(diǎn)的地址是?

因?yàn)?f(49) = 5 與 f(38) 沖突
所以需要采用二次探測(cè)再散列來(lái)處理沖突
(f(49) + di) MOD 14(哈希表長(zhǎng)m=14)

第一次 di = 1^2
(5 + 1)MOD 14 = 6  與addr(61)=6沖突
第二次 di = -1^2
(5 - 1)MOD 14 = 4  與addr(15)=4 沖突
第三次 di = 2^2
 (5 + 4)MOD 14 = 9 沒(méi)有沖突
所以 addr(49)=9
  • 鏈地址法

前面我們談到了散列沖突處理的開(kāi)放定址法,它的思路就是一旦發(fā)生了沖突,就去尋找下一個(gè)空的散列地址。那么,有沖突就非要換地方呢,我們直接就在原地處理行不行呢?
答案是可以的,就是鏈地址法,就好比Java里的HashMap的數(shù)據(jù)結(jié)構(gòu)一樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 哈希表定義 散列表(Hash table,也叫哈希表),是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪(fǎng)問(wèn)的數(shù)據(jù)結(jié)...
    n油炸小朋友閱讀 5,044評(píng)論 0 22
  • 哈希表:即散列存儲(chǔ)結(jié)構(gòu)。散列法存儲(chǔ)的基本思想:建立記錄關(guān)鍵碼字與其存儲(chǔ)位置的對(duì)應(yīng)關(guān)系,或者說(shuō),由關(guān)鍵碼的值決定數(shù)據(jù)...
    linbj閱讀 6,656評(píng)論 1 5
  • 一、概述 根據(jù)設(shè)定的哈希函數(shù)H(key)和處理沖突的方法將一組關(guān)鍵字影像到一個(gè)有限的連續(xù)的地址集(區(qū)間)上,并以關(guān)...
    12313凱皇閱讀 17,177評(píng)論 0 3
  • 基本概念 基于線(xiàn)性表、樹(shù)表結(jié)構(gòu)的查找方法,這類(lèi)查找方法都是以關(guān)鍵字的比較為基礎(chǔ)的。在查找過(guò)程中只考慮各元素關(guān)鍵字之...
    官先生Y閱讀 581評(píng)論 0 2
  • 一.概念 哈希表就是一種以 鍵-值(key-indexed) 存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu),我們只要輸入待查找的值即key,即可...
    lfp901020閱讀 3,155評(píng)論 0 2

友情鏈接更多精彩內(nèi)容