- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
查找的基本概念 查找表:是由同一类型的数据元素(或记录)构成的集合。 对查找表可以进行以下各种操作: 1. 查找某个指定的数据元素是否在查找表中; 2. 查找某个指定数据元素的各种属性; 3. 在查找表中插入一个数据元素; 4. 在查找表中删除一个数据元素. 静态查找表:如果只对查找表进行 “查找”操作,就称这类查找表为静态查找表; 动态查找表:如果在查找过程中,还需要在查找表中插入或者删除元素,就称这类查找表为动态查找表。 静态查找表在计算机中可以有不同的表示方法: 顺序表(顺序查找——平均查找长度 ) 有序表(折半查找—— ) 索引顺序表(分块查找—— ) 对于每一种表示方法,都有各自适用的查找方法或查找算法。 二叉排序树的查找操作 二叉排序树的查找过程: 若二叉排序树为空,则查找不成功;否则 ⑴若给定值等于根结点的关键字,则查找成功; ⑵若给定值小于根结点的关键字,则继续在左子树上进行查找; ⑶若给定值大于根结点的关键字,则继续在右子树上进行查找。 通常使用二叉链表作为二叉排序树的存储结构。 例:在二叉排序树中查找关键字等于70的记录。 首先将key=60和根结点关键字比较,由于key<63,则继续结点63的左子树中查找。 二叉排序树的插入算法 对于动态查找表,在查找不成功的情况下,尚需插入关键字等于给定值的记录,并且从查找的过程容易得出插入的算法: 若二叉排序树为空树,则新插入的结点为根结点; 否则,新插入的结点必为一个新的叶子结点,其插入位置由查找过程中得到。 二叉排序树的构造 从空树出发,经过一系列的查找、插入操作,可以生成一棵二叉排序树。 二叉排序树的删除算法 和插入相反,删除在查找成功之后进行; 要求在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性。 可分三种情况讨论: 被删除的结点是叶子; 被删除的结点只有左子树或者只有右子树; 被删除的结点既有左子树,也有右子树。 练习题1: 记录的关键字序列为:63,90,70,55,67,42,98,83,10,45,58,试构造一棵二叉排序树,并求成功时的平均查找长度为多少? 在练习题 1 和练习题 2 中,是同一个关键字序列,但是得到了两棵完全不同的二叉排序树。这和关键字的输入顺序有关。 对于同一个关键字序列,如果关键字的输入顺序不同,就会得到不同的二叉排序树。 平衡二叉树查找 平衡二叉树(AVL树) AVL树或者是一棵空树,或者是具有下列性质的二叉树: 它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。 将该结点的左子树深度减去右子树深度的值,称为该结点的平衡因子(balance factor)。 也就是说,一棵二叉排序树中,所有结点的平衡因子只能为0、1、-1时,则该二叉排序树就是一棵平衡二叉树,否则就不是一棵平衡二叉树。 9.3 哈希表(散列表) 以上查找表的各种结构,有一个共同点: 记录在表中的位置和它的关键字之间不存在一个确定的关系; 因此,查找的过程为给定值依次和关键字集合中各个关键字进行比较,查找的效率取决于和给定值进行比较的关键字个数。 因此,用这类方法表示的查找表,其平均查找长度都不为零,不同表示方法的差别仅在于:和给定值进行比较的关键字的顺序不同。 对于频繁使用的查找表,希望ASL=0。即不需要从“比较”的结果来确定查找成功; 只有一个办法:预先知道所查关键字在表中的位置; 即,记录在表中位置和其关键字之间存在一种确定的关系。不需要经过比较,即可确定待查关键字。 对于动态查找表而言,⑴ 表长不确定;⑵在设计查找表时,只知道关键字所属范围,而不知道确切的关键字。 因此,一般情况,需建立一个函数关系,以f(key)作为关键字为key的记录在表中的位置,通常称这个函数f(key)为哈希函数。 注意:这个函数并不一定是数学函数。 简单地说,哈希表是基于哈希函数建立的一种查找表。 例 11个元素的关键字分别为 18,27,1,36,22,6,10,13,41,44,25。 选取关键字与记录位置之间的函数为: f(key) = key mod 11 通过该函数对11个元素建立查找表如下: 哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可; 缺点:由于哈希函数是一个压缩映象,因此,在一般情况下,很容易产生“冲突”现象,即:key1≠key2,而 f(key1) = f(key2)
原创力文档


文档评论(0)