现在正在学习查找和排序,为了节省时间提高效率,就正好边学习边整理知识点吧!
知识点一:二分查找/折半查找
1.二分查找的判定树(选择题)
下列二叉树中,可能成为折半查找判定树(不含外部结点)的是: (4分)
注:折半查找判定树是一棵二叉排序树,它的中序遍历结果是一个升序序列,可以在选项中的树上依次填上相应的元素。虽然折半查找可以上取整也可以下取整但是一个查找判定树只能有一种取整方式。
如果升序序列是偶数个,那么终点应该偏左多右少。在2选项中,由根节点左子树4个节点而右子树5个节点可以确定用的是向下取整策略,但是它的左子节点在左子树种对应的终点左边2个,右边个,明显是上取整策略,策略没有统一,所以是错的。其他的选项类似分析。
2.二分查找法/折半查找法
已知一个长度为16的顺序表L,其元素按关键字有序排列。若采用二分查找法查找一个L中不存在的元素,则关键字的比较次数最多是: (2分)
注:一次找到最边界的那一个树的情况下有最多次数
这个题中结点数16是个偶数: 第一次(0+15)/2 7 第二次 (8+15)/2 11
第三次 (12+15)/2 14 第四次(14+15)/2 14 第五次 (15+15)/2 15(下取整 的就 向右计算求最多次数)
第一次 (0+15)/2 8 第二次(0+7)/2 4 第三次(0+3)/2 2 第四次(0+1)/2 0
第五次 (0+0)/2 0(下取整的话就向左求最多次数)
若结点数是奇数15:第一次(0+14)/2 7 第二次 ( 0+6)/2 3 第三次(0+2)/2 1
第四次(0+0)/2 0
第一次(0+14)/2 7 第二次(8+14)/2 11 第三次 (12+14)/2 13
第四次(14+14)/2 0
这时候向左或者向右都是OK的(因为得到的数都是能够被2整除的)
但是划重点了!!!折半查找一个有序表中不存在的元素,若向下取整,则要最多比较[log2n]+1次,若向上取整,则要最多比较[log2(n+1)],其实就是求树的深度.(这一块自己的说法可能不够准确,希望大家看到有问题的可以指出来)
结合实际,我们用[log2n]+1来算更简单并且计算[log2n]要取整数,因为可能会存在不是满二叉树的情况。
相应的也会有求关键字的最小查找次数,在这个题中是4次,可以通过把这棵树画出来更直观地观察其深度。
知识点二:二叉搜索树/二叉排序树
1.各种树的平均查找效率
BST:二叉搜索树
查找最好时间复杂度为O(lgn),最坏为O(n);
删除和插入的时间复杂度与查找差不多
AVL:二叉平衡树
查找时间复杂度为O(lgn)
插入的时候做多需要一次旋转,时间复杂度为O(lgn)
删除的时候需要的时间复杂度为O(2lgn)
红黑树:
查找时间复杂度为2O(lg(n+1))
删除和插入的时间复杂度为O(lgn)
B树:
从叶节点插入心的节点,
从磁盘读写效率上讲,查找、删除和插入的时间复杂度要小于任何二叉树
B+树
非叶节点只是为了索引第一个节点
之后叶节点之间可以相互索引,大型数据库采用的结构