对于一般的二叉搜索树(Binary Search Tree),其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度(O(log2n))同时也由此而决定。但是,在某些极端的情况下(如在插入的序列是有序的时),二叉搜索树将退化成近似链或链,此时,其操作的时间复杂度将退化成线性的,即O(n)。我们可以通过随机化建立二叉搜索树来尽量的避免这种情况,但是在进行了多次的操作之后,由于在删除时,我们总是选择将待删除节点的后继代替它本身,这样就会造成总是右边的节点数目减少,以至于树向左偏沉。这同时也会造成树的平衡性受到破坏,提高它的操作的时间复杂度。
平衡二叉搜索树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。常用算法有红黑树、AVL、Treap、伸展树等。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在O(log2n),大大降低了操作的时间复杂度。
--------------------------------------------------------------------可爱的分界线-----------------------------------------------------------------------------------
二分查找方法平均长度为O(log2n)
当中间的没有找到的时候,left和right下标应该左移或者右移(left++,right--),实质是( right = middle-1,left=middle+1)
具有12个关键字的有序表,折半查找的平均查找长度(A)
A.3.1
B.4
C.2.5
D.5
注解:
将12个数画成完全二叉树,第一层有1个、第二次2个、第三层4个,第四层只有5个。
二分查找时:
第一层需要比较1次
第二两个数,每个比较2次
第三层四个数,每个比较3次
第四层五个数,每个比较4次
则平均查找长度即为:(1+2*2+3*4+4*5)/12 = 37/12 = 3.0833 即为 A、3.1
--------------------------------------------------------------------可爱的分界线-----------------------------------------------------------------------------------
下面哪一方法可以判断出一个有向图是否有环(回路)(AB)
A.深度优先遍历
B.拓扑排序
C.Dijkstra求最短路径
D.求关键路径
--------------------------------------------------------------------可爱的分界线-----------------------------------------------------------------------------------
在ASC算法team日常开发中,常常面临一些数据结构的抉择,令人纠结。目前大家在策划一个FBI项目(Fast Binary Indexing),其中用到的词汇有6200条,词汇长度在10-15之间,词汇字符是英文字母,区分大小写。请在下面几个数据结构中选择一个使检索速度最快的(D)
A.二叉搜索树,比较函数开销:1次运算/每字符
B.哈希表,hash算法开销:10次运算/每字符
C.链表,比较函数开销:1次运算/每字符
D.TRIE树(字典树),寻找子节点开销:1次运算/每字符
注解:字典树:
它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。
--------------------------------------------------------------------可爱的分界线-----------------------------------------------------------------------------------
从n个数里面找最大的两个数理论最少需要比较(n+logn-2)
类似比赛晋级,两两配对比较,赢的再两两配对,最后得到冠军(最大的数),可以看成是一棵二叉树,以4人为例:
0
0 2
0 1 2 3
可以看出,找出最大的数比较次数是n-1。然后第二大的数肯定是跟冠军比较过的数字,那么很明显每一层都有一个,所以有logn-1次比较。
所以总共是n+logn-2次比较
--------------------------------------------------------------------可爱的分界线-----------------------------------------------------------------------------------
顺序查找的时间复杂度为o(n)
分块查找的时间复杂度为o(log2n)到o(n)之间
二分查找的时间复杂度为o(log2n)
哈希查找的时间复杂度为o(1)
--------------------------------------------------------------------可爱的分界线-----------------------------------------------------------------------------------
设有关键字n=2h -1,构成二叉排序树,每个关键字查找的概率相等,查找成功的ASL最大是n()
A.对
B.错
注解:什么是ASL?平均查找长度
ASL =∑PiCi (Pi 为查找第i个记录的概率,Ci为找到第i个记录数据需要比较的次数,Ci随查找过程的不同而不同。)
二分查找:
- 满二叉树时,若每个记录的查找概率相等时,Pi =1/n;ASL = 1/n(1*20+2*21+.....+n*2n-1)=log2(n+1)-1
- 要求查找成功的ASL最大,就是只有左子树或者只有右子树的情况,即顺序表以第一个数或最后一个数为根节点作二叉排序树。同样,若每个记录的查找概率相等时,Pi =1/n。∑PiCi =1/n∑(n-i+1)=(n+1)/2(所以选B)
--------------------------------------------------------------------可爱的分界线-----------------------------------------------------------------------------------