- 1、本文档共61页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法七章 检索及基本算法
第7章 检索及基本算法 福建农林大学计算机与信息学院 林敏 第7章 检索及基本算法 7.1 检索的概念 检索:或称为查找,在检索表中找出给定的关键字值的记录信息,或记录的位置。 检索表:同一类型的数据元素组成的集合 若表中存在记录则查找成功,否则不成功 检索表的结构 平均检索长度 衡量一个检索算法的效率,使用平均检索长度,对于一个含有n个记录的表,在检索成功时的平均检索长度为: ASL= ,Pi为检索第i个记录的概率Ci为找到第i个记录需要比较的次数。 在等概率的情形下,ASL= 7.2 线性表检索 线性表是检索表最基本的最常用的一种组织方式。其数据类型定义如下: typedef struct { keytype key; // 关键字 elemtp data; // 其它数据项 }sqlist_node; // 顺序检索表的结点类型 线性表检索方法有顺序检索、二分法检索、黄金分割点检索、精算点检索和分块检索 顺序检索算法 顺序检索算法:从第n个位置开始,由后往前依次将各个位置上的数据元素的键值与给定关键字K比较。 若某个位置上的元素键值与K相等,则检索成功,返回该位置,否则检索不成功,返回0。 算法描述如下: int sqlist_search(sqlist_node a[],int n,keytype K) { int j=n; a[0].key=K; // 设置哨卡(检索终点) while(a[j].key!=K) j--; return j; } 顺序检索算法(续) 在检索成功时,等概率情况下平均检索长度: 检索失败时需要进行n+1次的比较 顺序检索算法的时间复杂度是O(n)。 7.2.2 二分法检索 若顺序表的记录已按关键字有序排列,可采用二分法检索(折半检索): 例:(07 10 14 18 21 23 25 29 31 35 38 42 46 49 52)中检索 19、46和11 算法:low=1;high=15;mid=(low+high)/2 if R[mid].key==key则查找成功 否则,若key R[mid].key则在左半 部检索,大于则在右半部查找 二分法检索算法 int half_search(sqlist_node *a, int n, keytype K) { int low,high,mid; low=1; high=n; // 初始化检索区间 while(low=high) { mid=(low+high) / 2; if (a[mid].key==K) return mid; // 检索成功 else if (a[mid].keyK) low=mid+1; else high=mid-1; } return 0; // 检索失败 } 二分法检索算法性能分析 二分法检索平均查找长度 二分法检索成功时,平均检索长度: 7.2.3 黄金分割点检索 黄金分割点检索(gold-partition search),简称黄金点检索。 它是利用我国著名数学家华罗庚院士当年推广优选法时介绍的黄金分割点的概念,即利用黄金分割数0.618把检索区间分为两个不等的区间。 黄金分割点检索举例 例如,仍以前面的15个记录为例,检索k=46的黄金分割点检索过程为: 07 10 14 18 21 23 25 29 31 35 38 42 46 49 52 ↑ ↑ ↑ low=1 mid=9 high=15 一个用二分法检索需4次比较的工作,黄金分割点检索只需两次比较就完成了。 黄金分割点检索算法描述 int goldpartsearch(sqlist R[],keytype k) { int low,mid,high; low=1; high=n; while(low=high) /*逐次缩小区间检索*/ {mid=low+0.618*(high-low+1)-1+0.5; if(k==R[mid].key) return mid; else if(kR[mid].key)
您可能关注的文档
- 数学:10.6用科学计算器求平均数》课件(北京课改版七年级下).ppt
- 数学:13.5因式分解》课件1(华东师大版八年级上).ppt
- 数学:2.2.《用样本的数字特征估计总体的数字特征》课件(新人教b版必修3).ppt
- 数学:1.1生 数学课件(苏科版七年级上)2.ppt
- 数学:2.3《线和平面所成的角》课件(新人教A版必修2).ppt
- 数学:1.5《理数的乘方》课件(人教版七年级上).ppt
- 数学:2.4《面向量的数量积》复习课件.ppt
- 数学:2.2.《条件概率(一)》课件(新人教a版选修).ppt
- 数学:2.3.《平面向量的正交分解及坐标表示》课件(新人教a版必修4).ppt
- 数学:28.4第二十八章复习》课件(沪科版九年级下).ppt
文档评论(0)