证明在二叉树中重复调用successor()的效率?

时间:2011-12-10 06:00:07

标签: algorithm binary-search-tree proof

我需要从CLRS算法书中获得这个练习的提示:

  

证明无论我们在高度-h二进制搜索树中从哪个节点开始, k 对Tree-Successor的连续调用都需要 O(k + h)时间

2 个答案:

答案 0 :(得分:8)

  • x成为起始节点,z成为k连续调用TREE-SUCCESSOR之后的结束节点。
  • p成为xz之间的简单路径。
  • y成为x访问的zp的共同祖先。
  • p的长度最多为2h,即O(h)
  • output成为其值在x.keyz.key之间的元素。
  • output的尺寸为O(k)
  • 在执行k连续调用TREE-SUCCESSOR时, 访问p中的节点, 除了节点xyz之外, 如果访问p中某个节点的子树,则其所有元素都在output
  • 因此,运行时间为O(h+k)

答案 1 :(得分:3)

提示:找出一个小例子,观察结果,试着推断出原因。

要开始使用,需要考虑以下事项。

从某个节点开始,对Tree-Succcesor的k次连续调用构成了部分树步行。这次步行访问了多少(至少和最多)节点? (提示:想想关键(x))。请记住,边缘最多访问两次(为什么?)。

最终提示:结果为O(2h+k)