ch10--查找.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文档。上传文档
查看更多
第11章 查找 10.1 概述 10.2 顺序表的查找 10.3 树表的查找 10.4 散列表的查找 10.1 概述 查找是现实生活和软件设计中最常用的运算,例如, 查字典、辞典、电话号码; 高考成绩查询 ,考试成绩查询; 数据库中的各种查询; Google、Baidu… 因此,查找方法的性能会影响到软件系统的性能。 对此,涉及到几个相关的问题: 如何设计查找方法? 如何评价查找性能? 如何组织数据,以便能更好地提高查找的性能? 本章主要内容: 介绍查找的相关概念。 围绕几种常见的数据表,讨论查找的方法,并分析其性能。 查找 -- 在数据集(表)中找出一个特定元素(的位置)。 查找涉及的基本概念和相关问题: 1. 查找表 同类型的数据元素(记录)所构成的集合。常见的查找表有: 线性表:数据元素构成一个线性序列。 树 表:以树结构的形式组织。 散列表:以某种函数的方式来确定元素的地址,实现数据表的组织。 索引表:为元素建立索引,以提高查找的速度。 2. 关键字 数据元素(记录)中可以标识数据元素(记录)的数据项(字段)称为关键字,。 Key Word 关键字分为两种: 主关键字:唯一标识一个元素的字段。 例如,高考成绩信息中的“准考证号”字段。 次关键字:可能标识到多个元素的字段。 例如,高考成绩信息中的“考生姓名”字段, 因为现实中有太多同名同姓的人。 查找的过程即对给定的值与关键字进行比较的过程。对给定的数据集,找到两者相等的记录称查找成功,否则查找失败。 3. 静态查找表和动态查找表 静态查找表 — 表中数据元素(记录)保持不变,查找中不涉及元素的插入、删除等操作。 动态查找表 – 表中数据元素(记录)是动态变化的,查找过程中伴随着元素的插入和删除操作等。 4. 查找长度(Search Length) 查找过程中所做的关键字的比较次数。 平均查找长度ASL( Average Search Length ) 查找成功需要的平均比较次数。 假设查找表有n个记录,则: 其中:Pi为查找表中第i个记录的概率,且 Ci成功查找第i个元素的比较次数。 最大(最坏)查找长度 失败查找长度 5. 数据元素(记录)类型的定义 结构类型,或者类 增加关键字 【记录类型描述】 typedef struct { KeyType key; //关键字域 InfoType otherInfo; //其它信息域 }elementType; 【实例】 typedef struct { string sID; //学号,作为关键字 string sName; //其它信息域 int sAge; int sGender; //… }student; 10.2 线性表的查找 问题描述: 查找表为线性表,可能是顺序表,也可能是链表。 典型地是一维数组;也可能是链表;或顺序文件。 本章更多的讨论是面向一维数组。 要求在此表中找出关键字的值为x的元素的位置, 若查找成功,则返回其位置(数组下标,或结点指针), 否则,返回一个表示元素不存在的下标(如0、-1或空指针)。 按照查找表中数据的特性,以及对应的查找方法,可分为以下几种: 顺序查找 -- 没有任何关于数据元素分布的特性 有序表查找 -- 二分查找(折半查找) 索引表查找 -- 数据表分块有序 10.2.1 顺序查找 1. 问题描述: 在数组A[n]中查找元素关键字为x的元素, 若查找成功,则返回元素的下标,否则返回-1。 分析: 显然只能依次搜索(比较元素)。 问题: 按照什么样的查找顺序?即从前往后还是从后往前? 2.【算法描述—从左往右】 int search ( elementType A[],keyType x ) { int i; for(i=0;in;i++) if (A[i].key==x) return i; //查找成功 return -1; //查找失败 } 3.【算法描述—从右往左】 int search ( elementType A[],keyType x ) { int i; for(i=n-1;i=0;i--) if (A[i].key==x) return i; //查找成功 return -1; //查找失败 } 4. 设置监视哨

文档评论(0)

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

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

1亿VIP精品文档

相关文档