数据结构 第9篇 查找.pptVIP

  • 15
  • 0
  • 约8.75千字
  • 约 59页
  • 2017-06-07 发布于湖北
  • 举报
9.1 静态查找表 一、 顺序查找 查找过程:从表的一端开始逐个进行记录的关键字和给定值的比较. 二、折半查找 查找过程:每次将待查记录所在区间缩小一半 适用条件:采用顺序存储结构的有序表 算法实现 设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值 初始时,令low=1,high=n,mid=?(low+high)/2? 让k与mid指向的记录比较 若k==r[mid].key,查找成功 若kr[mid].key,则high=mid-1 若kr[mid].key,则low=mid+1 重复上述操作,直至lowhigh时,查找失败 算法描述 三、 分块查找 查找过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找。 说明:“分块有序”指的是第二块所有的关键字均大于第一块中最大的关键字。 查找分为两步: 1. 确定待查记录所在块; (可以用顺序或折半查找) 2. 在块内顺序查找. (只能用顺序查找) 适用条件:分块有序表 算法实现 用数组存放待查记录,每个数据元素至少含有关键字域 建立索引表,每个索引表结点含有最大关键字域和指向本块第一个结点的指针 分块查找方法评价 (2) 调整形态 (可归纳为四种) ① LL型平衡旋转(顺时针) 失去平衡点的平衡因子为2, 其左孩子的平衡因子为1 2 A a AR h-1 1 B BR BL h-1 h h+1 LL 0 A AR BR h-1 h-1 0 B BL h h 调整语句为: B →rchild =A; A → lchild =B → rchild ; A→ bf=0 B → rchild=A; B → bf=0 ② LR型平衡旋转 失去平衡点的平衡因子为2, 其左孩子的平衡因子为 -1 AR h-1 2 A -1 B BL CL h-1 h-1 h+1 1 C h h-2 CR LR 0 C AR h-1 0 B BL CL h-1 h-1 -1 A h-2 CR A → lchild =C → rchild ; B → rchild = C → lchild C → rchild=A; C → lchild =B; 2 A 2 C AR h-1 h-2 CR 0 B BL CL h-1 h-1 h h+1 ③ RR型平衡旋转(逆时针,与①LL对称) 失去平衡点的平衡因子为 -2, 其右孩子的平衡因子为 -1 -2 A AL BL h-1 h-1 -1 B h BR RR 0 B BL AL h-1 0 A BR ④ RL型平衡旋转 失去平衡点的平衡因子为 -2, 其右孩子的平衡因子为 1 RL 0 C BR 0 A AL CL -1 B h-2 CR 1 B BR h-1 -2 A AL h-1 CL h-1 1 C h-2 CR 中序遍历:AL A CL C CR B BR AL A CL C CR B BR (3) 为了得到平衡树,需作如下处理 ① 找到可能失去平衡的最小子树的根结点 可能失去平衡的最小子树的根结点,是离插入结点最近的且插入前平衡因子值≠0: 插入前平衡因子的绝对值0 插入后平衡因子的绝对值1 离插入结点最近的失去平衡的祖先结点 ② 判别插入结点后可能失去平衡的最小子树的根结点是否失去平衡,(该结点的平衡因子的绝对值1); ③ 判别旋转类型作相应处理。 4、AVL树上插入结点算法 (1) 算法描述 查找 s 结点的插入位置过程中,记下离s 最近的,且平衡因子不等于0的结点,令 a 指向该结点;(即可能失去平衡的最小子树的根结点)。 修改 a 至 s 路径上所有结点的平衡因子值; 判别a 结点的平衡因子绝对值是否大于1,若是,作旋转处理 5.平衡二叉树的查找及性能分析 平衡二叉树本身就是一棵二叉排序树,故它的查找与二叉排序树完全相同。但它的查找 性能优于二叉排序树,不像二叉排序树一样,会出现最坏的时间复杂度O(n),它的时间复杂度与二叉排序树的最好时间复杂相同,都为O(log2n)。 例 对给定的关键字序列4,5,7,2,1,3,6,试用二叉排序树和平衡二叉树两种方法查找,给出查找6的次数及成功的平均查找长度。 0 6 2 1 4 3 7 0 0 0 0 0 5 0 从二叉排序树可知,查找6需4次,平均查找长度ASL=(1+2+2+3+3+3

文档评论(0)

1亿VIP精品文档

相关文档