我需要从CLRS算法书中获得这个练习的提示:
证明无论我们在高度-h二进制搜索树中从哪个节点开始, k 对Tree-Successor的连续调用都需要 O(k + h)时间
答案 0 :(得分:8)
x
成为起始节点,z
成为k
连续调用TREE-SUCCESSOR之后的结束节点。p
成为x
和z
之间的简单路径。y
成为x
访问的z
和p
的共同祖先。p
的长度最多为2h
,即O(h)
。output
成为其值在x.key
和z.key
之间的元素。output
的尺寸为O(k)
。k
连续调用TREE-SUCCESSOR时,
访问p
中的节点,
除了节点x
,y
和z
之外,
如果访问p
中某个节点的子树,则其所有元素都在output
。O(h+k)
。答案 1 :(得分:3)
提示:找出一个小例子,观察结果,试着推断出原因。
要开始使用,需要考虑以下事项。
从某个节点开始,对Tree-Succcesor的k次连续调用构成了部分树步行。这次步行访问了多少(至少和最多)节点? (提示:想想关键(x))。请记住,边缘最多访问两次(为什么?)。
最终提示:结果为O(2h+k)
。