【发布时间】:2011-12-10 06:00:06
【问题描述】:
我需要 CLRS 算法一书中关于这个练习的提示:
证明无论我们从高度为 h 的二叉搜索树中的哪个节点开始,k 次对 Tree-Successor 的连续调用都需要 O(k+h) 时间.
【问题讨论】:
标签: algorithm binary-search-tree proof
我需要 CLRS 算法一书中关于这个练习的提示:
证明无论我们从高度为 h 的二叉搜索树中的哪个节点开始,k 次对 Tree-Successor 的连续调用都需要 O(k+h) 时间.
【问题讨论】:
标签: algorithm binary-search-tree proof
k 连续调用TREE-SUCCESSOR 之后,让x 成为起始节点,z 成为结束节点。p 成为x 和z 之间的简单路径。y 成为p 访问的x 和z 的共同祖先。p的长度最多为2h,即O(h)。output 是其值介于x.key 和z.key 之间的元素。output 的大小为O(k)。k 对TREE-SUCCESSOR 的连续调用时,
访问p 中的节点,
除了节点x、y 和z,
如果访问p 中某个节点的子树,则其所有元素都在output 中。O(h+k)。【讨论】:
In the execution of k successive calls to TREE-SUCCESSOR, the nodes that are in p are visited, and besides the nodes x, y and z 你能解释一下这里的y 是什么吗?
y。
k 连续调用意味着调用查找后继函数k 次意味着我们将拥有k 不同的函数,每个函数都有自己的递归调用。我想,既然为每个人寻找继任者需要O(h),其中h是高度,那么我们需要O(h)+...+O(h)k次? P
提示:做一个小例子,观察结果,尝试推断原因。
要开始,这里有一些事情需要考虑。
从某个节点开始,对 Tree-Succcesor 的 k 次连续调用构成了部分树遍历。这次步行访问了多少(至少和最多)节点? (提示:想想key(x))。请记住,一条边最多被访问两次(为什么?)。
最后提示:结果是O(2h+k)。
【讨论】: