数据结构课件c版第v九章.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)的概念 查找 所谓查找,就是在数据集合中寻找满足某种条件的数据对象。 查找结果 查找的结果通常有两种可能: 查找成功,即找到满足条件的数据对象。这时,作为结果,可报告该对象在结构中的位置, 还可给出该对象中的具体信息。 查找不成功,或查找失败。作为结果,应报告一些信息, 如失败标志、位置等。 查找(Search)的概念 查找表 通常称用于查找的数据集合为查找表,它是由同一数据类型的数据元素(或记录)组成。 在每个对象中有若干属性,其中有一个属性,其值可唯一地标识这个对象,称为关键码。使用基于关键码的查找,查找结果应是唯一的。但在实际应用时,查找条件是多方面的,可以使用基于属性的查找方法,但查找结果可能不唯一。 查找(Search)的概念 实施查找时有两种不同的环境。 静态环境,查找表在插入和删除等操作的前后不发生改变。-- 静态查找表 动态环境,为保持较高的查找效率, 查找表在执行插入和删除等操作的前后将自动进行调整,结构可能发生变化。--动态查找表 查找(Search)的概念 对查找表经常进行的操作: 查询某个“特定的”数据元素是否在查找表中; 检索某个“特定的”数据元素的各种属性; 在查找表中插入一个数据元素; 从查找表中删去某个数据元素。 静态查找表 以顺序表或线性链表表示的静态查找表,Search函数可用顺序查找来实现。 以有序表表示静态查找表时,Search函数可用折半查找来实现。 以索引顺序表表示静态查找表时,Search函数可用分块查找来实现。 静态查找表的抽象数据类型定义 p216 静态查找表--顺序查找表 查找过程:从表的一端开始逐个进行记录的关键字和给定值的比较。 静态查找表--顺序查找表 int Search_Seq(SSTable ST, KeyType key) { // 在顺序表ST中顺序查找其关键字等于key的数据元 //素。若找到,则函数值为该元素在表中的位置,否 //则为0。 int i=0; ST.elem[0].key=key; // 哨兵 for (i=ST.length; ST.elem[i].key!=key; --i); // 从后往前找 return i; // 找不到时,i为0 } // Search_Seq 静态查找表--顺序查找表 顺序查找的平均查找长度 设数据表中有 n 个元素,查找第 i 个元素的概率为 pi,查找到第 i 个元素所需比较次数为 ci,则查找成功的平均查找长度: 在顺序查找并设置“监视哨”情形: ci = n-i +1, i = 1, …, n,因此 静态查找表--顺序查找表 在等概率情形,pi = 1/n, i = 1, 2, …, n。查找成功的平均查找长度为: 在查找不成功情形,ASLunsucc = n+1。 顺序查找的特点 顺序查找与其他查找方法比较,查找成功时的平均查找长度较长,特别当n较大时查找效率较低。但它对表的特性没有要求,无论元素怎样存放都可以,因此也有它的优点。 静态查找表--有序表的查找 折半查找算法 算法思路:若设有n个元素存放在一个有序的顺序表中,采用折半查找时,先求出位于查找区间正中的元素的下标mid,用其关键码ST.elem[mid].key与给定值key进行比较,比较的结果有3种可能性: 静态查找表--有序表的查找 若ST.elem[mid].key ==key,查找成功,报告查找成功信息并返回其下标; 若ST.elem[mid].keykey,说明如果表中存在要找的元素,该元素一定在mid的左侧,可把查找区间缩小到表的前半部分,在继续进行折半查找; 若ST.elem[mid].key key,说明如果表中存在要找的元素,该元素一定在mid的右侧,可把查找区间缩小到表的后半部分,在继续进行折半查找。 静态查找表--有序表的查找 折半查找的查找成功时的平均查找长度为O(log2n)。 折半查找过程演示 静态查找表--有序表的查找 int Search_Bin ( SSTable ST, KeyType key ) { // 在有序表ST中折半查找其关键字等于key的数据元 //素。若找到,则函数值为该元素在表中的位置,否 //则为0。 int low, high, mid; low = 1; high = ST.length; // 置区间初值 while (low = high) { mid = (low + high) / 2; if (EQ(key , ST.elem[mid].key)

文档评论(0)

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

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

1亿VIP精品文档

相关文档