网站大量收购独家精品文档,联系QQ:2885784924

数据结构:第七章 查找.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 查 找 线性表的查找 树上的查找 散列技术 7.1 基本概念 查找——也叫检索,是根据给定的某个值,在表(指查找表)中确定一个关键字等于给定值的记录或数据元素。 关键字——是数据元素中某个数据项的值,它可以标识一个数据元素。 平均查找长度ASL——由于查找运算的关键操作是关键字的比较。通常以查找过程中对关键字执行的平均比较次数,即平均查找长度(ASL),作为衡量一个查找算法效率优劣的标准。 查找方法的确定:首先取决于使用的数据结构(线性表、图);其次是表的有序性(有序、无序)。主要分为:顺序查找、折半查找和分块查找,这3种属于静态查找(查找过程不修改原结构),一般以线性表做为数据结构。另一类是二叉排序树查找,属于动态查找(即动态生成查找结构,在查找同时,对原结构做修改)。 7.2 线性表的查找——静态查找 1、 顺序查找 查找过程:从表的一端开始逐个进行记录的关键字和给定值的比较。若相等则成功;若扫描结束仍未找到,则失败。 数据结构定义: 顺序查找算法: 2、 折半查找(二分查找) 查找过程:以中间位置记录关键字与给定值比较。相等则成功;不等,则缩小查找范围,继续查找。每次将待查记录所在区间缩小一半。 适用条件:采用顺序存储结构的有序表。 算法实现 设表长为n,low、high 和 mid分别指向待查元素所在区间的上界、下界和中点,k为给定值 初始时,令low=1, high=n, mid=?(low+high)/2? 让k与mid指向的记录比较 若k==r[mid].key,查找成功 若kr[mid].key,则high=mid-1 若kr[mid].key,则low=mid+1 重复上述操作,直至lowhigh时,查找失败 算法描述 折半查找算法: 3、分块查找 查找过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找; 适用条件:分块有序表 算法实现 用数组存放待查记录, 建立索引表,每个索引表结点含有每块的最大关键字域和指向本块第一个结点的指针 算法描述 2、二叉排序树的查找 过程:首先将给定值与根结点关键字进行比较,若相等,则成功;否则根据给定值与关键字之间的大小关系,继续在左子树或右子树中进行查找;直至查找成功或左(右)子树为空,说明查找失败。 算法:见后页。 算法分析:与二分查找类似,查找过程是从根结点出发走了一条从根到待查结点的路径;因此,比较次数不超过树的深度。 但二叉排序树的形态与输入顺序有关,即含有n个结点的二叉排序树不唯一: 最好 :形态均匀,与折半查找判定树相似;O(?log2n?+1) 最差:退化为深度n的单支树; O(n) 3、二叉排序数的生成 二叉排序树是在查找中动态生成的。其生成过程从空二叉树开始,每输入一个结点数据,就将它插入到已生成的二叉树中。 插入过程:当二叉树为空,则插入结点作为根结点;否则,将待插入结点关键字与根结点关键字比较,若二者相等,则无须插入,若小于根的关键字,则将其插入根的左子树,否则将其插入右子树。子树中的插入过程同上。如此下去,直到将待插结点作为一个新的叶子插入到二叉排序树中,或直到发现树中有此结点为止。 9.4 哈希查找 基本思想:在记录的存储地址和它的关键字之间建立一个确定的对应关系(函数关系);这样,不经过比较,直接通过计算就能得到所查元素。 一、定义 哈希函数——在记录的关键字与记录的存储地址之间建立的一种对应关系叫哈希函数。 哈希函数是一种映象,是从关键字空间到存储地址空间的一种映象。 哈希函数可写成:addr(ai)=H(ki) ai是表中的一个元素 addr(ai)是ai的存储地址 ki是ai的关键字 哈希表——应用哈希函数,由记录的关键字确定记录在表中的地址,并将记录放入此地址,这样构成的表叫哈希表。 哈希查找——又叫散列查找,利用哈希函数进行查找的过程叫哈希查找。 哈希函数只是一种映象,所以哈希函数的设定很灵活,只要使任何关键字的哈希函数值都落在表长允许的范围之内即可 冲突:key1?key2,但H(key1)=H(key2)的现象。 同义词:发生冲突的两个关键字。 哈希函数通常是一种压缩映象(关键字取值集合远大于表空间地址集),所以冲突不可避免,只能尽量减少;同时,冲突发生后,应该有处理冲突的方法 Hash存储的两个关键问题:A.选择简单、均匀的hash函数;B、确定解决冲突的方法。 平方取中法 构造:取关键字平方后中间几位作哈希地址 适于不知道全部关键字情况 除余法 构造:取关键字被某个不大于哈希表表长m的数p除后所得余数作哈希地址,即H(key)=key%p,p?m 特点 简单、常用,可与上述几种方法结合使用 p的选取很重要;p选的不好,容易产生同义词 随机数法

文档评论(0)

学习让人进步 + 关注
实名认证
内容提供者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档