4.Hash_table.md
last update: 2025-06-09
Hash Table
(雜湊表)是一種透過「鍵(key)」快速存取資料的資料結構,內部透過 Hash Function
將 key 對應到一個陣列索引位置。它廣泛應用於字典、快取、資料庫索引等。
一、Hash Table 結構與術語
名稱
說明
key
鍵值,使用者提供的識別符號
value
對應的資料值
hash function
將 key 轉換為陣列索引的函數
bucket
儲存資料的儲存格,可能包含單一或多個元素(如用 linked list 處理衝突)
二、基本操作(CRUD)
1. 插入或更新(insert / put / set)
def put(self, key, value):
index = self.hash_function(key)
bucket = self.table[index]
for entry in bucket:
if entry[0] == key:
entry[1] = value
return
bucket.append([key, value])
2. 讀取資料(get / lookup)
def get(self, key):
index = self.hash_function(key)
bucket = self.table[index]
for entry in bucket:
if entry[0] == key:
return entry[1]
return None
3. 刪除(delete / remove)
def delete(self, key):
index = self.hash_function(key)
bucket = self.table[index]
for i, entry in enumerate(bucket):
if entry[0] == key:
del bucket[i]
return True
return False
三、Hash Function(雜湊函數)
def hash_function(self, key):
return hash(key) % self.capacity
一個良好的雜湊函數應該具備:
高分散性(減少碰撞)
快速計算
穩定輸出(同樣輸入產生相同結果)
四、碰撞處理(Collision Handling)
方法
說明
鏈結法(chaining)
每個 bucket 是一個 linked list,碰撞元素加入尾端
開放定址法(open addressing)
若發生碰撞,尋找下一個空位(如線性探查、二次探查)
五、Hash Table 特性
插入、查詢、刪除的平均時間複雜度為 O(1)
較差雜湊函數可能導致 O(n) 效能下降
動態調整容量與重新雜湊(Rehashing)可維持效率
六、Hash Table vs Array vs Linked List
特性
Hash Table
Array
Linked List
查找速度
O(1)
O(1)
O(n)
插入效率
O(1)
O(n)
O(1)
支援 key/value
✅
❌
部分支援
儲存方式
非連續
連續
非連續
Hash Table 是現代程式語言中 Dictionary、Map、Set 等資料結構的核心基礎,適合用於快速查找、資料關聯與去重等應用。
Last updated