線性探測再散列


 https://blog.csdn.net/qq_19446965/article/details/102290770

 

哈希表又稱散列表。哈希表存儲的基本思想是:以數據表中的每個記錄的關鍵字 k為自變量,通過一種函數H(k)計算出函數值。把這個值解釋為一塊連續存儲空間(即數組空間)的單元地址(即下標),將該記錄存儲到這個單元中。在此稱該函數H為哈希函數或散列函數。按這種方法建立的表稱為哈希表或散列表。

處理沖突的方法:

開放尋址法:Hi=(H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其中H(key)為散列函數,m為散列表長,di為增量序列,可有下列三種取法:

1.di=1,2,3,…, m-1,稱線性探測再散列;

2.di=1^2, -1^2, 2^2,-2^2, 3^2, …, ±(k)^2,(k<=m/2)稱二次探測再散列;

3.di=偽隨機數序列,稱偽隨機探測再散列。

再散列法:Hi=RHi(key), i=1,2,…,k. RHi均是不同的散列函數,即在同義詞產生地址沖突時計算另一個散列函數地址,直到沖突不再發生,這種方法不易產生“聚集”,但增加了計算時間;

鏈地址法(拉鏈法):將所有關鍵字為同義詞的記錄存儲在同一線性鏈表中;

 

 

設哈希表長為14,哈希函數是H(key)=key%11,表中已有數據的關鍵字為15,38,61,84共四個,現要將關鍵字為49的結點加到表中,用二次探測再散列法解決沖突,則放入的位置是( ) 【南京理工大學 2001 一、15 (1.5分)】

A.8 B.3 C.5 D.9
答案為A,為什么我計算出來是D呢?
我的計算步驟如下:
15,38,61,84用哈希函數H(key)=key%11計算后得地址:4,5,6,7
49計算后為5,發生沖突.
用二次探測再散列法解決沖突:
1:(key+1^2)%11=(49+1)%11=6,仍然發生沖突.
2:(key-1^2)%11=(49-1)%11=4,仍然發生沖突.
3:(key+2^2)%11=(49+4)%11=9,不再發生沖突.
得出結果為D


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM