1 / 24

Search

Search. Roger@ CSIE THIT. Contents. 搜尋的基礎 循序搜尋法 - 未排序資料 已排序資料的搜尋法 二元搜尋樹搜尋法 雜湊搜尋法. 搜尋的基礎. 搜尋是在資料中找尋特定的值,這個值稱為鍵值 (Key) 資料搜尋方法依照搜尋資料,可以分成下列兩種 : 沒有排序的資料 已經排序的資料. 循序搜尋法 - 未排序資料. 循序搜尋法是從循序結構的第一個元素開始走訪整個結構 如果元素個數為 n ,循序搜尋法的執行效率是與元素個數成正比的 O(n). 已排序資料的搜尋法 二元搜尋法.

Download Presentation

Search

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Search Roger@ CSIE THIT

  2. Contents • 搜尋的基礎 • 循序搜尋法-未排序資料 • 已排序資料的搜尋法 • 二元搜尋樹搜尋法 • 雜湊搜尋法

  3. 搜尋的基礎 • 搜尋是在資料中找尋特定的值,這個值稱為鍵值(Key) • 資料搜尋方法依照搜尋資料,可以分成下列兩種: • 沒有排序的資料 • 已經排序的資料

  4. 循序搜尋法-未排序資料 • 循序搜尋法是從循序結構的第一個元素開始走訪整個結構 • 如果元素個數為n,循序搜尋法的執行效率是與元素個數成正比的O(n)

  5. 已排序資料的搜尋法二元搜尋法 • 二元搜尋法是一種分割資料的搜尋方法,搜尋的資料必須要先排好序 • 先檢查已排序資料的中間元素 • 若是中間元素與鍵值相同,則表示已經找到, • 若是中間元素比鍵值小,則所要搜尋的元素位在右半部,則由右半部,依據相同的方法搜尋 • 若是中間元素比鍵值大,則所要搜尋的元素位在左半部,則由左半部,依據相同的方法搜尋 • 如果元素個數為n,二元搜尋的執行效率是O(logn)

  6. 二元搜尋法範例尋找81

  7. 二元搜尋樹搜尋法 • 二元搜尋樹除了可以使用中序走訪來排序資料外,也可以進行資料搜尋 • 二元搜尋樹搜尋法時,只需將資料與根節點作比較,此時有四種情形: • 若節點資料與鍵值相同,輸出索引值,完成 • 節點資料比鍵值大,搜尋左子樹 • 節點資料比鍵值小,搜尋右子樹 • 已經到葉節點仍不相同,未找到,結束 • 如果元素個數為n,二元搜尋的執行效率是O(logn)

  8. 5 6 4 8 2 1 3 7 9 二元搜尋樹範例 (1/4)尋找 7 5比7小,搜尋右仔樹

  9. 5 6 4 8 2 1 3 7 9 二元搜尋樹範例 (2/4)尋找 7 6比7小,搜尋右仔樹

  10. 5 6 4 8 2 1 3 7 9 二元搜尋樹範例(3/4)尋找 7 8比7大,搜尋左仔樹

  11. 5 6 4 8 2 1 3 7 9 二元搜尋樹範例 (4/4)尋找 7

  12. 雜湊搜尋法(Hashing search)基本 (1/2) • 由別於前面所介紹的數種搜尋法,雜湊搜尋法的最主要想法是只要搜尋一次,就可以知道所要搜尋的資料是否存在 • 要搜尋一次就之有無,最基本的方法是將資料的索引值與資料本身相同,例如有下面的一些資料: • 1, 3, 12, 15, 6, 8, 9 • 因為資料範圍為1-15所以理論上要建立16個格子來放置資料

  13. 雜湊搜尋法(Hashing search)基本 (2/2) • 上述的方式雖然的確只需要搜尋一次就知道有無,但是對於資料很分散的數列則是不實際的,例如: • 1,345,12345,56789,21,43,678 • 由於資料範圍為1-56789,所以為了這些區區7個資料,要配置值56789個儲存格是不切實際的做法 • 此時就可以使用雜湊表來克服

  14. 雜湊搜尋法(Hashing search)概念 • 雜湊搜尋法的資料搜尋是透過雜湊表來執行搜尋,所以雜湊搜尋法最主要的工作是建立雜湊表(Hash Table) • 雜湊表的建立是使用雜湊函數來進行 • 雜湊函數是一種數學運算,其目的是減少資料範圍,將搜尋鍵值轉換成索引值 雜湊函數 索引位址 搜尋資料

  15. 11 15 -1 53 15 11 22 78 26 49 53 1 6 5 2 4 3 0 -1 26 22 78 雜湊搜尋法雜湊函數除法 • 將資料除以常數,然後使用餘數作為索引位置 • 索引位置=鍵值 mod M • 範例: • 11,15,49,78,53,26,22 • M設為10 • 索引值為 1,5,9,8,3,6,2 1 2 3 4 Mod 10 5 6 7 8 49 9

  16. 雜湊搜尋法雜湊函數中間平方法 • 將鍵值乘以自己或是某個常數,然後取中間幾位數字作為索引位置 • 例如:取中間三位數的中間平方法 • (142)2=20164  016 • (2642)2=6980164 801

  17. 雜湊搜尋法雜湊函數數位分析法 • 適用於數值鍵值的雜湊函數,例如電話資料 • 電話號碼可以將區域碼,地域碼等重複的部分去掉,將流水編號當成索引值,例如

  18. 雜湊搜尋法雜湊函數摺疊法 • 將鍵值分成幾個部份,除了最後一個部份外,其餘都是相同長度。例如:將一個常整數14237240120933分成5個部份 • 142 372 401 209 33 • 然後利用下列折疊法來產生索引值: • 位移摺疊法:直接靠左或是靠右相加,來產生索引值 :142+372+401+209+33=1157 • 邊界摺疊法:將左邊界折起來相加: • 142+273+401+902+33=1751

  19. 雜湊函數的碰撞問題 • 我們希望雜湊函數所算出來的索引值是唯一的,然而通常達不到這個要求 • 因此會有兩個不同的鍵值,經過雜湊函數處理後,得到相同索引值的情形,此稱為碰撞 • 例如:32, 45, 62,若使用除以10來產生餘數,則32與62會有相同的索引值2

  20. 碰撞問題的解決 • 線性探測法(Linear Probing) • 重雜湊法(Rehashing) • 鏈結法(Chaining)

  21. 線性探測法 • 如果鍵值欲存放的索引位置已經有鍵值存在,將建值儲存在下一個索引位置 • 如果原位置的下一個索引位置仍然已有鍵值,再將建值儲存再下一個索引位置,重複上述操作直到找到一個空的位置為止 • 上述方法稱為線性探測法或是縣性開放位址法

  22. 線性探測法範例 • 37, 25, 11, 29, 34, 46, 44, 35 • 使用除法 索引位置=鍵值 mod 10 • 建立雜湊表 • Step 1:首先建立一個大小為10的一維陣列雜湊表,雜湊表的初始值為-1

  23. 線性探測法範例

  24. 線性探測法範例

More Related