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 次。