【问题标题】:What is the space complexity of a recursive function that searches a BST? - O(h) or O(log(n))?搜索 BST 的递归函数的空间复杂度是多少? - O(h) 还是 O(log(n))?
【发布时间】:2022-01-11 13:32:06
【问题描述】:

所以我为BST 编写了一些代码,我正在寻找target node 是否包含在其中。

在每个recursive call,树的一半被“消除”,即我们将需要的节点数减少到search for in half。现在虽然我知道这等于O(log(n)) space,但它不也等于树的高度O(h)吗?

作为一个视觉示例,请参见下文:

假设我们在 BST 中寻找 14,递归调用的最大数量将等于树的高度,3?这个对吗?我想这也适用于一般情况?因为我想不出一个不正确的例子。

【问题讨论】:

  • 您的推理假定树是平衡的,这在一般情况下不一定正确。如果树是平衡的,它的高度 O(log(n)).

标签: python binary-search-tree space-complexity


【解决方案1】:

在 BST 中,h 仅在树完全平衡时对应于 log(n),而通常您的搜索将是 O(h)

以一棵完全向一侧倾斜的树为例,如下所示:

这里的树的高度是7,最坏的情况是您将在哪里搜索最后一个节点,在树中执行 7 步,所以不是log(n) 的复杂性。

【讨论】:

  • 确实,考虑一下树完全向左或向右倾斜的最坏情况。在这种情况下,O(h) 意味着节点数为 O(n)。
  • 完美,现在说得通了。我没有根据树木的不同情况来考虑它。只是假设它通常不会平衡。
猜你喜欢
  • 1970-01-01
  • 2017-05-03
  • 2015-05-25
  • 2013-11-30
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多