構造哈希表以及二次探測法

構造哈希表的幾種方法

直接定址法

f(key) = a × key + b

除留余數法

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

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

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

開發(fā)定址法

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

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

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

  • 二次探測法
    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的平方

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

因為 f(49) = 5 與 f(38) 沖突
所以需要采用二次探測再散列來處理沖突
(f(49) + di) MOD 14(哈希表長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 沒有沖突
所以 addr(49)=9
  • 鏈地址法

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

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

相關閱讀更多精彩內容

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

友情鏈接更多精彩內容