吉林大学数据结构课件 第八节 查找.pptx

  1. 1、本文档共167页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 查找;查找(亦称检索),简言之就是查表。 一份表就是一个文件(表通常指小文件,文件一般指大表。一个大的文件通常被称为数据库) 一份表包含N个记录,假定每个记录都对应一个关键词。一个查找算法查找或检索一张表的过程,就是对给定的变元K,去找出其关键词域之值等于K的那个记录; 查找完成后有两种可能,或者查找成功,已确定出一个其关键词域之值为K的记录之所在,或者查找失败,即确定出关键词域之值为K的记录在表中已无处可寻。 在查找失败后,有时还希望把一个关键词域之值为K的新记录插入到表中去,这样的过程被称为查找与插入操作;下面我们简要介绍一下查找方法研究中的代表性工作: 1946年,John Mauchly首先提出了对半查找(又称为二分查找,折半查找)的思想。随后人们又在20世纪六、七十年代对其进行了深入研究,提出了一致对半查找算法,费波那契查找算法和插值查找算法等。 1952年,A. I. Dumey描述了树插入算法的原始形式。之后人们又研究了二叉查找树、最优二叉查找树、近似最优二叉查找树、平衡树、2-3树、2-3-4树、红黑树、B树及其变形树等树查找方法,并将其广泛应用于数据库、操作系统等领域中。 1962年,两名俄国数学家G. M. Adelson-Velsky和E. M. Landis,对维持一株好的查找树的问题,发现了一个非常漂亮的解,即平衡树,许多学者也将其称之为AVL树,其中AV代表Adelson-Velsky,L代表Landis. ;1953年,H. P. Luhn提出了散列(Hashing,也译成杂凑、哈希)的思想。从1953年至今,散列技术一直是研究的热点,并被广泛应于数据加密等领域。 1980年,C. S. Ellis提出将AVL树并行的思想。之后,直到2004年,人们才分别提出了AVL树、2-3树、红黑树、B树的并行算法,使树的查找、插入和删除等操作,实现了从单处理机上的顺序执行到多处理机上的并行执行的跨越。 从上面的发展历程可看出,自上世纪50年代起至今查找技术研究已经历了半个世纪,在这段时间里,人们陆续提出了线性表查找、树结构查找、基于检索结构的查找、数字查找和散列查找等方法。每种查找方法的提出都有其历史背景,且其目的都是要提高查找方法的效率。;一个查找算法,主要有以下四个方面的特性: 内外有别 分内查找和外查找。内查找系指内存能容纳一文件的全部N个记录的情形;外查找系指一文件所包含的记录总数N太大超出了内存的容量。 静态动态 静态查找时,表(或文件)的内容不变(即一个单纯的查找过程);动态查找时,频繁地将新记录插入到表(或文件)中,或频繁地从表(或文件)中删除记录,即表(或文件)中的内容不断地变化。;8.1顺序查找 无序表的顺序查找 从起点开始顺着往下查,一直找到正确的关键词为止 顺序查找方法从线性表的起始结点开始,逐个检查其后继结点,或者找到关键词K ? Ki,或者i ? N( i 为表中记录的下标,N为线性表的元素个数)查找以失败告终。 ;这个算法可以精确地阐述如下: 算法S ( N,R,K . i ) /* 给定包含N 个记录R1,R2,…,RN,其对应的关键词分别为K1,K2,…,KN的一个表,S查找一个给定的变元K . 这里假定N ? 1 . */ S1. [初始化] i ? 1 . S2. [比较关键词] 如果K ? Ki ,则算法成功结束. S3. [推进i ] i ? i ? 1 . S4. [ i ? N ?] 若i ? N,则返回步骤S2;否则此算法以失败告终 . ? ;? ;● 查找成功的平均查找长度: SS ●顺序查找的时间复杂度:O(n) ;算法Q ( N,R,K . i ) // 算法Q与S基本相同,区别在于Q之表(或文件)的末尾添加了一个“虚拟”记录RN ?1 . Q1. [初始化] 置i ? 1,并置KN ?1 ? K . Q2. [比较关键词] 如果K ? Ki,则转到步骤Q4 . Q3. [推进i ] 置i ? i ? 1,并返回步骤Q2 . Q4. [i ? N ?] 如果i ? N,则算法成功结束; 否则以失败告终. // 此时有i ? N ? 1? 算法Q大约比算法S节省百分之二十的运行时间。 算法Q还能更快吗? ;算法Q? ( N,R,K . i ) Q?1. [初始化] 置i ? ?1 . KN?1 ? K . Q?2. [前进两步] 置i ? i ? 2 . Q?3. [ Ki : K ] 若Ki ? K,则转到步骤Q?5 . Q?4. [ Ki?1: K ] 若Ki?1 ? K // 此时Ki ? K,则

文档评论(0)

0520 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档