首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

資料結構:雜湊函數設計與衝突處理策略

     編輯:DB2 教學

資料結構:雜湊函數設計與衝突處理策略

雜湊查找核心思想

建立關鍵字與儲存位址的確定對應關係 H(key) → address,查找時間複雜度可達 O(1)。優於循序查找 O(n) 與樹狀查找 O(log n)。

雜湊函數構造方法

方法公式/描述特點
直接定址法H(key) = key 或 a×key + b無衝突,但需預知關鍵字分佈,實用性低
數位分析法取關鍵字若干位或組合適合分佈已知的靜態資料集
平方取中法關鍵字平方後取中間幾位適用於關鍵字分佈不均勻情況
摺疊法分割等長部分疊加求和適用於關鍵字位數較多
除留餘數法 (最常用)H(key) = key MOD p, p ≤ mp 取質數或不含小於 20 質因子的合數,接近表長 m
隨機數法H(key) = random(key)關鍵字長度不等時適用

好函數標準:構造簡單、雜湊地址均勻分佈 (均勻雜湊函數)、衝突少。

衝突處理策略

1. 開放定址法

Hi = (H(key) + di) MOD m, i = 1..k

  • 線性探測:di = 1,2,3... — 易產生「堆積」
  • 二次探測:di = 1²,-1²,2²,-2²... — 減少堆積
  • 偽隨機探測:di 為偽隨機序列

2. 再雜湊法

構造多個雜湊函數 RHi,衝突時依序嘗試 RH1, RH2...。優點:不易堆積;缺點:計算時間增加。

3. 鏈結法 (最常用)

同義詞存入單鏈表,雜湊表儲存頭指標陣列 RecNode *linkhash[m]。插入/查找/刪除皆在鏈表操作,負載因子可 > 1。

雜湊查找效能分析

平均查找長度 (ASL) 取決於:

  • 雜湊函數品質 (影響衝突頻率)
  • 衝突處理方法 (各方法 ASL 公式不同)
  • 裝填因子 α = 表中記錄數 / 雜湊表長度 — α 越小衝突越少,α 越大比較次數越多

結論:ASL 與裝填因子相關,與記錄總數無關。設計核心在於「好函數 + 適當衝突處理 + 控制 α」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved