家庭作业帮助 - AVL树

时间:2014-07-09 06:26:31

标签: algorithm tree time-complexity avl-tree

这是一个家庭作业问题。我只是寻求帮助,因为我很难解决这个问题。

此AVL树的大小不是平衡因子,而是具有平衡因子的大小。

我必须证明高度是O(log n)。


我的想法

方法1 由于AVL树的高度为O(log n),我基本上可以证明这是一个AVL树。因此它与常规AVL树具有相同的高度。但是,我不确定如何完全做到这一点。我基本上需要证明一侧的高度相对于另一侧最多为+/- 1。如果是,则它将是AVL树。

方法2 我可以相当容易地证明Omega(log n),我可以使用它是平衡的最佳情况,在这种情况下,高度是log(n)。

之后,我可以尝试证明Big O案例。这是我不确定的部分。我不知道如何显示高度的上限是log(n)。

有人可以把我推向正确的方向吗?提出了哪种方法?

1 个答案:

答案 0 :(得分:0)

第一种方法不太可能成功 - AVL树的条件可能与您的描述不同。第二种方法更可行。

这里还有一个提示:感应。或者在更多的CS术语中,recurse :)你能证明所有具有n个节点的修改AVL树所需的高度属性是真的吗?如果是这样,您知道此属性已经适用于您的右侧和左侧子树。你能用它做什么?

编辑:更详细的答案 - 假设您已经证明,对于最多N个节点的所有树,高度受c log N限制,对于一些足够大的c。给定具有N+1个节点的树,让LR分别是其左右子树中的节点数。自L<=NR<=N以来,根据我们的归纳假设,这两个子树的高度均由c log (number of nodes)限定。完整树的高度以1 + max(c log L, c log R)为界。现在,L+R=NL<=2RR<=2L提供L<2N/3R<2N/3。所以,max(log L, log R) < log(2N/3) = log N + log(2/3)1 + c*max(log L, log R) < 1 + c*log N + c*log(2/3) < c*log(N+1),足够大c