資料結構與演算法25-散列表查詢(雜湊表)
散列表查詢(雜湊表)
我們只需要能過某個函式f,使得儲存位置=f(關鍵字)
那樣我們可以通過查詢關鍵字不需要比較就可獲得需要的記錄的儲存位置。這就是一種新的儲存技術-----雜湊技術。
雜湊技術是在記錄的儲存位置和它的關鍵字之間建立一個確定的對應關係f,使得每個關鍵字key對應一個儲存位置f(key)。查詢時,根據這個確定的對應關係找到給定值key的對映f(key),若查詢集合中存在這個記錄,則必定在f(key)的位置上。
這裡我們把這種對應關係f稱為雜湊函式,又稱為雜湊(Hash)函式。按這個思想,採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續儲存空間稱為散列表或雜湊表(Hash table)
散列表查詢步驟
整個雜湊過程其實就兩步:
1. 在儲存時,通過雜湊函式計算記錄的雜湊地址,並按此雜湊地址儲存該記錄。
2. 當查詢記錄時,我們通過同樣的雜湊函式計算記錄的雜湊地址,按此雜湊地址訪問該記錄。說起來很簡單,在哪存的,上哪去找,由於存取用的是同一個雜湊函式,因此結果當然也是相同的
所以說雜湊技術既是一種儲存方法,也是一種查詢方法。
雜湊技術最適合的求解問題是查詢與給定值相等的記錄。
設計一個簡單、均勻、儲存利用率高的雜湊函式是雜湊技術中最關鍵的問題。另一個問題是衝突。在理想的情況下,每一個關鍵字,通過雜湊函式計算出來的地址都是不一樣的,可現實中,這只是一個理想,我們時常會碰到
兩個關鍵字key1≠key2,但是卻有f(key1)=f(key2),這種現象我們稱為衝突,並把key1和key2稱為這個雜湊函式的同義詞。
雜湊函式的構造方法
1. 雜湊函式的計算時間不應該超過其通過查詢技術與關鍵字比較的時間。
2. 雜湊地址分佈均勻,這樣就可以保證儲存空間的有效利用,並減少為處理衝突而耗費的時間
直接定址法
取關鍵字的某個線性函式值為雜湊地址
f(key)=aXkey+b
這樣的雜湊函式優點就是簡單、均勻、也不會產生衝突,問題是這需要事先知道關鍵字的分佈情況,適合查詢表較小且連續的情況。由於這樣的限制,在現實應用中,此方法雖然簡單,但卻並不常用。
數字分析法
平方取中法
摺疊法
除留餘數法
隨機數法