数据结构课件8查找1章节幻灯片.PPTVIP

  • 10
  • 0
  • 约7.47千字
  • 约 58页
  • 2018-03-26 发布于广东
  • 举报
同样 3 个数据{ 1, 2, 3 },输入顺序不同,建立起来的二叉排序树的形态也不同。这直接影响到二叉排序树的查找性能。 如果输入序列选得不好,会建立起一棵单支树,使得二叉排序树的高度达到最大,这样必然会降低查找性能。 {2, 1, 3} {1, 2, 3} {1, 3, 2} {2, 3, 1} {3, 1, 2} {3, 2, 1} 平衡二叉树 平衡二叉树定义: 或者是一棵空树,或者是具有下列性质的二叉树 左子树和右子树都是平衡二叉树 左子树和右子树的深度之差的绝对值不超过1 平衡二叉树的生成过程 输入数据序列{13,24,37,90,53 } 13 13 24 24 37 13 37 13 24 24 37 13 90 53 24 37 13 53 90 24 53 13 90 37 B-树 一棵m阶B-树是一棵平衡的m路查找树,它或者是空树,或者是满足下列性质的树: 树中每个结点至多有m棵子树 若根结点不是叶子结点,则至少有两棵子树; 除根结点以外的所有非终端结点至少有?m/2 ?棵子树; 所有的叶子结点都位于同一层,且不带信息(可看作外部结点或查找失败结点)。 所有非终端结点包含下列信息数据: ( n, P0, K1, P1, K2, P2, … ,Kn , Pn ) ?m/2 ?-1=n=m-1 B-树举例 B-树的查找举例 在下面的图中查找关键码35。依次读入结点a、c、f ,查找成功。若查找37,则在结点f后进入失败结点,查找失败。 B-树的查找分析 若查找成功,则所需时间取决于关键码所在的层次; 若查找不成功,则所需时间取决于树的高度。 B- 树的插入 B-树是从空树开始,逐个插入关键码而成。 插入可能导致结点的“分裂”。当插入后关键码个数不超过m-1时,可以直接插入;否则,需要进行结点的“分裂” 。 “分裂”的原则 设结点p中已经有m-1个关键码,插入后为: (m,P0 ,K1 ,P1 ,K2 ,P2 ,...,Km ,Pm) 可以将它分解为两个结点: p:( ?m/2 ? -1,P0 ,K1 ,P1 ,K2 ,P2 ,...,K?m/2 ? -1 ,P ?m/2 ? -1) q:(m- ?m/2 ?,P ?m/2 ?,K ?m/2 ? +1 ,P ?m/2 ? +1 ,...,Km ,Pm) 位于中间的关键码Km/2与新结点q形成二元组 K ?m/2 ? ,q 插入到这两个结点的父结点中。 “分裂”举例(在3阶B-树中插入139) 从空树开始的插入举例 从空树开始的插入举例(续) B-树的删除 首先从B-树中查找关键码Ki所在结点。 若该结点为最下层结点,则直接删除它; 若该结点为非最下层结点,则用Pi对应的子树中的最小关键码x代替Ki所在位置,故问题转换为叶结点上关键码的删除。 B-树的删除的4种情况 1 简单删除 所在最下层结点又是根结点,且关键码个数大于2; 2 简单删除 所在最下层结点不是根结点,且删除前关键码个数大于等于?m/2 ? ; 3 借键 所在结点删除前关键码个数为 ? m/2 ? -1,“右借”或“左借”成功。 4 级联合并 所在结点删除前关键码个数为 ? m/2 ? -1, 此时“右借”和“左借”不成功。 3阶树中简单删除举例 3阶树中终端结点借键举例 3阶树终端结点简单合并举例 非终端结点的简单删除举例 B+树 B+树是B-树的变型树。m阶B +树定义为: 1 树中每个非叶子结点最多有m棵子树; 2 根结点(非叶子结点)至少有2个子树;其它非叶子结点至少有 ?m/2 ? 棵子树;有n棵子树的非叶子结点有n个关键字。 3 所有的叶子结点都位于同一层,从小到大顺序链接。 4 所有非叶子结点可看成是索引部分,结点中仅含有其子树中的最大或最小关键字。 ?m/2 ? =n=m 3阶B+树举例 非叶结点中子树棵数n∈[2,3] 59 97 15 44 59 72 97 10 15 21 37 44 51 59 63 72 85 91 97 root aqt 小结 静态查找表 顺序查找 折半查找 分块查找 动态查找表 二叉排序树和平衡二叉树 B-树和B+树 查找 梁春燕 华北电力大学 信息管理教研室 主要内容 静态查找表 动态查找表 查找 查找——也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素 关键字——是数据元素中某个数据项的值,它可以标识一个数据元素 查找方法评价

文档评论(0)

1亿VIP精品文档

相关文档