NO 查找培训讲义.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文档。上传文档
查看更多
解决冲突的方法 (2) 二次方探查法 该方法规定,若在d地址发生冲突,下一次探查位置为d+12,d-12,d+22,d- 22, …,直到找到一个空闲位置为止。 (3) 随机探测法 该方法规定,若在d地址发生冲突,下一次探查位置为di=伪随机数序列。 开放地址法充分利用了哈希表的空间,但在解决一个冲突时,可能造成下一个冲突。另外,用开放地址法解决冲突不能随便对结点进行删除。 解决冲突的方法 2、再哈希法 Hi = Rhi( key ) i = 1,2,…,k Rhi均是不同的哈希函数,这种方法不易产生“聚类”,但增加了计算的时间。 3、链地址法 将所有关键字为同义的记录存储在同一线性链表中。 假设某哈希函数产生的哈希地址在区间[0,m-1]上,则设立一个指针型向量Chain ChainHash[m],凡哈希地址为i的记录都插入到头指针为ChainHash[i]的链表中。 哈希表的查找 在哈希表上进行查找的过程和哈希造表的过程基本一致。 给定K值,根据造表时设定的哈希函数求得哈希地址,若表中此位置上没有记录,则查找不成功;否则比较关键字,若和给定的值相等,则查找成功;否则根据造表时设定的处理冲突的方法找“下一地址”,直到哈希表中某个位置为“空”或者表中所填记录的关键字等于给定值时为止。 创建二叉排序树CreateBST ( bt, str, n ) 若从空树出发,经过一系列的查找插入操作之后,可生成一棵二叉树。设查找的关键字序列为{50, 52, 20, 60, 58, 30, 70, 25}. 50 20 30 52 60 58 70 25 删除结点BSTDelete ( bt ) 1)首先在二叉排序树中查找关键字为k的结点p,用f指向其双亲结点。 2)若*p结点无左子树,则用*p结点的右孩子替换它,其过程是:若*p是*f的左孩子,则将*p的右孩子作为*f的左孩子,若*p是*f的右孩子,则将*p的右孩子作为*f的左孩子。这里包含了*p为叶子结点的情况。 删除结点BSTDelete ( bt ) 3)若*p结点无右子树,则用*p结点的左孩子替换它,其过程是:若*p是*f的左孩子,则将*p的左孩子作为*f的右孩子,若*p是*f的右孩子,则将*p的左孩子作为*f的右孩子。 4)若*p结点既有左子树又有右子树,则可以用*p结点的左子树的最右下结点替换它,也可以用*p结点的右子树的最左下结点替换它,这里采用前者。其过程是:查找*p左子树的最右下结点*r,用f1指向*r的双亲结点,找到的*r一定无右子树,采用前面类似的方式先删除*r,然后用*r替换*p。 二叉排序树 二叉排序树的结点删除 F P C S Q cl ql sl pr f p s q F C S Q cl ql sl pr f s c c F C S Q cl ql pr f p q c sl 二叉排序树性能分析 就平均时间性能而言,二叉排序树上的查找和二分查找差不多。但就维护表的有序性而言,前者更有效,因为无需移动记录,只需修改指针即可完成对二叉排序树的插入和删除操作,且其平均的执行时间均为O(log2n)。 平衡二叉树 平衡二叉树(balanced binary tree)是由阿德尔森一维尔斯和兰迪斯(Adelson-Velskii and Landis)于1962年首先提出的,所以又称为AVL树。 若一棵二叉树中每个结点的左、右子树的深度之差的绝对值不超过1,则称这样的二叉树为平衡二叉树。 将该结点的左子树深度减去右子树深度的值,称为该结点的平衡因子(balance factor)。 也就是说,一棵二叉排序树中,所有结点的平衡因子只能为0、1、-1时,则该二叉排序树就是一棵平衡二叉树,否则就不是一棵平衡二叉树。 平衡二叉树 1 1 0 0 -1 1 -1 0 0 1 0 2 -1 0 0 1 0 -1 0 -2 0 0 1 0 平衡二叉树 非平衡二叉树的平衡处理 若一棵二叉排序树是平衡二叉树,插入某个结点后,可能会变成非平衡二叉树,这时,就可以对该二叉树进行平衡处理,使其变成一棵平衡二叉树。处理的原则应该是处理与插入点最近的、而平衡因子又比1大或比-1小的结点。下面将分四种情况讨论平衡处理。 注:假设由于在二叉树上插入结点而失去平衡的最小子树根结点的指针为a。 平衡二叉树 (1)LL型 的处理(左左型) 如图所示,在A的左孩子B上插入一个左孩子结点C,使A的平衡因子由1变成了2,成为不平衡的二叉树序树。这时的平衡处理为:将A顺时针旋转,

文档评论(0)

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

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

1亿VIP精品文档

相关文档