数据结构Chap8.ppt

数据结构Chap8

Chapter08 Searching 第七章 查找 Prof. Qing Wang 本章学习的线索 主要线索 重点 静态查找表:顺序查找,二分查找,索引查找 动态查找表:概念和方法 哈希查找表:概念和策略 难点 二叉排序树和二叉平衡树 B树和B+树 Contents Definition of searching (Retrieval) Static searching table Dynamic searching table Hash table Searching efficiency analysis Conclusion 8.1 Definition Iterative algorithm Recursive algorithm Question? 如果有序表中各记录的查找概率不等,情况如何呢? 简单地按照原来的思路,构造的二叉查找树未必是最优的。 在只考虑查找成功的情况下,产生性能最佳的判定树的目标是使 最小。 PH值最小的二叉树叫静态最优查找树。 8.3 Binary searching tree 2. Searching algorithm in BST (二叉排序树的查找) Method From the root of BST, if BST == NULL, return Failure; else if compare the given key x with the key in root node, Equal, return the position of the root X root.getKey(), search in the left sub BST X root.getKey(), search in the right sub BST Until found or BST== NULL Example Implementation Example 3. Node Insertion of BST (二叉排序树结点的插入) 当树中不存在关键字等于给定值的结点时,需要生成新结点并插入到二叉树中。而新插入的结点必定是一个叶子结点,并且是查找不成功时查找路径上访问的最后一个结点左孩子或右孩子结点。 算法如下: 1) 如果二叉排序树为空,则新结点作为根结点; 2) 如果二叉排序树非空,则将新结点的关键码与根结点的关键码比较,若小于根结点的关键码,则将新结点插入到根结点的左子树中;否则,插入到右子树中; 3) 子树中的插入过程和树中的插入过程相同,如此进行下去,直到找到该结点,或者直到新结点成为叶子结点为止。 Example Inorder traversal of BST 中序遍历二叉排序树可以得到一个关键字的有序序列(怎么证明?) 即就是说,一个无序序列可以通过构造一棵二叉排序树而变成一个有序序列。 另外可以看到,每次插入的新结点都是树中一个叶子结点,因此在进行插入的时候不必移动其他结点,仅需改动某个结点的指针。 由此可见二叉排序树既有折半查找的特性,又采用了链表作存储结构。因此二叉排序树是动态查找表中的一种有效表示方法。 Problem For the same data set, the different BST will be created while the different order of input, for example, Quiz For a sequence with n elements, how much BST can be created? For the below BST, how many different input arrays of 1,2,3,4,5,6,7 can setup this BST? 8.4 平衡二叉树 平衡二叉树又称AVL树。 它或者是一棵空树,或者是具有下列性质的二叉树: 它的左右子树均为平衡二叉树,且左右子树的深度之差的绝对值不超过1。 平衡因子BF (Balance Factor)为该结点的左子树的深度减去右子树的深度。 在平衡二叉树上所有结点平衡因子只可能为-1, 0, 1。只要二叉树上有一个结点的平衡因子的绝对值大于1,则该二叉树就是不平衡的。 8.4 平衡二叉树 对于平衡二叉树来说,它的深度和log2N是同数量级的,因此我们希望任何初始序列构成的二叉排序树都是AVL树。 如何使构成的二叉排序树成为平衡二叉树呢?可以通过对结点的旋转操作来实现。下面讨论一般的情况。 考虑失去平衡的点以及他的祖先结点的路径。 四种基本情况 一字形 / or \ 之字形 or 例 子 Example

文档评论(0)

1亿VIP精品文档

相关文档