搜寻的资料必须要先排好序.ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
搜寻的资料必须要先排好序

Search Roger@ CSIE THIT Contents 搜尋的基礎 循序搜尋法-未排序資料 已排序資料的搜尋法 二元搜尋樹搜尋法 雜湊搜尋法 搜尋的基礎 搜尋是在資料中找尋特定的值,這個值稱為鍵值(Key) 資料搜尋方法依照搜尋資料,可以分成下列兩種: 沒有排序的資料 已經排序的資料 循序搜尋法-未排序資料 循序搜尋法是從循序結構的第一個元素開始走訪整個結構 如果元素個數為n,循序搜尋法的執行效率是與元素個數成正比的O(n) 已排序資料的搜尋法 二元搜尋法 二元搜尋法是一種分割資料的搜尋方法,搜尋的資料必須要先排好序 先檢查已排序資料的中間元素 若是中間元素與鍵值相同,則表示已經找到, 若是中間元素比鍵值小,則所要搜尋的元素位在右半部,則由右半部,依據相同的方法搜尋 若是中間元素比鍵值大,則所要搜尋的元素位在左半部,則由左半部,依據相同的方法搜尋 如果元素個數為n,二元搜尋的執行效率是O(logn) 二元搜尋法範例 尋找81 二元搜尋樹搜尋法 二元搜尋樹除了可以使用中序走訪來排序資料外,也可以進行資料搜尋 二元搜尋樹搜尋法時,只需將資料與根節點作比較,此時有四種情形: 若節點資料與鍵值相同,輸出索引值,完成 節點資料比鍵值大,搜尋左子樹 節點資料比鍵值小,搜尋右子樹 已經到葉節點仍不相同,未找到,結束 如果元素個數為n,二元搜尋的執行效率是O(logn) 二元搜尋樹範例 (1/4) 尋找 7 雜湊搜尋法(Hashing search) 基本 (1/2) 由別於前面所介紹的數種搜尋法,雜湊搜尋法的最主要想法是只要搜尋一次,就可以知道所要搜尋的資料是否存在 要搜尋一次就之有無,最基本的方法是將資料的索引值與資料本身相同,例如有下面的一些資料: 1, 3, 12, 15, 6, 8, 9 因為資料範圍為1-15所以理論上要建立16個格子來放置資料 雜湊搜尋法(Hashing search) 基本 (2/2) 上述的方式雖然的確只需要搜尋一次就知道有無,但是對於資料很分散的數列則是不實際的,例如: 1,345,12345,56789,21,43,678 由於資料範圍為1-56789,所以為了這些區區7個資料,要配置值56789個儲存格是不切實際的做法 此時就可以使用雜湊表來克服 雜湊搜尋法(Hashing search) 概念 雜湊搜尋法的資料搜尋是透過雜湊表來執行搜尋,所以雜湊搜尋法最主要的工作是建立雜湊表(Hash Table) 雜湊表的建立是使用雜湊函數來進行 雜湊函數是一種數學運算,其目的是減少資料範圍,將搜尋鍵值轉換成索引值 雜湊搜尋法 雜湊函數?除法 將資料除以常數,然後使用餘數作為索引位置 索引位置=鍵值 mod M 範例: 11,15,49,78,53,26,22 M設為10 索引值為 1,5,9,8,3,6,2 雜湊搜尋法 雜湊函數?中間平方法 將鍵值乘以自己或是某個常數,然後取中間幾位數字作為索引位置 例如:取中間三位數的中間平方法 (142)2=20164 ? 016 (2642)2=6980164 ?801 雜湊搜尋法 雜湊函數?數位分析法 適用於數值鍵值的雜湊函數,例如電話資料 電話號碼可以將區域碼,地域碼等重複的部分去掉,將流水編號當成索引值,例如 雜湊搜尋法 雜湊函數?摺疊法 將鍵值分成幾個部份,除了最後一個部份外,其餘都是相同長度。例如:將一個常整數14237240120933分成5個部份 142 372 401 209 33 然後利用下列折疊法來產生索引值: 位移摺疊法:直接靠左或是靠右相加,來產生索引值 :142+372+401+209+33=1157 邊界摺疊法:將左邊界折起來相加: 142+273+401+902+33=1751 雜湊函數的碰撞問題 我們希望雜湊函數所算出來的索引值是唯一的,然而通常達不到這個要求 因此會有兩個不同的鍵值,經過雜湊函數處理後,得到相同索引值的情形,此稱為碰撞 例如:32, 45, 62,若使用除以10來產生餘數,則32與62會有相同的索引值2 碰撞問題的解決 線性探測法(Linear Probing) 重雜湊法(Rehashing) 鏈結法(Chaining) 線性探測法 如果鍵值欲存放的索引位置已經有鍵值存在,將建值儲存在下一個索引位置 如果原位置的下一個索引位置仍然已有鍵值,再將建值儲存再下一個索引位置,重複上述操作直到找到一個空的位置為止 上述方法稱為線性探測法或是縣性開放位址法 線性探測法範例 37, 25, 11, 29, 34, 46, 44, 35 使用除法 索引位置=鍵值 mod 10 建立雜湊表 Step 1:首先建立一個大小為10的一維陣列雜湊表,雜湊表的初始值為-1 線性探測法範例 * * 81 66 42 8 1 15

文档评论(0)

wangyueyue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档