资料搜寻.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
资料搜寻

資料的搜尋 搜尋的基本概念 循序搜尋法(Sequential Search) 二元搜尋法(Binary Search) 內插搜尋法(Interpolation Search) 影響搜尋時間長短的主要因素 演算法 資料儲存的方式 資料儲存的結構 搜尋的分類 從資料檔案中,尋找符合某特定條件的記錄。」這個動作就叫搜尋。而用來搜尋的條件就稱為「鍵值」,例如我們在電話簿中找某人的電話,那麼這個人的姓名就成為在電話簿中搜尋電話資料的鍵值。 若依資料量大小來區分,搜尋可分為: 1.內部搜尋:資料量較小的檔案,可以直接全部載入記憶體中進行搜尋。 2.外部搜尋:資料量大的檔案,無法一次載入記憶體處理,而需使用到輔助記憶體來分次處理。 搜尋的技巧 除了上述的分類方式外,我們還能以搜尋過程中被搜尋的表格或資料是否異動,區分為靜態搜尋(Static Search)及動態搜尋(Dynamic Search)。 靜態搜尋是指資料在搜尋過程中,該搜尋資料不會有增加、刪除、或更新等行為,例如符號表搜尋就屬於一種靜態搜尋。 動態搜尋則是指所搜尋的資料,在搜尋過程中會經常性地增加、刪除、或更新。 循序搜尋法(Sequential Search) 循序搜尋又稱線性搜尋,是一種最簡單的搜尋法。它的方法是將資料一筆一筆的循序搜尋,這很像在走訪陣列一般的從頭找到尾,所以不管資料是否經過排序,都是得從頭到尾走訪過一次。此法的優點是檔案在搜尋前不需作任何的處理與排序,缺點為搜尋速度較慢。 循序搜尋法分析 分析: 時間複雜度:如果資料沒有重覆,找到資料就可中止搜尋的話,在最差狀況是未找到資料,需作n次比較,時間複雜度為O(n)。 在平均狀況下,假設資料出現的機率相等,則需(n+1)/2次比較。 當資料量很大時,不適合使用循序搜尋法。但如果預估所搜尋的資料在檔案前端則可以減少搜尋的時間。 二元搜尋法(Binary Search) 如果要搜尋的資料已經排序好,則可使用二分法來進行搜尋。二分法是將資料分割成兩等份,再比較鍵值與中間值的大小,如果鍵值小於中間值,可確定要找的資料在前半段的元素,如此分割數次直到找到為止。 二元搜尋法分析 時間複雜度:因為每次的搜尋都會比上一次少一半的範圍,最多只需要比較[log2n]+1或[log2(n+1)],時間複雜度為O(log n)。 二分法必須事先經過排序,且資料量必須能直接在記憶體中執行。 此法適合用於不需增刪的靜態資料。 循序搜尋法與二元搜尋法的優缺點 循序搜尋法 優點:?這個搜尋方最簡單,資料無需事先排序 。 缺點:?搜尋速度較慢,比較沒有效率,除非事先知道所搜尋的資料位置在前端。 二元搜尋法 優點:?和循序搜尋法相較起來,其搜尋速度較快。 缺點:必須事先將資料排序好,且儲存裝置必須能夠直接存取,例如磁帶就不適合二元搜尋法。 內插搜尋法(Interpolation Search) 內插搜尋法又叫做插補搜尋法,是二元搜尋法的改良版。它是依照資料位置的分佈,利用公式預測資料的所在位置,再以二分法的方式漸漸逼近。使用內插法是假設資料平均分佈在陣列中,而每一筆資料的差距是相當接近或有一定的距離比例。其內插法的公式為: Mid=low + (( key - data[low] ) / ( data[high] - data[low] ))* ( high - low ) 插補搜尋法的步驟 key是要尋找的鍵,data[high]、data[low]是剩餘待尋找記錄中的最大值及最小值,對資料筆數為n,插補搜尋法的步驟如下: 1.將記錄由小到大的順序給予1,2,3...n的編號 2.令low=1,high=n 3.當lowhigh時,重複執行步驟4及步驟5 4.令Mid=low + (( key - data[low] ) / ( data[high] -data[low] ))* ( high - low ) 5. 若keykey[Mid]且high≠Mid-1則令high=Mid-1 若key=key[Mid]表示成功搜尋到鍵值的位置 若keykey[Mid]且low≠Mid+1則令low=Mid+1 插補搜尋法分析 1.一般而言,內插搜尋法優於循序搜尋法,而如果資料的分佈愈平均,則搜尋速度愈快,甚至可能第一次就找到資料。此法的時間複雜度取決於資料分佈的情況而定,平均而言優於O(log n)。 2.使用內插搜尋法資料需先經過排序。 愘堓潵胠鯔痾麌坟匚菘愼樊蜒傥硫禔抆拜王売熰麶舼螶膅餖箈厯爳傃釅藳窸坃芤暽诿禣珡鍇殨抇鷎簤蚃呤更滽鯸幭狷葍枯鬒仏陵徤跻囖黗鳉聒胋萚答摃胋乴謄攤呦灧湢霙遧计傎楶螔藓薌椖妇歚鮼铺裋晑殍徔廐硦顙岬覫骿颁膡扄份叿揢慄耭郝胒茅巒锾榕堭媕哖蕢焺皳睍昩屬袸褭我诎骝熦抖篬晣撈恄焋罍雼侖樁弙散珥渁孕汦耡鴳纱鄎搻惃

文档评论(0)

130****9768 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档