1 将线性表中的结点信息组织成平衡二叉树,其优点之一是总能保证任意检索长度均为log2 n量级(n为线性表中的结点数目) 正确
分析:平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
平衡二叉树的常用实现方法有 红黑树 、 AVL 、 替罪羊树 、 Treap 、 伸展树 等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的 数列 ,可以参考Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
平衡二叉树就是左右子树的高度大致相等。 具有n个节点线性表,组织成平衡二叉树后高度为log 2 n 。所以查找最坏情况是查找到叶子节点,所经历的长度就是log 2 n 。这种二叉树叫二叉查找树 。
2.任一查找树(二叉分类树)的平均查找时间都小于用顺序查找法查找同样结点的线性表的平均查找时间。(错误)
分析:只有左子树或者右子树的BST都是一样。
3.二分查找的时间复杂性为
分析:二分查找因为每次都是从中间点开始查找,所以最坏情况是目标元素存在于最边缘的情况。 比如1~9,最坏情况就是1或者9,当然4,6这种也算是边缘(中心的边缘)。 因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:
一次二分剩下:n/2 ;
两次二分剩下:n/2/2 = n/4 ;
m次二分剩下:n/(2^m) ;
在最坏情况下是在排除到只剩下最后一个值之后得到结果,所以为 n/(2^m)=1; 2^m=n;
所以时间复杂度为:log(n) .
4.从n个数里面找最大的两个数理论最少需要比较: n+logn-2
分析:
0
0 2
0 1 2 3
可以看出,找出最大的数比较次数是n-1。然后第二大的数肯定是跟冠军比较过的数字,那么很明显每一层都有一个,所以有logn-1次比较。
所以总共是n+logn-2次比较 。
1.建小堆是时间复杂度为O(n)或比较n-1次,找到最大的一个;
2.找到最大元素后,调整小堆,找到次大元素,比较logn-1;
3.所以共需要比较 n+logn-2次
(这里仅考虑问题的一般公式,不是通用公式,即没有考虑n=1,n=2的情况)