[电脑基础知识]数据结构——使用C语言第4版[朱战立][电子教案]第11章.pptVIP

[电脑基础知识]数据结构——使用C语言第4版[朱战立][电子教案]第11章.ppt

  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文档。上传文档
查看更多
[电脑基础知识]数据结构——使用C语言第4版[朱战立][电子教案]第11章

第11章 查找 11.1 查找的基本概念 11.2 静态查找表 1.顺序表 11.3 动态查找表 构造哈希表时 ,冲突是不可避免的,有关因素主要有如下三个: 2.哈希函数的构造方法 一、除留余数法 三、数字分析法 一、开放定址法 (2)平方探查法 二、链表法 作业 例11-2建立数据元素集合a的哈希表。a = {16, 74, 60, 43, 54, 90, 46, 31, 29, 88, 77, 66, 55}。要求哈希函数采用除留余数法,解决冲突方法采用链表法。 设计分析:数据元素集合a中共有13个数据元素,取哈希表的内存单元个数m=13。除留余数法的哈希函数为:h(K) = K mod m有: h(16) = 3 h(74) = 9 h(60) = 8 h(43) = 4 h(54) = 2 h(90) = 12 h(46) = 7 h(31) = 5 h(29) = 3 h(88) = 10 h(77) = 12 h(66) = 1 h(55) = 3 采用链表法的第一种方法建立的哈希表存储结构 如下图所示 link data 下标 0 66 1 54 2 16 3 43 4 31 5 6 46 7 60 8 74 9 88 10 11 90 12 29 55 77 ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ data next 3 4 5 6 7 8 10 6 4 8 3 5 7 10 (a) (b) (a)满二叉排序树时,k = log2(7+1)=3,所以查找成功的平均查找长度为: (b)左分支退化二叉排序树时,k = n=7,所以查找成功的平均查找长度为: 在最坏情况下,二叉排序树的平均查找长度为O(n)。在一般情况下,二叉排序树的平均查找长度为O(log2n)。 为了防止二叉排序树的最坏情况出现,可以把二叉排序树改造成平衡二叉树。 平衡二叉树或者是一棵空树,或者是具有这样性质的二叉排序树:它的左子树和右子树都是二叉排序树,并且左子树和右子树的深度之差的绝对值不超过1。 基本方法:就是在构造二叉排序树的基础上,每当如果插入了一个新结点后,使二叉树中某个结点的左子树和右子树的深度之差的绝对值超过1,则调整相应的二叉树,使二叉树中该结点的左子树和右子树的深度之差的绝对值不超过1。 特点:平衡二叉树一定不会出现单分支退化二叉排序树那样的情况,因此,平衡二叉树的平均查找长度为O(lbn)。但相对二叉排序树来说,构造平衡二叉树需要花费较多的时间,而且删除平衡二叉树中某个结点时,也要考虑删除某个结点后,平衡二叉树中某个结点的左子树和右子树的深度之差的绝对值不能超过1。 七、平衡二叉树 1 B_树 B_树是一种平衡多叉排序树。平衡是指所有叶结点都在同一层上,从而可避免出现像二叉排序树那样的分支退化现象。因此B_树的动态查找效率更高。 B_树中所有结点的孩子结点的最大值称为B_树的阶,一棵m阶的B_树或者是一棵空树,或者是满足下列要求的m叉树: 11.3.2 B_树和B+树 (1)树中每个结点至多有m个孩子结点。 (2)除根结点外,其他结点至少有?m/2?个孩子结点 (符号“? ?”表示上取整)。 (3)若根结点不是叶结点,则根结点至少有两个孩子结点; (4)每个结点的结构为: n P0 K1 P1 K2 P2 … Kn Pn (5)所有叶结点都在同一层上。 1 50 20 41 1 72 2 1 44 3 23 30 35 1 15 1 60 3 77 80 88 ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ root 一棵4阶B_树 B_树的查找算法 在B_树上查找数据元素x的方法为:将 x.key与根结点的Ki逐个进行比较: (1)若x.key=Ki则查找成功。 (2)若keyK1则沿着指针P0所指的子树继续查找。 (3)若KikeyKi+1则沿着指针Pi所指的子树继续查找。 (4)若keyKn则沿着指针Pn所指的子树继续查找。 插入过程分两步完成: (1)利用查找算法找出该关键字的插入结点(B_树的插入结点一定是叶结点)。 (2)判断该结点是否还有空位置,即判断该结点是否满足nm-1,若该结点满足nm-1,说明该结点还有空位置,直接把关键字x.key插入到该结点的合适位置上;若该结点有n=m-1,说明该结点已没有空位置,要插入就要分裂该结点。 B_树的插入算法 在3阶B_树上进行插入操作如下图示: 100 20

文档评论(0)

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

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

1亿VIP精品文档

相关文档