search structures(搜寻资料结构).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文档。上传文档
查看更多
search structures(搜寻资料结构)

搜尋資料結構 Search Structures 學習目標 在學習本章之後,讀者們要能夠瞭解: 搜尋的定義。 搜尋的種類及不同搜尋的資料結構及演算法。 電腦程式如何處理資料的搜尋。 搜尋 主要目的是從一組資料中尋找符合某種條件的資料,若是以資料的值來搜尋,可以把這個值當作搜尋鍵 (Search key),根據搜尋鍵找到的是所有和搜尋鍵等值的資料。 電腦搜尋資料的優點是快速 當資料量很龐大時,如何快速搜尋到資料是本章所要探討的 一般電腦檔案是記錄的集合,每一筆記錄包含許多欄位,其中必須至少有一個欄位可當作關鍵值(key),從資料檔案中找出滿足某些關鍵值的記錄之動作稱之為搜尋(search) 搜尋的分類 在最短時間內有效的找到所需資料,是一個相當重要的課題 影響插搜尋時間長短的主要因素包括有演算法、資料儲存的方式及結構 內部搜尋與外部搜尋 內部搜尋: 欲找尋的資料或檔案較小,可以直接全部載入記憶體中來進行搜尋的動作。 外部搜尋: 若要找尋的資料數目很大,無法一次將全部內容置於主記憶體內,而需使用到外部的輔助記憶體來分次處理。 靜態搜尋及動態搜尋 靜態搜尋(Static Search) : 在搜尋過程中,資料不會有增加、刪除或更新等行為。例如符號表的搜尋。 動態搜尋(Dynamic Search) : 在搜尋過程中,資料會經常有增加、刪除或更新等行為。 循序搜尋法 Sequential search 定義 循序搜尋 (Sequential search),又稱為線性搜尋(Linear Searching),是最單純亦是最基本的搜尋方式 不需事先將被搜尋的檔案記錄按其鍵值排序,只需依照資料儲存的順序,逐一比較資料值是否與指定的值相等,若找到則傳回陣列的索引值,否則傳回0。 演算法 =>虛擬碼 //n指a[ ]中的元素個數,key為欲比對的資料// procedure seqsch(int a[ ], int n, int key) { index i ; for (a [ ]的第一個元素至最後一個元素) { if(key = = a [i]) { 顯示找到的訊息並跳出迴圈; } } if (到最後的元素仍找不到) 顯示找不到的訊息; } =>C語言程式碼 int seqsch(int a[ ], int n, int key) { int i = 0; a[n] = key; while (a[i] != key) i + +; if (i n) printf(“%d 在陣列中的第 %d 筆.\n”,key,i+1) ; return(i); else printf(“找不到資料!!\n”) ; return(-1); } =>時間複雜度分析 最差狀況指的是必須搜尋整個陣列,即資料並未出現在陣列中,在此情況下演算法必須做n次比較。 在平均狀況下,假設資料出現在陣列中的機率都相等的話,那也要做(n+1)/2次。 【分析】 當資料量n很大時,就不適合用循序搜尋法,但可估計每一筆資料所要搜尋的機率,將機率高的放在檔案的前端,以減少搜尋的時間。 程式實作 #include stdio.h void main ( ) { int data [10] = {75, 33, 98, 44, 56, 24, 65, 48, 83, 12} int i, input ; printf ( “\n Squential search \n”) ; printf ( “\nData: “ ) ; for ( i= 0; i 10; i + +) { printf ( “%d “, data [i] ); puts(“ “); printf ( “\nPlease enter a number from data: “ ) ; scanf ( “%d”, input); printf ( “\nSearch…..\n” ) ; for ( i = 0; i 10; i ++) { printf ( “nData when searching %2d time(s) is %d !”, i+1, data[i]); if ( input = = data [i] ) break ; } if ( i = = 10 ) printf ( “\n\nSorry, %d not found ! “, input ) ; else printf ( “\n\nSorry, %d is the %dth record in data! “, input, i+1 ) ; } 二分搜尋法 Binary Search 定義 假如資料本身是經過排序的,在搜尋時可以利用二分的方法,每次都把陣列分成兩半,然後從其中的一半繼續搜

文档评论(0)

wujianz + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档