- 1、本文档共44页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 查 找 学习目的要求: * 第7章 查 找 顺序表、有序表、索引顺序表的定义、查找及算法。 散列表的定义及构造法。 散列表冲突的处理方法。 7.1 基本概念 7.2 顺序查找 7.5 散列表及其查找 7.4 分块查找 7.3 二分法查找 第7章 查 找 7.1 基本概念 查找表(Search Table)是由同一类型的数据元素(或记录)构成的集合。 关键字(Key)是数据元素(或记录)中某个数据项的值,用它可以标识(识别)一个数据元素(或记录)。若此关键字可以惟一地标识一个记录,则称此关键字为主关键字(Primary Key)。 查找是根据给定的某个关键字的值,在查找表中确定一个其关键字值等于给定值的数据元素(或记录)。 7.2 顺序查找 顺序查找(Sequential Search)也称为线性查找,它的基本思想是用给定的值与表中各个记录的关键字值逐个进行比较,若找到相等的则查找成功,否则查找不成功,给出找不到的提示信息。 这种查找方法对顺序存储和链式存储都是适用的。 顺序查找的查找过程为:从表中最后一个记录开始,逐个进行记录的关键字值和给定值的比较,若某个数据元素的关键字值和给定值相等,则查找成功,找到所查记录;反之,若一直找到第一个,其关键字值和给定值都不相等,则表明数组中没有所查元素,查找不成功。 int seqsrch(sqlist r,int k,int n) { int i; r[0].key=k ; i=n; whi le (r[i].key!=k) /*第i个元素是k吗*/ i--; return(i); } 这个程序使用了一点小技巧,开始时将给定的关键字值 k放入r[0].key中,然后从n开始倒着查,当某个r[i].key=k时,表示查找成功,自然退出循环。若一直查不到,则直到i=0。由于r[0].key必然等于k,所以此时也能退出循环。由于r[0]起到“监视哨”的作用,所以在循环中不必控制下标i是否越界,这就使得运算量大约减少一半。 7.2 顺序查找 为了表示平均查找次数,定义平均查找长度为: ASL= ∑PiCi 其中,Pi为查找第i个记录的查找概率; Ci为查找第i个记录时的比较次数; n为表中记录个数。 在这里Ci=n-i+1,假设每个记录的查找概率都相等,即Pi=1/n(i=1,2,3,…,n)此时 ASL= -∑(n-i+1) = (n+1)/2 7.2 顺序查找 n i = 1 n i = 1 n 1 顺序查找的优点是:算法简单且适用面广,它对表的结构无任何要求。无论记录是否按关键字的大小有序,其算法均可应用,而且上述讨论对线性链表也同样适用。 这就是说,成功查找的平均查找长度为(n+1)/2。显然不成功查找次数为n+1,其时间复杂度均为O(n)。 7.2 顺序查找 7.3 二分法查找 在顺序存储的条件下,若各记录是按其关键字值的大小依次存放的,则这个查找表称为有序表。 在有序表中可采用二分法查找(或称为折半查找)的方法进行查找。 二分法查找的基本思想是:先取表的中间记录的关键字值与给定关键字的值相比较,如果给定值比该记录的关键字值大,则要查找的记录一定在表的后半部分;若给定值比该记录的关键字值小,则要查找的记录一定在表的前半部分。 依次反复进行,在最坏的情况下,当表长缩小为1时必然能找到;否则就表明找不到要查找的记录。 int bin_search(sqlist r,int k,int n) { int low=1,high=n,found=0,mid; while((low=high) !found) { mid=(low+high)/2; /*求中点*/ i f(k==r[mid].key) return(mid); /*找到k*/ else { i f(kr[mid].key) low=mid+1; /*在后半部分查找*/ else high=mid-1; /*在前半部分查找*/ } } return(-1); /*查找不成功,返回-1作为标记*/ } 7.3 二分法查找 从以上程序的执行情况分析,每做一次比较,查找的范围都缩小一半。因此二分法查找的平均查找长度为 ASL= log2(n+1) - 1 当n足够大时,可近似表示为 log
您可能关注的文档
最近下载
- 中文分级阅读测评系统.pdf VIP
- 油气勘探风险评价与决策技术:方法、应用与创新.docx VIP
- 六朝古都齐聚首 烟花三月下扬州.doc VIP
- 深圳市建设工程消防设计疑难解析.doc VIP
- 铜绿假单胞的治疗药物选择.ppt VIP
- ASCO300系列开路切换自动转换开关ATS.doc VIP
- ASCO300系列.pdf VIP
- 项目一集控运行职业岗位认知课件.pptx VIP
- Nordic 系列:nRF52840 (基于 Cortex-M4)_(25).nRF52840的硬件测试.docx VIP
- Nordic 系列:nRF52840 (基于 Cortex-M4)_(16).nRF52840的硬件设计指南.docx VIP
文档评论(0)