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