下載/瀏覽

Download Report

Transcript 下載/瀏覽

雜湊搜尋法 (Hashing Search)
• 前面幾節所敘述的搜尋法,均是利用搜尋值與資料列 互相
比較,其中可獲得之最高執行效率為 O(logn) 。
• 如果能夠不必經過比較,而直接將鍵值或識別字經由函數
的計算,取得資料值儲存位址,那麼搜尋的效率將可達到
O(1) 常數次數。這種搜尋技巧,稱之為雜湊 (hash)。
資料
(data)
雜湊函數
(hash function)
位址
(address)
• 雜湊搜尋法
– 先分析鍵值或識別字的資料特性,以決定計算方式,即
決定雜湊函數 (hashing function) 之後,再建立雜湊表,
將來要搜尋資料時,就利用這雜湊函數的計算求得儲存
位址,即可取得資料。
碰撞(collision)
• 不同的鍵值可能經由同一個雜湊函數計算後得到相同的位
址,則稱資料發生碰撞 (collision) 。
資料 x 1
資料 x 2
雜湊函數
位址 y
• 如果每個儲存位址有數個儲存槽 (slot),則資料發生碰撞
後仍能存放於不同儲存槽內,但當碰撞不斷發生使得已無
儲存槽可存放時,則發生了溢位 (overflow)。
• 當每個儲存位址只有一個儲存槽時,則發生碰撞時也同時
發生了溢位。
• 因此決定雜湊函數時除了考慮此函數必須容易計算之後,
尚需考慮使資料產生碰撞的次數越少越好。
範例
假設鍵值為 xy, ab, ac, dc, bd, z, da, f
其雜湊搜尋法如下:
1. 分析資料並決定計算方式。
可依照英文字母的排列順序,將字串中第1個文字轉換成1
到26的值 。
f(“xy”) → 24
f(“ab”) → 1
f(“ac”) → 1
f(“dc”) → 4
f(“bd”) → 2
f(“z”) → 26
f(“da”) → 4
f(“f”) → 6
範例(續)
2. 建立雜湊表。
若每個位址有兩個儲存槽,則雜湊表如下:
位址
slot1
slot2
1
ab
ac
2
bd
3
4
dc
5
6
f
:
24
xy
25
26
z
da
範例(續)
3. 搜尋資料
欲搜尋資料時則先計算雜湊函數以便得到資料儲存位址,
接著到表格內取出資料值,經由比對即可得知。
• 例如當搜尋 xy 字串時
– 經由 f(“xy”) →24 得到雜湊表位址 24
– 1次比較即可找到。
• 當搜尋 da 字串時
– 經由 f(“da”) →4 得到雜湊表位址 4
– 因此至位址 4 取出資料 dc 作比對,但不成功
– 再取出第二儲存槽資料 da 比對成功,因此搜尋 da 共
比較 2 次。