算法导论12.2-8 从任意结点使用后继函数k次的时间复杂度为O(k+h)

从任意结点使用后继函数k次,假设二叉搜索树的高度为h,则时间复杂度为O(k+h)


分析

从表面上来看,回溯父结点的复杂度为O(h),如果多次回溯,则总体复杂度可能远超O(k+h)

再想使用数学归纳法,假设起始结点和回溯结点分别位于某个结点的左右子树,然后发现无法使用替换法证明。最后从12.2-7 中得到一丝信息,即只要证明后继函数k次后,访问结点的总次数为O(k+h)即可


证明

设定遍历的起始结点为S,结束结点为T,则S和T的关系总共有3种(如下图)。



(1) S 和 T有共同的祖先结点p,S在P的左子树,T在P的右子树

(2) T 为S的祖先,S在T的左子树中

(3) S 为T的祖先,T在S的右子树中


下面仅证明在(1) 的情形,(2) (3)可类似证明在(1) 的情形下,设S到P的折线段为Ls,T到P的折线段为Lt,


先证明一个简单的引理,从S访问到P,仅仅访问Ls右方、Lt左方的结点,这个引理看起来也是对的,假设Ls上某个结点x的左孩子y,则S存在于结点x的右子树,从bst_successor 代码可以发现,回溯时仅仅访问父结点,不会访问到父结点的左孩子,只可能访问父结点的右孩子,所以y结点不可能访问到


再证明一个简单的引理,在(1) 的情形下,P的左子树中所有在Ls右方的所有结点都会作为后继被遍历到

假设Ls上某个结点x,有右子树y,则S在结点x的左子树上,所以有 S< x < y < P,所以结点x的右子树的所有结点都会作为后继被遍历到


假设S=>T的遍历过程,在P左子树遍历r个结点,在P右子树遍历s个结点,则k = r + s + 2,2是因为要访问到P和P的右子树的最小结点。再证明P左子树访问结点个数最多为 r + (h-1),因为除了Ls上的结点,P左子树在Ls右方的所有结点都是后继,都在r中,最多是Ls上的结点不属于后续结点,Ls长度最长为h-1


根据12.2-7的证明,P左子树访问结点总次数 H(r, h-1) <= 2(r+h-1),P右子树访问结点总次数 H(s, h-1) <= 2(s+h-1),S=>T遍历过程访问结点次数

H(k,h) <= H(r, h-1) + (h-1) + 1 + (h-1) + 1 + H(s,h-1) 

H(k,h) <= 2(r+h-1) + (h-1) + 1 + (h-1) + 1 + 2(s+h-1)=2(k+2h-2)=O(k+h)


当S和T有子结点时也很好证明,(2) (3)情形也可以类似证明 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目录(Table of Contents)   前言(Preface)   第一部分(Part I) 基础(Foundations)   第一章 计算中算法的角色(The Role of Algorithms in Computing)   第二章 开始(Getting Started)   第三章 函数的增长率(Growth of Functions)   第四章 递归(Recurrences)   第五章 概率分析与随机化算法(Probabilistic Analysis and Randomized Algorithms)   第二部分(Part II) 排序与顺序统计(Sorting and Order Statistics)   第六章 堆排序(Heapsort)   第七章 快速排序(Quicksort)   第八章 线性时间中的排序(Sorting in Linear Time)   第九章 中值与顺序统计(Medians and Order Statistics)   第三部分(Part III) 数据构(Data Structures)   第十章 基本的数据构(Elementary Data Structures)   第十一章 散列表(Hash Tables)   第十二章 二叉查找树(Binary Search Trees)   第十三章 红-黑树(Red-Black Trees)   第十四章 扩充的数据构(Augmenting Data Structures)   第四部分(Part IV) 高级的设计与分析技术(Advanced Design and Analysis Techniques)   第十五章 动态规划(Dynamic Programming)   第十六章 贪婪算法(Greedy Algorithms)   第十七章 分摊分析(Amortized Analysis)   第五部分(Part V) 高级的数据构(Advanced Data Structures)   第十八章 B-树(B-Trees)   第十九章 二项式堆(Binomial Heaps)   第二十章 斐波纳契堆(Fibonacci Heaps)   第二十一章 不相交集的数据构(Data Structures for Disjoint Sets)   第六部分(Part VI) 图算法(Graph Algorithms)   第二十二章 基本的图算法(Elementary Graph Algorithms)   第二十三章 最小生成树(Minimum Spanning Trees)   第二十四章 单源最短路径(Single-Source Shortest Paths)   第二十五章 全对的最短路径(All-Pairs Shortest Paths)   第二十六章 最大流(Maximum Flow)   第七部分(Part VII) 精选的主题(Selected Topics)   第二十七章 排序网络(Sorting Networks)   第二十八章 矩阵运算(Matrix Operations)   第二十九章 线性规划(Linear Programming)   第三十章 多项式与快速傅里叶变换(Polynomials and the FFT)   第三十一章 数论算法(Number-Theoretic Algorithms)   第三十二章 字符串匹配(String Matching) ......................................................

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值