前言 :
雜湊法這個主題通常被放在和搜尋法一起討論, 主要原因是雜湊法不僅被用於資料搜尋外, 在資料結構的領域中, 你還能將它用在資料的建立, 插入, 刪除與更新. 例如符號表在電腦上的應用很廣泛, 包含組譯程式, 編譯程式與資料庫使用的資料字典等, 都是利用提供的名稱來找到對應的屬性. 符號表依其特性可以分成兩類 : 靜態表 和動態表. 而雜湊表則是屬於靜態表的一種, 我們將相關資料與鍵值儲存在一個固定大小的表格中.
雜湊法簡介 :
基本上, 所謂雜湊法就是將本身的鍵值, 經由特定的數學運算或使用其他的方法, 轉換成相對應的資料儲存位址. 而雜湊所使用的數學函數就稱為 "雜湊函數". 現在我們來介紹有關雜湊函數的相關名詞 :
* Bucket (桶) :
* Slot (槽) :
* Collision (碰撞) :
* 溢位 :
* 雜奏表 :
儲
* 同義字 :
* 載入密度 (Loading Factor) :
* 完美雜湊 :
在此建議在設計雜湊函數應遵循底下幾個原則 :
1. 降低碰撞及溢位的產生.
2. 雜湊函數不宜過於複雜, 越容易計算越佳.
3. 盡量把文字的鍵值轉換成數字的鍵值, 以利雜湊函數的運算.
4. 所設計的雜湊函數計算所得的值, 盡量能均勻分布在每一桶中. 不要過度集中在某些桶內, 這樣就可以降低碰撞與減少溢位的處理.
三、範例與作業 10.3 Hashing (雜湊、碎映) Search
雜湊法這個主題通常被放在和搜尋法一起討論, 主要原因是雜湊法不僅被用於資料搜尋外, 在資料結構的領域中, 你還能將它用在資料的建立, 插入, 刪除與更新. 例如符號表在電腦上的應用很廣泛, 包含組譯程式, 編譯程式與資料庫使用的資料字典等, 都是利用提供的名稱來找到對應的屬性. 符號表依其特性可以分成兩類 : 靜態表 和動態表. 而雜湊表則是屬於靜態表的一種, 我們將相關資料與鍵值儲存在一個固定大小的表格中.
雜湊法簡介 :
基本上, 所謂雜湊法就是將本身的鍵值, 經由特定的數學運算或使用其他的方法, 轉換成相對應的資料儲存位址. 而雜湊所使用的數學函數就稱為 "雜湊函數". 現在我們來介紹有關雜湊函數的相關名詞 :
* Bucket (桶) :
* Slot (槽) :
* Collision (碰撞) :
* 溢位 :
* 雜奏表 :
儲
* 同義字 :
* 載入密度 (Loading Factor) :
* 完美雜湊 :
在此建議在設計雜湊函數應遵循底下幾個原則 :
1. 降低碰撞及溢位的產生.
2. 雜湊函數不宜過於複雜, 越容易計算越佳.
3. 盡量把文字的鍵值轉換成數字的鍵值, 以利雜湊函數的運算.
4. 所設計的雜湊函數計算所得的值, 盡量能均勻分布在每一桶中. 不要過度集中在某些桶內, 這樣就可以降低碰撞與減少溢位的處理.
三、範例與作業 10.3 Hashing (雜湊、碎映) Search
'''
ds-ex10.3(hash).ipynb by L.D.S on 2023/06
本程式為建立雜湊表
ex10.3-1 請修改以下程式,做雜湊搜尋,並列出每次的搜尋過程
ex10.3-2 請修改以下程式,將 38~43 行的設定值 改由人手鍵入 資料
'''
# Function to display hashtable
def display_hash(hashTable):
print ('目前建立的雜湊表 \n')
for i in range(len(hashTable)):
print(i, end = " ")
for j in hashTable[i]:
print("-->", end = " ")
print(j, end = " ")
print()
# Creating Hashtable as
# a nested list.
HashTable = [[] for _ in range(10)]
# Hashing Function to return
# key for every value.
def Hashing(keyvalue):
return keyvalue % len(HashTable)
# Insert Function to add
# values to the hash table
def insert(Hashtable, keyvalue, value):
print ('將 鍵值', keyvalue, '內容 ', value, '建到雜湊表中...\n')
hash_key = Hashing(keyvalue)
Hashtable[hash_key].append(value)
# Driver Code
insert(HashTable, 10, 'Allahabad')
insert(HashTable, 25, 'Mumbai')
insert(HashTable, 20, 'Mathura')
insert(HashTable, 9, 'Delhi')
insert(HashTable, 21, 'Punjab')
insert(HashTable, 21, 'Noida')
display_hash (HashTable)