算法笔记

本文探讨了二叉搜索树在极端情况下的性能退化问题,并介绍了平衡二叉搜索树(如红黑树、AVL)如何保持操作时间复杂度在O(log2n)。此外,还涉及了二分查找的平均长度、有向图环检测方法以及在不同数据结构(如字典树)中选择以提高检索速度。文章进一步讨论了寻找最大两个数的最少比较次数和各种查找算法的时间复杂度,包括顺序查找、分块查找、二分查找和哈希查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    对于一般的二叉搜索树(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)

--------------------------------------------------------------------可爱的分界线-----------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值