数据结构-查找.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 Table) 查找表是由同一类型的数据元素(或记录)构成的集合 对查找表的操作: 1.查询某个“特定的”数据元素是否在查找表中; 2.检索某个“特定的”数据元素的各种属性; 3.在查找表中插入一个数据元素; 4.从查找表中删去某个数据元素 一、查找表(分类) 静态查找表  仅作查询和检索操作的查找表。 动态查找表  在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素 二、关键字(Key) 关键字是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录) 主关键字:可以识别唯一的一个记录的关键字 次关键字:能识别若干记录的关键字 三、查找(Searching) 查找是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 查找成功:在查找表中查找到指定的记录 查找不成功:在查找表中没有找到指定记录 四、衡量查找算法的标准 时间复杂度 空间复杂度 平均查找长度ASL 五、平均查找长度(ASL) 平均查找长度定义为确定记录在表中的位置所进行的和关键字比较的次数的平均值 n ASL = ∑ PiCi i=1 n为查找表的长度,即表中所含元素的个数 Pi为查找第i个元素的概率(∑Pi=1) Ci是查找第i个元素时同给定值K比较的次数 一、顺序查找 顺序查找算法是顺序表的查找方法 在顺序查找算法中,以顺序表或线性链表表示静态查找表 一、顺序查找(算法) 顺序查找算法: 1.从表中最后一个记录开始 2.逐个进行记录的关键字和给定值的比较 3.若某个记录比较相等,则查找成功 4.若直到第1个记录都比较不等,则查找不成功 一、顺序查找(算法实现) //静态查找表的顺序存储结构 Typedf struct{ ElemTpye *elem; //数据元素存储控件基址,建表时 //按实际长度分配,0号单元留空 int length; //表长度 }//SSTable; 一、顺序查找(算法实现) int Search_Seq(SSTable ST, KeyType key) { // 若查找成功,返回位置 ST.elem[0].key = key; // “哨兵”, for (i=ST.length; ST.elem[i].key!=key; --i); // 从后往前找 return i; // 找不到时,i=0 } // Search_Seq 设置“哨兵”的目的是省略对下标越界的检查,提高算法执行速度 一、顺序查找(举例) 一、顺序查找(算法性能分析) 对顺序表而言,Ci=n-i+1 在等概率查找的情况下,Pi=1/n ASL=n*P1 +(n-1)P2 +…+ 2Pn-1+ Pn = (n+1)/2 一、顺序查找(不等概率) 如果被查找的记录概率不等时,取 Pn≥Pn-1≥···≥P2≥P1 若查找概率无法事先测定,则查找过程采取的改进办法是,在每次查找之后,将刚刚查找到的记录直接移至表尾的位置上 一、顺序查找(特点) 优点: 1.简单 2.适应面广(对表的结构无任何要求) 缺点: 1.平均查找长度较大 2.特别是当n很大时,查找效率很低 二、折半查找 折半查找算法是有序表的查找方法 在折半查找算法中,静态查找表按关键字大小的次序,有序地存放在顺序表中 折半查找的原理是: 1.先确定待查记录所在的范围(前部分或后部分) 2.逐步缩小(一半)范围直到找(不)到该记录为止 二、折半查找(算法) 1.n个对象从小到大存放在有序顺序表ST中,k为给定值 2.设low、high指向待查元素所在区间的下界、上界,即low=1, high=n 3.设mid指向待区间的中点,即mid=(low+high)/2? 4.让k与mid指向的记录比较 若k=ST[mid].key,查找成功 若kST[mid].key,则high=mid-1 [上半区间] 若kST[mid].key,则low=mid+1 [下半区间] 5.重复3,4操作,直至lowhigh时,查找失败。 二、折半查找(算法实现) int Search_Bin(SSTable ST, KeyType key) { // 在有序表ST中折半查找其关键字等于key的数据元素。若找 // 到,则函数值为该元素在表中的位置,否则为0。 low=1;high=ST.length; // 置区间初值 while(low=high){ mid=(low+high)/2;

文档评论(0)

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

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

1亿VIP精品文档

相关文档