建立關鍵字與儲存位址的確定對應關係 H(key) → address,查找時間複雜度可達 O(1)。優於循序查找 O(n) 與樹狀查找 O(log n)。
| 方法 | 公式/描述 | 特點 |
|---|---|---|
| 直接定址法 | H(key) = key 或 a×key + b | 無衝突,但需預知關鍵字分佈,實用性低 |
| 數位分析法 | 取關鍵字若干位或組合 | 適合分佈已知的靜態資料集 |
| 平方取中法 | 關鍵字平方後取中間幾位 | 適用於關鍵字分佈不均勻情況 |
| 摺疊法 | 分割等長部分疊加求和 | 適用於關鍵字位數較多 |
| 除留餘數法 (最常用) | H(key) = key MOD p, p ≤ m | p 取質數或不含小於 20 質因子的合數,接近表長 m |
| 隨機數法 | H(key) = random(key) | 關鍵字長度不等時適用 |
好函數標準:構造簡單、雜湊地址均勻分佈 (均勻雜湊函數)、衝突少。
Hi = (H(key) + di) MOD m, i = 1..k
di = 1,2,3... — 易產生「堆積」di = 1²,-1²,2²,-2²... — 減少堆積di 為偽隨機序列構造多個雜湊函數 RHi,衝突時依序嘗試 RH1, RH2...。優點:不易堆積;缺點:計算時間增加。
同義詞存入單鏈表,雜湊表儲存頭指標陣列 RecNode *linkhash[m]。插入/查找/刪除皆在鏈表操作,負載因子可 > 1。
平均查找長度 (ASL) 取決於:
結論:ASL 與裝填因子相關,與記錄總數無關。設計核心在於「好函數 + 適當衝突處理 + 控制 α」。